#-*-coding:utf-8-*-
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error
#擷取美國波士頓房價資料
boston = load_boston()
#檢視資料
#print(boston.DESCR)
X=boston.data
y=boston.target
#随機采樣25%的資料建構測試樣本,其餘作為訓練樣本
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=33,test_size=0.25)
#分析回歸目标值得差異
# print("max traget",np.max(boston.target))
# print("min target",np.min(boston.target))
# print("average target",np.mean(boston.target))
#分别初始化對特征和目标值的标準化器
ss_X=StandardScaler()
ss_y=StandardScaler()
#分别對訓練和測試資料的特征以及目标值進行标準化處理
X_train = ss_X.fit_transform(X_train)
X_test=ss_X.transform(X_test)
y_train = np.array(y_train).reshape(-1, 1)
y_train=ss_y.fit_transform(y_train)
y_test = np.array(y_test).reshape(-1, 1)
y_test =ss_y.transform(y_test)
#使用預設配置初始化線性回歸器LinearRegression
lr=LinearRegression()
#使用訓練資料進行參數估計
lr.fit(X_train,y_train)
#對測試資料進行回歸預測
lr_y_predict=lr.predict(X_test)
#初始化線性回歸器SGDRegressor
sgdr=SGDRegressor()
#訓練
sgdr.fit(X_train,y_train)
#測試資料回歸預測
sgdr_y_pridict = sgdr.predict(X_test)
#使用三種回歸評價機制以及兩種調用R-squared評價子產品的方法,對本節模型的回歸性能做出評價
print("linearRegression score is",lr.score(X_test,y_test))
#使用r2_score,mean_absolute_error,mean_squared_error進行性能評估
#r2_score評估
print("R-squared LinearRegression score " ,r2_score(y_test,lr_y_predict))
#mean_squared_error評估
print('mean_squared_error LinearRegression score ',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(lr_y_predict)))
#mean_absolute_error評估
print('mean_absolute_error LinearRegression score ',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(lr_y_predict)))
#對SGDRegressor模型自帶的評估子產品,對輸出進行評估
print('SGDRegressor score is ',sgdr.score(X_test,y_test))
#r2_score評估
print("R-squared SGDRegressor score " ,r2_score(y_test,sgdr_y_pridict))
#mean_squared_error評估
print('mean_squared_error SGDRegressor score ',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(sgdr_y_pridict)))
#mean_absolute_error評估
print('mean_absolute_error SGDRegressor score ',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(sgdr_y_pridict)))
作者:WangB