上篇文章中,我們根據BMI來預測壽命,BMI扮演一個“預測者”的角色,統計學中一般把它叫做“自變量(independent variable)”。“預測者”是一個(用于預測其他變量的)變量,那些被預測的那些值,一般被稱為“因變量(dependent variables)” ,那么,上個例子中,要預測的壽命就是因變量(dependent variable)。
那如果說我們還有每個人的心率數據,是否能夠使用 BMI 和心率兩組數據來預測壽命呢?當然可以!我們可以使用“多元線性回歸(multiple linear regression)”來實現。
如果你要預測的結果依賴多個變量,你可以建立一個更復雜的模型,這時使用多個自變量可以得到更好的預測結果。
當只有一個自變量的時候,線性回歸模型可以用一條直線來表示,當你添加多個自變量的時候,相當于空間中添加了更多的維度。
當只有一個自變量的時候,直線對應的方程式是:y=mx+b。對于的圖形也許是這樣的:
增加一個自變量,對應的方程式是:y= m1??x?1 ??+ m?2??x2 ?+ b
這個需要一個三維圖形來表示這個公式,這個時候,這個線性回歸模型就是一個平面:
你也可以使用更多的自變量,實際上用的越多效果越好!如果你使用了n個自變量,那么對應模型的方程可以這樣表示:y = m?1??x?1?? + m?2??x?2 ??+ m?3??x?3 ??+ … + m?n??x?n ??+ b
使用更多的自變量,相應的模型可視化也變得更難。但幸運的是,所有的線性回歸都是一樣的,可以直接用方程式推導出來。我們還是使用同樣的方式來進行預測。
多元線性回歸實踐
在這次實踐中,我們會用到 波斯頓房價的數據(https://archive.ics.uci.edu/ml/datasets/Housing),
這份數據已經包含在scikit-learn的數據集中,包含506所房屋的13項指標,我們使用這13項指標來建立模型,用于預測房子的價格。
完整代碼如下:
# 導入 LinearRegression 類 和 數據集
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
# 加載數據集
boston_data = load_boston()
x = boston_data['data']
y = boston_data['target']
# 建立一個回歸模型,并賦值給 model
model = LinearRegression()
# fit 函數根據數據調整模型
model.fit(x, y)
# 使用模型做出預測
sample_house = [[2.29690000e-01, 0.00000000e+00, 1.05900000e+01, 0.00000000e+00, 4.89000000e-01,
6.32600000e+00, 5.25000000e+01, 4.35490000e+00, 4.00000000e+00, 2.77000000e+02,
1.86000000e+01, 3.94870000e+02, 1.09700000e+01]]
# 使用 sample_house 的指標進行預測
prediction = model.predict(sample_house)
print(prediction)