1. 程式人生 > >第十二次作業——基於波士頓資料集的迴歸模型與房價預測0.0

第十二次作業——基於波士頓資料集的迴歸模型與房價預測0.0

任務:

  1. 匯入boston房價資料集
  1. 一元線性迴歸模型,建立一個變數與房價之間的預測模型,並圖形化顯示。
  1. 多元線性迴歸模型,建立13個變數與房價之間的預測模型,並檢測模型好壞,並圖形化顯示檢查結果。
  1. 一元多項式迴歸模型,建立一個變數與房價之間的預測模型,並圖形化顯示。

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()