現實世界的曲線關係都是經過增長多項式實現的,如今解決多項式迴歸問題html
住房價格樣本ide
樣本圖像測試
import matplotlib.font_manager as fm import matplotlib.pyplot as plt myfont = fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc') # plt.figure() # 實例化做圖變量 plt.title('房價面積價格樣本', fontproperties = myfont) # 圖像標題 plt.xlabel('面積(平方米)', fontproperties = myfont) # x軸文本 plt.ylabel('價格(萬元)', fontproperties = myfont) # y軸文本 # plt.axis([30, 400, 100, 400]) plt.grid(True) # 是否繪製網格線 X = [[50], [100], [150], [200], [250], [300]] y = [[150], [200], [250], [280], [310], [330]] X_test = [[250], [300]] # 用來作最終效果測試 y_test = [[310], [330]] # 用來作最終效果測試 # plt.plot(X, y, 'b.')#點 # plt.plot(X, y, 'b-')#線 plt.scatter(X, y, marker='*',color='blue',label='房價面積價格樣本') plt.show()
用線性迴歸spa
添加如下代碼設計
model = LinearRegression() model.fit(X, y) print('一元線性迴歸 r-squared', model.score(X_test, y_test)) X2 = [[30], [400]] y2 = model.predict(X2) plt.plot(X2, y2, 'g-') plt.show()
實際狀況是,若是房屋面積一味的增長,房價並不會線性增加,所以線性關係已經沒法描述真實的房價問題3d
採用多項式迴歸orm
# 實例化一個二次多項式特徵實例 quadratic_featurizer = PolynomialFeatures(degree=2) # 用二次多項式對樣本X值作變換 X_train_quadratic = quadratic_featurizer.fit_transform(X) # 建立一個線性迴歸實例 regressor_model = LinearRegression() # 以多項式變換後的x值爲輸入,代入線性迴歸模型作訓練 regressor_model.fit(X_train_quadratic, y) # 設計x軸一系列點做爲畫圖的x點集 xx = np.linspace(30, 400, 100) # 把訓練好X值的多項式特徵實例應用到一系列點上,造成矩陣 xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1)) yy_predict = regressor_model.predict(xx_quadratic) # 用訓練好的模型做圖 plt.plot(xx, yy_predict, 'r-') X_test_quadratic = quadratic_featurizer.transform(X_test) print('二次迴歸 r-squared', regressor_model.score(X_test_quadratic, y_test)) # # plt.show() # 展現圖像
繼續三次迴歸htm
cubic_featurizer = PolynomialFeatures(degree=3) X_train_cubic = cubic_featurizer.fit_transform(X) regressor_cubic = LinearRegression() regressor_cubic.fit(X_train_cubic, y) xx_cubic = cubic_featurizer.transform(xx.reshape(xx.shape[0], 1)) plt.plot(xx, regressor_cubic.predict(xx_cubic)) X_test_cubic = cubic_featurizer.transform(X_test) print('三次迴歸 r-squared', regressor_cubic.score(X_test_cubic, y_test)) plt.show() # 展現圖像
能夠看到三次迴歸比二次迴歸效果又好了一些,可是不是很明顯。因此二次迴歸更多是最適合的迴歸模型,三次迴歸可能有過擬合現象blog
參考:http://www.aboutyun.com/thread-19073-1-1.htmlit