1. 程式人生 > 實用技巧 >02-09 對數線性迴歸(波士頓房價預測)

02-09 對數線性迴歸(波士頓房價預測)

目錄
更新、更全的《機器學習》的更新網站,更有python、go、資料結構與演算法、爬蟲、人工智慧教學等著你:https://www.cnblogs.com/nickchen121/p/11686958.html

對數線性迴歸(波士頓房價預測)

一、匯入模組

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from sklearn.linear_model import
LinearRegression from sklearn.metrics import r2_score %matplotlib inline font = FontProperties(fname='/Library/Fonts/Heiti.ttc')

二、獲取資料

在《程式碼-普通線性迴歸》的時候說到特徵LSTAT和標記MEDV有最高的相關性,但是它們之間並不是線性關係,嘗試多項式迴歸發現可以得到不錯的結果,但是多項式可能會增加模型的複雜度容易導致過擬合的問題出現,是不是可以假設特徵和標記之間可能符合對數線性迴歸呢?即yx的關係為

ln(y)=x

下面將使用對數線性迴歸做嘗試。

df = pd.read_csv('housing-data.txt', sep='\s+', header=0)
X = df[['LSTAT']].values
y = df['MEDV'].values

# np.log()預設以\(e\)為底數
y_sqrt = np.log(y)

三、訓練模型

# 增加x軸座標點
X_fit = np.arange(X.min(), X.max(), 1)[:, np.newaxis]

lr = LinearRegression()

# 線性迴歸
lr.fit(X, y)
lr_predict = lr.predict(X_fit)
# 計算線性迴歸的R2值


lr_r2 = r2_score(y, lr.predict(X))

四、視覺化

plt.scatter(X, y, c='gray', edgecolor='white', marker='s', label='訓練資料')
plt.plot(X_fit, lr_predict, c='r',
         label='線性,$R^2={:.2f}$'.format(lr_r2))

plt.xlabel('地位較低人口的百分比[LSTAT]', fontproperties=font)
plt.ylabel('ln(以1000美元為計價單位的房價[RM])', fontproperties=font)
plt.title('波士頓房價預測', fontproperties=font, fontsize=20)
plt.legend(prop=font)
plt.show()

上圖可以看出對數線性迴歸也能比較不錯的擬合特徵與標記之間的關係,這次只是使用了標準的對數線性迴歸擬合兩者之間的關係,你也可以自行選擇不同的關係函式g(·)去擬合兩者之間的關係,也許可能會得到一個不錯的結果。