# 导入数据
from sklearn.datasets import load_boston
boston = load_boston()
print boston.DESCR
#分割数据
from sklearn.model_selection import train_test_split
import numpy as np
x = boston.data
y = boston.target
x_train, x_test, y_train, y_test = train_test_split(x,y,random_state=33,test_size=0.25)
print 'The max target value is', np.max(boston.target)
print 'The min target value is', np.min(boston.target)
print 'The average target value is', np.mean(boston.target)
# max-min过大,标准化处理
from sklearn.preprocessing import StandardScaler
ss_x = StandardScaler()
ss_y = StandardScaler()
x_train = ss_x.fit_transform(x_train)
x_test = ss_x.transform(x_test)
y_train = ss_y.fit_transform(y_train[:,None])[:,0] #ss函数要求输入必须至少二维数组,此为等价格式
y_test = ss_y.transform(y_test[:,None])[:,0]
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(x_train,y_train)
lr_y_predict = lr.predict(x_test)
from sklearn.linear_model import SGDRegressor
sgdr = SGDRegressor()
sgdr.fit(x_train,y_train)
sgdr_y_predict = sgdr.predict(x_test)
# 性能评价:倾向于测量预测值与真实值的差距
# 准确率
print 'The value of default measurement of LinearRegression is', lr.score(x_test,y_test)
# R-squared,平均绝对误差MAE,均方误差MSE
# 评估LR
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
print 'The value of R-squared of LR is', r2_score(y_test,lr_y_predict)
print 'The MSE of LR is', mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(lr_y_predict))
print 'The MAE of LR is', mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(lr_y_predict))
# 评估SGDR
print 'The value of default measurement of SGDR is', sgdr.score(x_test,y_test)
print 'The R-squared of SGDR is', r2_score(y_test,sgdr_y_predict)
print 'The MSE of SGDR is', mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(sgdr_y_predict))
print 'The MAE of SGDR is', mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(sgdr_y_predict))
from sklearn.svm import SVR
# 使用线性核函数
linear_svr = SVR(kernel='linear')
linear_svr.fit(x_train,y_train)
linear_svr_y_predict = linear_svr.predict(x_test)
# 使用多项式核函数
poly_svr = SVR(kernel='poly')
poly_svr.fit(x_train,y_train)
poly_svr_y_predict = poly_svr.predict(x_test)
#使用径向基核函数
rbf_svr = SVR(kernel = 'rbf')
rbf_svr.fit(x_train,y_train)
rbf_svr_y_predict = rbf_svr.predict(x_test)
# 性能评价
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
print 'Linear-svr:', r2_score(y_test,linear_svr_y_predict), \
mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(linear_svr_y_predict)), \
mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(linear_svr_y_predict))
print 'Poly-svr:', r2_score(y_test,poly_svr_y_predict), \
mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(poly_svr_y_predict)), \
mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(poly_svr_y_predict))
print 'rbf-svr:', r2_score(y_test,rbf_svr_y_predict), \
mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(rbf_svr_y_predict)), \
mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(rbf_svr_y_predict))
from sklearn.neighbors import KNeighborsRegressor
uni_knr = KNeighborsRegressor(weights = 'uniform')
uni_knr.fit(x_train,y_train)
uni_knr_y_predict = uni_knr.predict(x_test)
dis_knr = KNeighborsRegressor(weights = 'distance')
dis_knr.fit(x_train,y_train)
dis_knr_y_predict = dis_knr.predict(x_test)
# 性能评价
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
print 'uni_knr:', r2_score(y_test,uni_knr_y_predict), \
mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(uni_knr_y_predict)), \
mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(uni_knr_y_predict))
print 'dis_knr:', r2_score(y_test,dis_knr_y_predict), \
mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(dis_knr_y_predict)), \
mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(dis_knr_y_predict))
from sklearn.tree import DecisionTreeRegressor
dtr = DecisionTreeRegressor()
dtr.fit(x_train,y_train)
dtr_y_predict = dtr.predict(x_test)
print 'dtr:', r2_score(y_test,dtr_y_predict), \
mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(dtr_y_predict)), \
mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(dtr_y_predict))
from sklearn.ensemble import RandomForestRegressor, ExtraTreesRegressor, GradientBoostingRegressor
# 随机森林
rfr = RandomForestRegressor()
rfr.fit(x_train,y_train)
rfr_y_predict = rfr.predict(x_test)
# 极端随机森林
etr = ExtraTreesRegressor()
etr.fit(x_train,y_train)
etr_y_predict = etr.predict(x_test)
# 梯度提升回归树
gbr = GradientBoostingRegressor()
gbr.fit(x_train,y_train)
gbr_y_predict = gbr.predict(x_test)
print 'rfr:', r2_score(y_test,rfr_y_predict), \
mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(rfr_y_predict)), \
mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(rfr_y_predict))
print 'etr:', r2_score(y_test,etr_y_predict), \
mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(etr_y_predict)), \
mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(etr_y_predict))
print np.sort(zip(etr.feature_importances_,boston.feature_names),axis=0)
print 'gbr:', r2_score(y_test,gbr_y_predict), \
mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(gbr_y_predict)), \
mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(gbr_y_predict))