1. 程式人生 > >線性回歸預測波士頓房價

線性回歸預測波士頓房價

max min tex grid frame sta stat sha repr

預測波士頓的房價,上次已經通過房間數目預測了房價,這次用多元線性回歸預測。

根據之前推導的多元線性回歸的參數

技術分享圖片

接下來是多元線性回歸的代碼實現

def LinearRegression_(x,y):
    np.array(x)
    np.array(y)
    a = (np.linalg.inv(x.T.dot(x))).dot(x.T).dot(y)

上次大致了解了得個feature的name。下面是‘ZN’和‘RM’的散點圖(由於我比較懶所以只實現這兩個)

技術分享圖片

技術分享圖片

我們可以看出每個特征的數據範圍相差較大,為了加快梯度下降求最優解的速度,將它們進行歸一化處理

from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
#分別對訓練和測試數據的特征以及目標值進行標準化處理
boston[data]=min_max_scaler.fit_transform(boston[data])
boston[target]=min_max_scaler.fit_transform(boston[target].reshape(-1,1))

在對y進行標準化的時候會報錯,因此要對boston[‘target‘]reshape()。下面就是進行數據劃分和預測

x = pd.DataFrame(boston[data],columns=boston[feature_names])
y = pd.DataFrame(boston[target],columns=[target])
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.33, random_state=42)

這裏我們用網格搜索法進行調參。我們用GridSearchCV,它存在的意義就是自動調參,只要把參數輸進去,就能給出最優化的結果和參數。但是這個方法適合於小數據集,一旦數據的量級上去了,很難得出結果。

param = {fit_intercept:[True,False],normalize:[True,False],copy_X:[True,False]}
grid = GridSearchCV(estimator=lr, param_grid=param, cv=5)
grid.fit(x_train,y_train)
print(grid.score(x_test,y_test))

最後得分

0.7258515818230062

線性回歸預測波士頓房價