機器學習 - 多元回歸
多元回歸(Multiple Regression)
多元回歸就像線性回歸一樣,但是具有多個獨立值,這意味著我們試圖基于兩個或多個變量來預測一個值。
請看下面的數據集,其中包含了一些有關汽車的信息。
Car | Model | Volume | Weight | CO2 |
---|---|---|---|---|
Toyota | Aygo | 1000 | 790 | 99 |
Mitsubishi | Space Star | 1200 | 1160 | 95 |
Skoda | Citigo | 1000 | 929 | 95 |
Fiat | 500 | 900 | 865 | 90 |
Mini | Cooper | 1500 | 1140 | 105 |
VW | Up! | 1000 | 929 | 105 |
Skoda | Fabia | 1400 | 1109 | 90 |
Mercedes | A-Class | 1500 | 1365 | 92 |
Ford | Fiesta | 1500 | 1112 | 98 |
Audi | A1 | 1600 | 1150 | 99 |
Hyundai | I20 | 1100 | 980 | 99 |
Suzuki | Swift | 1300 | 990 | 101 |
Ford | Fiesta | 1000 | 1112 | 99 |
Honda | Civic | 1600 | 1252 | 94 |
Hundai | I30 | 1600 | 1326 | 97 |
Opel | Astra | 1600 | 1330 | 97 |
BMW | 1 | 1600 | 1365 | 99 |
Mazda | 3 | 2200 | 1280 | 104 |
Skoda | Rapid | 1600 | 1119 | 104 |
Ford | Focus | 2000 | 1328 | 105 |
Ford | Mondeo | 1600 | 1584 | 94 |
Opel | Insignia | 2000 | 1428 | 99 |
Mercedes | C-Class | 2100 | 1365 | 99 |
Skoda | Octavia | 1600 | 1415 | 99 |
Volvo | S60 | 2000 | 1415 | 99 |
Mercedes | CLA | 1500 | 1465 | 102 |
Audi | A4 | 2000 | 1490 | 104 |
Audi | A6 | 2000 | 1725 | 114 |
Volvo | V70 | 1600 | 1523 | 109 |
BMW | 5 | 2000 | 1705 | 114 |
Mercedes | E-Class | 2100 | 1605 | 115 |
Volvo | XC70 | 2000 | 1746 | 117 |
Ford | B-Max | 1600 | 1235 | 104 |
BMW | 2 | 1600 | 1390 | 108 |
Opel | Zafira | 1600 | 1405 | 109 |
Mercedes | SLK | 2500 | 1395 | 120 |
我們可以根據發動機排量的大小預測汽車的二氧化碳排放量,但是通過多元回歸,我們可以引入更多變量,例如汽車的重量,以使預測更加準確。
工作原理
在 Python 中,我們擁有可以完成這項工作的模塊。首先導入 Pandas 模塊:
import pandas
Pandas 模塊允許我們讀取 csv 文件并返回一個 DataFrame 對象。
此文件僅用于測試目的,您可以在此處下載:cars.csv
df = pandas.read_csv("cars.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、排量為 1300ccm 的汽車的二氧化碳排放量: predictedCO2 = regr.predict([[2300, 1300]])
實例
請看完整實例:
import pandas from sklearn import linear_model df = pandas.read_csv("cars.csv") X = df[['Weight', 'Volume']] y = df['CO2'] regr = linear_model.LinearRegression() regr.fit(X, y) # 預測重量為 2300kg、排量為 1300ccm 的汽車的二氧化碳排放量: predictedCO2 = regr.predict([[2300, 1300]]) print(predictedCO2)
結果:
[107.2087328]
我們預測,配備 1.3 升發動機,重量為 2300 千克的汽車,每行駛 1 公里,就會釋放約 107 克二氧化碳。
系數
系數是描述與未知變量的關系的因子。
例如:如果 x
是變量,則 2x
是 x
的兩倍。x
是未知變量,數字 2
是系數。
在這種情況下,我們可以要求重量相對于 CO2 的系數值,以及體積相對于 CO2 的系數值。我們得到的答案告訴我們,如果我們增加或減少其中一個獨立值,將會發生什么。
實例
打印回歸對象的系數值:
import pandas from sklearn import linear_model df = pandas.read_csv("cars.csv") X = df[['Weight', 'Volume']] y = df['CO2'] regr = linear_model.LinearRegression() regr.fit(X, y) print(regr.coef_)
結果:
[0.00755095 0.00780526]
結果解釋
結果數組表示重量和排量的系數值。
Weight: 0.00755095 Volume: 0.00780526
這些值告訴我們,如果重量增加 1g,則 CO2 排放量將增加 0.00755095g。
如果發動機尺寸(容積)增加 1 ccm,則 CO2 排放量將增加 0.00780526g。
我認為這是一個合理的猜測,但還是請進行測試!
我們已經預言過,如果一輛配備 1300ccm 發動機的汽車重 2300 千克,則二氧化碳排放量將約為 107 克。
如果我們增加 1000g 的重量會怎樣?
實例
復制之前的例子,但是將車重從 2300 更改為 3300:
import pandas from sklearn import linear_model df = pandas.read_csv("cars.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 升發動機,重量為 3.3 噸的汽車,每行駛 1 公里,就會釋放約 115 克二氧化碳。
這表明 0.00755095 的系數是正確的:
107.2087328 + (1000 * 0.00755095) = 114.75968