数据分析-回归-案例-波士顿房价数据集
@數據分析-回歸-波士頓房價數據集
數據來源:
boston-housing-dataset
目錄
1、目標
2、數據集介紹
3、代碼
3.1 導入必須的工具包
3.2 導入數據
3.3 數據探索
3.4 數據集劃分
3.5 模型構建
3.6?評價
1、目標
根據歷史房價數據建立回歸模型,預測不同類型房屋的價格。
2、數據集
樣本數:10000
特征數量: 13個相關屬性(即13個指標變量),1個目標變量(房價)。
特征 說明
CRIM 城鎮人均犯罪率
ZN 大于25,000平方英尺的地塊劃分為住宅用地的比例
INDUS 每個城鎮非零售業務的比例
CHAS 查爾斯河虛擬變量(如果 = 1則為河; =0則不為河)
NOX 一氧化氮濃度(每千萬)
RM 每間住宅的平均房間數
AGE 自住房屋是在1940年之前建造的比例
DIS 到加州五個就業中心的加權距離
RAD 對徑向高速公路的可達性指數
TAX 每10,000美元的全價物業稅
PTRATIO 城鎮的學生與教師比例
B 1000(Bk-0.63)^ 2其中Bk是城鎮的黑人的比例
LSTAT 低社會階層人口比例%
MEDV 以1000美元為單位的自住房屋的中位數價格
3 代碼
3.1 導入必須的工具包
import numpy as np import pandas as pd from sklearn import preprocessing from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression,Lasso,ElasticNet from sklearn.metrics import r2_score from sklearn.metrics import mean_squared_error import matplotlib.pyplot as plt %matplotlib inline import seaborn as sn3.2 讀入數據
data = pd.read_csv("d:/datasets/HousingData.csv")#讀取csv3.3 數據探索
查看數據的類型,完整性
查看數據的統計特征(均值、方差等)
通過散點圖展示各特征與目標變量的關系
for id in data.columns[:-1]:sn.pairplot(data[[id,data.columns[-1]]])特征與標簽分離,y = 波士頓房價,X = 輸入變量
y = data['MEDV'] # 標簽-房價 X = data.drop(['MEDV'], axis=1) #去掉標簽(房價)的數據子集3.4 數據集劃分
X_train為訓練數據, y_train為訓練集標簽,X_test為測試數據,y_test為測試集標簽。
抽取70%的數據作為訓練集, 用剩余樣本進行分類結果測試。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)3.5? 數據標準化
Z-score標準化,在訓練集上訓練,在訓練集與測試集上標準化,泛化時標準化也用訓練集上的訓練結果。
scaler=preprocessing.StandardScaler().fit(X_train) X_train=scaler.transform(X_train) X_test=scaler.transform(X_test)3.6 模型構建\訓練\預測\評價
LinearRegression回歸模型:
lr = LinearRegression() #實例化一個線性回歸對象 lr.fit(X_train, y_train) #采用fit方法,擬合回歸系數和截距 print(lr.intercept_) #輸出截距 print(lr.coef_) #輸出系數 可分析特征的重要性以及與目標的關系 y_pred = lr.predict(X_test)#模型預測 print("R2=",r2_score(y_test, y_pred))#模型評價, 決定系數 #print("mse=",mean_squared_error(y_test, y_pred))#均方誤差 #print(lr.intercept_) #輸出截距 #print(lr.coef_) #系數 0.7244902005756717可視化預測值與真實值
plt.plot(y_test.values,c="r",label="y_test") plt.plot(y_pred,c="b",label="y_pred") plt.legend()ElasticNet回歸
EN=ElasticNet(0.01) #實例化彈性網絡回歸對象 EN.fit(X_train,y_train) #訓練 y_pred=EN.predict(X_test) #預測 #評價 print(r2_score(y_pred,y_test)) #print("mse=",mean_squared_error(y_test, y_pred))#均方誤差 y_predt=EN.predict(X_train) #查看訓練集上的效果 print(r2_score(y_predt,y_train)) 0.6206474701040163 0.7143978031016661lasso回歸
la = Lasso() la.fit(X_train, y_train)#擬合 y_pred=la.predict(X_test) #預測 #評價 print(r2_score(y_pred,y_test)) #print("mse=",mean_squared_error(y_test, y_pred))#均方誤差 y_predt=la.predict(X_train) #查看訓練集上的效果 print(r2_score(y_predt,y_train)) #prtin(la.coef_) #輸出系數 (部分系數為“0”,lasso常用與特征提取) 可分析特征的重要性以及與目標的關系 0.6463644720156518 0.7135957871520437嶺回歸
from sklearn.linear_model import Ridge rd=Ridge(0.01) rd.fit(X_train,y_train) y_pred=rd.predict(X_test) print(r2_score(y_pred,y_test)) y_predt=rd.predict(X_train) print(r2_score(y_predt,y_train)) 0.6254595151946203 0.717315101727843貝葉斯嶺回歸
from sklearn.linear_model import BayesianRidge Brd=BayesianRidge() Brd.fit(X_train,y_train) y_pred=Brd.predict(X_test) print(r2_score(y_pred,y_test)) y_predt=Brd.predict(X_train) print(r2_score(y_predt,y_train)) 0.6117791860152302 0.708456749967072K近鄰回歸
from sklearn.neighbors import KNeighborsRegressor Knr=KNeighborsRegressor() Knr.fit(X_train,y_train) y_pred=Knr.predict(X_test) print(r2_score(y_pred,y_test)) y_predt=Knr.predict(X_train) r2_score(y_predt,y_train) 0.47466312380045683 0.7576061948485711支持向量回歸
from sklearn.svm import SVR svr=SVR() svr.fit(X_train,y_train) y_pred=svr.predict(X_test) print(r2_score(y_pred,y_test)) y_predt=svr.predict(X_train) r2_score(y_predt,y_train) -0.3945293748344476 #訓練效果差到不如用均值估計 0.1313717790081549決策樹回歸
from sklearn.tree import DecisionTreeRegressor dtr=DecisionTreeRegressor(max_depth=4) dtr.fit(X_train,y_train) y_pred=dtr.predict(X_test) print(r2_score(y_pred,y_test)) y_predt=dtr.predict(X_train) print(r2_score(y_predt,y_train)) 0.7795924378835133 0.8862706664213111多項式回歸
from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2) # 添加特征(升維) poly.fit(X_train) poly.fit(X_test) X_1 = poly.transform(X_train) X_2 = poly.transform(X_test) # 訓練 lin_reg = LinearRegression() lin_reg.fit(X_1, y_train) #預測、評價 y_pred = lin_reg.predict(X_1) print(r2_score(y_pred,y_train)) y_pred = lin_reg.predict(X_2) print(r2_score(y_pred,y_test)) 0.9613453122107047 #訓練集效果很好,測試集一般,過擬合 0.7262626772433789總結
以上是生活随笔為你收集整理的数据分析-回归-案例-波士顿房价数据集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android系统init进程启动及in
- 下一篇: 嵌入式杂谈之makefile补充