第十二次作業——基於波士頓資料集的迴歸模型與房價預測0.0
阿新 • • 發佈:2018-12-11
任務:
- 匯入boston房價資料集
- 一元線性迴歸模型,建立一個變數與房價之間的預測模型,並圖形化顯示。
- 多元線性迴歸模型,建立13個變數與房價之間的預測模型,並檢測模型好壞,並圖形化顯示檢查結果。
- 一元多項式迴歸模型,建立一個變數與房價之間的預測模型,並圖形化顯示。
1、匯入Boston資料集
#!/usr/bin/python # -*- coding:utf-8 -*- # -*- author:DavidHuang -*- from sklearn.linear_model import LinearRegression from sklearn.datasets import load_boston from sklearn.cross_validation import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVR from sklearn.metrics import r2_score,mean_squared_error,mean_absolute_error import numpy as np import pandas as pd
boston = load_boston()
#
# print(boston.DESCR) # 共506條波士頓地區房價資訊,每條13項數值特徵描述和目標房價
# print("最大房價:",np.max(boston.target))
# print("最小房價:",np.min(boston.target))
# print("平均房價:",np.mean(boston.target))
#
可以看到波士頓資料集的有關資訊
print("開始進行預測和分析!\n========================") print(bos.keys())==") bos = load_boston() bos.keys() 資料集大小 print("資料集大小\n",boston.data.shape) 資料集特徵 print("資料集特徵\n",boston.feature_names) 資料集預測 print("資料集預測\n",boston.target)
資料集大小和特徵
資料集預測
bd = pd.DataFrame(bos.data)
print(bd)
print("開始進行一元線性迴歸!準備好了嗎!")
import matplotlib.pyplot as plt
data = bos.data
x = bos.data[:,5]
y = bos.target
plt.scatter(x,y)
plt.plot(x,8*x-25)# 這裡定義一條直線 y = w*x+b,其中w是斜率,b是與y軸的截距
plt.show()
可以看到迴歸模型和迴歸線是比較符合的
多元線性迴歸
print("一元迴歸結束!開始進行多元線性迴歸!準備好了嗎!") import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression boston = load_boston() lineR = LinearRegression() # w = lineR.coef_ # b = lineR.intercept_ x = boston.data[:,12].reshape(-1,1) y = boston.target lineR.fit(boston.data,y) plt.figure(figsize=(10,6)) plt.scatter(x,y) plt.plot(x,-0.8*x+30,'r')#迴歸線 plt.show()
# 將一元轉多元
lineR = LinearRegression()
lineR.fit(x,y)
y_pred = lineR.predict(x)
plt.plot(x,y_pred)
print(lineR.coef_,lineR.intercept_)
plt.show()
# 一元轉多項
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
x_poly = poly.fit_transform(x)
lrp = LinearRegression()
lrp.fit(x_poly,y)
y_poly_pred = lrp.predict(x_poly)
plt.scatter(x,y)
plt.scatter(x,y_pred)
plt.scatter(x,y_poly_pred)
plt.show()