機器學習 - 多重回歸
多重回歸
多重回歸類似於 線性迴歸,但具有多個自變數,這意味著我們嘗試基於兩個或多個變數來預測一個值。
請看下面的資料集,它包含了一些關於汽車的資訊。
汽車 | Model | 音量 | Weight | CO2 |
豐田 | Aygo | 1000 | 790 | 99 |
Mitsubishi | Space Star | 1200 | 1160 | 95 |
Skoda | Citigo | 1000 | 929 | 95 |
Fiat | 500 | 900 | 865 | 90 |
迷你 | Cooper | 1500 | 1140 | 105 |
VW | Up! | 1000 | 929 | 105 |
Skoda | Fabia | 1400 | 1109 | 90 |
賓士 | A-Class | 1500 | 1365 | 92 |
福特 | Fiesta | 1500 | 1112 | 98 |
奧迪 | A1 | 1600 | 1150 | 99 |
Hyundai | I20 | 1100 | 980 | 99 |
Suzuki | Swift | 1300 | 990 | 101 |
福特 | Fiesta | 1000 | 1112 | 99 |
本田 | Civic | 1600 | 1252 | 94 |
Hundai | I30 | 1600 | 1326 | 97 |
Opel | Astra | 1600 | 1330 | 97 |
寶馬 | 1 | 1600 | 1365 | 99 |
Mazda | 3 | 2200 | 1280 | 104 |
Skoda | Rapid | 1600 | 1119 | 104 |
福特 | Focus | 2000 | 1328 | 105 |
福特 | Mondeo | 1600 | 1584 | 94 |
Opel | Insignia | 2000 | 1428 | 99 |
賓士 | C-Class | 2100 | 1365 | 99 |
Skoda | Octavia | 1600 | 1415 | 99 |
沃爾沃 | S60 | 2000 | 1415 | 99 |
賓士 | CLA | 1500 | 1465 | 102 |
奧迪 | A4 | 2000 | 1490 | 104 |
奧迪 | A6 | 2000 | 1725 | 114 |
沃爾沃 | V70 | 1600 | 1523 | 109 |
寶馬 | 5 | 2000 | 1705 | 114 |
賓士 | E-Class | 2100 | 1605 | 115 |
沃爾沃 | XC70 | 2000 | 1746 | 117 |
福特 | B-Max | 1600 | 1235 | 104 |
寶馬 | 2 | 1600 | 1390 | 108 |
Opel | Zafira | 1600 | 1405 | 109 |
賓士 | SLK | 2500 | 1395 | 120 |
我們可以根據發動機尺寸預測汽車的 CO2 排放量,但透過多重回歸,我們可以引入更多變數,例如汽車的重量,以使預測更準確。
它是如何工作的?
在 Python 中,我們有模組可以為我們完成工作。首先匯入 Pandas 模組。
import pandas
在我們的 Pandas 教程 中瞭解 Pandas 模組。
Pandas 模組允許我們讀取 csv 檔案並返回 DataFrame 物件。
該檔案僅用於測試目的,您可以在此處下載:data.csv
df = pandas.read_csv("data.csv")
然後,將自變數列入一個名為 X
的列表中。
將因變數放在一個名為 y
的變數中。
X = df[['Weight', 'Volume']]
y = df['CO2']
提示: 通常將自變數列表命名為大寫 X,將因變數列表命名為小寫 y。
我們將使用 sklearn 模組中的一些方法,所以我們也需要匯入該模組
from sklearn import linear_model
從 sklearn 模組中,我們將使用 LinearRegression()
方法來建立一個線性迴歸物件。
該物件有一個名為 fit()
的方法,它接受自變數和因變數作為引數,並用描述關係的資料填充迴歸物件。
regr = linear_model.LinearRegression()
regr.fit(X, y)
現在我們有了一個迴歸物件,可以根據汽車的重量和排量預測 CO2 值。
# 預測一輛重量為 2300kg、排量為 1300cm³ 的汽車的 CO2 排放量
predictedCO2 = regr.predict([[2300, 1300]])
示例
觀看整個示例的實際演示
import pandas
from sklearn import linear_model
df = pandas.read_csv("data.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr = linear_model.LinearRegression()
regr.fit(X, y)
# 預測一輛重量為 2300kg、排量為 1300cm³ 的汽車的 CO2 排放量
predictedCO2 = regr.predict([[2300, 1300]])
print(predictedCO2)
結果
[107.2087328]
我們預測,一輛發動機排量為 1.3 升、重量為 2300 公斤的汽車,每行駛一公里大約會釋放 107 克 CO2。
係數
係數是描述未知變數之間關係的因子。
例如:如果 x
是一個變數,那麼 2x
就是 x
的兩倍。x
是未知變數,數字 2
是係數。
在這種情況下,我們可以詢問重量與 CO2 之間的係數,以及排量與 CO2 之間的係數。我們得到的答案告訴我們,如果我們增加或減少其中一個自變數,會發生什麼。
示例
列印迴歸物件的係數
import pandas
from sklearn import linear_model
df = pandas.read_csv("data.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr = linear_model.LinearRegression()
regr.fit(X, y)
print(regr.coef_)
結果
[0.00755095 0.00780526]
結果解釋
結果陣列代表重量和排量的係數。
重量:0.00755095
排量:0.00780526
這些值告訴我們,如果重量增加 1 公斤,CO2 排放量增加 0.00755095 克。
如果發動機尺寸(排量)增加 1 cm³,CO2 排放量增加 0.00780526 克。
我認為這是一個合理的猜測,但讓我們來測試一下!
我們已經預測,如果一輛 1300cm³ 發動機的汽車重 2300 公斤,其 CO2 排放量將約為 107 克。
如果我們重量增加 1000 公斤呢?
示例
複製之前的示例,但將重量從 2300 改為 3300
import pandas
from sklearn import linear_model
df = pandas.read_csv("data.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr = linear_model.LinearRegression()
regr.fit(X, y)
predictedCO2 = regr.predict([[3300, 1300]])
print(predictedCO2)
結果
[114.75968007]
我們預測,一輛發動機排量為 1.3 升、重量為 3300 公斤的汽車,每行駛一公里大約會釋放 115 克 CO2。
這表明係數 0.00755095 是正確的
107.2087328 + (1000 * 0.00755095) = 114.75968