實現迴歸預測美國波士頓地區房價過程中出現的問題

我是參考“python學習及實踐——從零開始通往Kaggle競賽之路”來練習迴歸預測算法的,並採用三種迴歸評價機制(MAE, MSE, R-squared)來評價迴歸性能。

一、讀取波士頓房價數據

#導入波士頓房價數據讀取器
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

#隨機採樣25%的數據作爲測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 33)

#分析迴歸目標值的差異
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))

大致輸出如下:

三、訓練與測試數據的標準化處理

由於各房子的房價之間差異較大,所以需要對特徵及目標值進行標準化處理。

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)
y_test = ss_y.fit_transform(y_test)

結果報錯並提示我們:

ValueError: Expected 2D array, got 1D array instead:

Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

要求我們:如果說我們的數據只有單個特徵,就需要使用array.reshape(-1, 1)來轉換我們的數據;如果數據包含單個實例,就要使用array.reshape(1, -1)來轉換數據。

array.reshape(-1, 1)的意思是我們只想將數據變成一列而不管轉換後到底有多少行。

所以代碼修改如下:

from sklearn.preprocessing import StandardScaler

#分別初始化對特徵和目標值的標準化器
ss_X = StandardScaler()
ss_y = StandardScaler()

#爲數據增加一個維度
y_train = y_train.reshape(-1, 1)
y_test = y_test.reshape(-1, 1)

#分別對訓練和測試數據的特徵以及目標值進行標準化處理
X_train = ss_X.fit_transform(X_train)
X_test = ss_X.transform(X_test)

y_train = ss_y.fit_transform(y_train)
y_test = ss_y.fit_transform(y_test)

四.使用線性迴歸模型LinearRegression和SGDRegressor分別對美國波士頓地區的房價進行預測

from sklearn.linear_model import LinearRegression
#使用默認配置初始化線性迴歸器LinearRegression
lr = LinearRegression()

#使用訓練數據進行參數估計
lr.fit(X_train, y_train)

#對測試數據進行迴歸預測
lr_y_pred = lr.predict(X_test)

from sklearn.linear_model import SGDRegressor
#使用默認配置初始化線性迴歸器
sgdr = SGDRegressor()

#使用訓練數據進行參數估計
sgdr.fit(X_train, y_train)
#迴歸預測
sgdr_y_pred = sgdr.predict(X_test)

五、使用三種迴歸評價機制以及兩種調用R-squared評價模塊的方法,対本節模型的迴歸性能作出評價

#使用LinearRegression模型自帶的評估模塊,並輸出評估結果
print ('The value of default measurement of LinearRegression is', lr.score(X_test, y_test))

#依次導入r2_score,mean_squared_error以及mean_absoluate_error用於迴歸性能的評估
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error

#使用r2_score模塊,輸出評估結果
print ("The value of R-squared of LinearRegression is", r2_score(y_test, lr_y_pred))

#使用mean_squared_error模塊,輸出評估結果
print ("The value of mean_squared_error of LinearRegression is", mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(lr_y_pred)))

#使用mean_absolute_error模塊,輸出評估結果
print ("The value of mean_absolute_error of LinearRegression is", mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(lr_y_pred)))

#使用SGDRegressor模型自帶的評估模塊,輸出評估結果
print('The value of default measurement of SGDRegression is', sgdr.score(X_test, y_test))

#使用r2_score模塊,輸出評估結果
print('The value of R-squared of SGDRegression is', r2_score(y_test, sgdr_y_pred))

#使用mean_squared_error模塊,輸出評估結果
print("The value of mean squared error of SGDRegression is", mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(sgdr_y_pred)))

#使用mean_absolute_error模塊,輸出評估結果
print("The value of mean absolute error of SGDRegression is", mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(sgdr_y_pred)))

運行結果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章