一、導入庫和數據
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