基於sklearn波士頓房價預測——線性迴歸實戰

一、導入庫和數據

from sklearn.datasets import load_boston
import matplotlib.pyplot as plt
dataset = load_boston()
x_data = dataset.data # 導入所有特徵變量
y_data = dataset.target # 導入目標值(房價)
name_data = dataset.feature_names #導入特徵名

二、數據可視化

畫出房價關於所有特徵的散點圖:

for i in range(13):
    plt.subplot(7,2,i+1)
    plt.scatter(x_data[:,i],y_data,s = 20)
    plt.title(name_data[i])  
    plt.show

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

三、數據處理

1.異常數據處理

(1)有16個目標值值爲50.0的數據點需要被移除。
(2)根據散點圖分析,房屋的’RM’, ‘LSTAT’,'PTRATIO’特徵與房價的相關性最大,所以,將其餘不相關特徵移除。

x_data = dataset.data
y_data = dataset.target
i_=[]
for i in range(len(y_data)):
    if y_data[i] == 50:
        i_.append(i)#存儲房價等於50 的異常值下標
x_data = delete(x_data,i_,axis=0)#刪除房價異常值數據
y_data = delete(y_data,i_,axis=0)#刪除異常值
name_data = dataset.feature_names
j_=[]
for i in range(13):
    if name_data[i] == 'RM'or name_data[i] == 'PTRATIO'or name_data[i] == 'LSTAT':
        continue
    j_.append(i)#存儲其他次要特徵下標
x_data = delete(x_data,j_,axis=1)#在總特徵中刪除次要特徵
print(shape(y_data))
print(shape(x_data))
輸出:
(490,)
(490, 3)
即最後剩餘3個主要特徵,490個樣本值,490個房價值

2.數據分割

數據需要被分割爲訓練集和測試集:

from sklearn.cross_validation import train_test_split
import numpy as np
#隨機擦癢20%的數據構建測試樣本,剩餘作爲訓練樣本
X_train,X_test,y_train,y_test=train_test_split(x_data,y_data,random_state=0,test_size=0.20)
print(len(X_train))
print(len(X_test))
print(len(y_train))
print(len(y_test))

輸出:

392
98
392
98

3.數據歸一化

通過上面的散點圖可得,每個特徵的數據範圍相差較大,爲了加快梯度下降求最優解的速度,將它們進行歸一化處理,均轉化爲0~1之間的數據。
歸一化加速優化的原理圖如下:
(1)數據未處理時:
在這裏插入圖片描述
(2)歸一化處理之後:
在這裏插入圖片描述
採用最大最小標準化:

#數據標歸一化處理
from sklearn import preprocessing
#分別初始化對特徵和目標值的標準化器
min_max_scaler = preprocessing.MinMaxScaler()
#分別對訓練和測試數據的特徵以及目標值進行標準化處理
X_train=min_max_scaler.fit_transform(X_train)
X_test=min_max_scaler.fit_transform(X_test)
y_train=min_max_scaler.fit_transform(y_train.reshape(-1,1))#reshape(-1,1)指將它轉化爲1列,行自動確定
y_test=min_max_scaler.fit_transform(y_test.reshape(-1,1))#reshape(-1,1)指將它轉化爲1列,行自動確定

四、模型訓練和評估

(1)採用線性迴歸模型進行訓練

#使用線性迴歸模型LinearRegression對波士頓房價數據進行訓練及預測
from sklearn.linear_model import LinearRegression
lr=LinearRegression()
#使用訓練數據進行參數估計
lr.fit(X_train,y_train)
#迴歸預測
lr_y_predict=lr.predict(X_test)

(2)使用R2_score對模型評估
r2_score()函數計算R^2,即確定係數,可以表示特徵模型對特徵樣本預測的好壞。

from sklearn.metrics import r2_score
score = r2_score(y_test, lr_y_predict)

輸出得分:

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