機械学習-重回帰
重回帰
重回帰は線形回帰に似ていますが、複数の独立した値があります。つまり、 2つ以上の変数に基づいて値を予測しようとします。
以下のデータセットを見てください。これには、自動車に関するいくつかの情報が含まれています。
車両 | モデル | 音量 | 重さ | CO2 |
トヨタ | アイゴ | 1000 | 790 | 99 |
三菱 | スペーススター | 1200 | 1160 | 95 |
シュコダ | シティゴ | 1000 | 929 | 95 |
フィアット | 500 | 900 | 865 | 90 |
ミニ | クーパー | 1500 | 1140 | 105 |
VW | 上! | 1000 | 929 | 105 |
シュコダ | ファビア | 1400 | 1109 | 90 |
メルセデス | Aクラス | 1500 | 1365 | 92 |
フォード | フィエスタ | 1500 | 1112 | 98 |
アウディ | A1 | 1600 | 1150 | 99 |
ヒュンダイ | I20 | 1100 | 980 | 99 |
鈴木 | 迅速 | 1300 | 990 | 101 |
フォード | フィエスタ | 1000 | 1112 | 99 |
ホンダ | シビック | 1600 | 1252 | 94 |
ヒュンダイ | I30 | 1600 | 1326 | 97 |
オペル | アストラ | 1600 | 1330 | 97 |
BMW | 1 | 1600 | 1365 | 99 |
マツダ | 3 | 2200 | 1280 | 104 |
シュコダ | 急速 | 1600 | 1119 | 104 |
フォード | 集中 | 2000 | 1328 | 105 |
フォード | モンデオ | 1600 | 1584 | 94 |
オペル | 記章 | 2000 | 1428 | 99 |
メルセデス | Cクラス | 2100 | 1365 | 99 |
シュコダ | オクタビア | 1600 | 1415 | 99 |
ボルボ | S60 | 2000 | 1415 | 99 |
メルセデス | CLA | 1500 | 1465 | 102 |
アウディ | A4 | 2000 | 1490 | 104 |
アウディ | A6 | 2000 | 1725年 | 114 |
ボルボ | V70 | 1600 | 1523 | 109 |
BMW | 5 | 2000 | 1705 | 114 |
メルセデス | Eクラス | 2100 | 1605 | 115 |
ボルボ | XC70 | 2000 | 1746年 | 117 |
フォード | B-Max | 1600 | 1235 | 104 |
BMW | 2 | 1600 | 1390 | 108 |
オペル | ザフィーラ | 1600 | 1405 | 109 |
メルセデス | SLK | 2500 | 1395 | 120 |
エンジンのサイズに基づいて車のCO2排出量を予測できますが、重回帰を使用すると、車の重量など、より多くの変数を投入して、予測をより正確にすることができます。
それはどのように機能しますか?
Pythonには、作業を行うモジュールがあります。Pandasモジュールをインポートすることから始めます。
import pandas
Pandasチュートリアルで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値を予測する準備ができた回帰オブジェクトができました。
#predict the CO2 emission of a car where the weight
is 2300kg, and the volume is 1300cm3:
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)
#predict the CO2
emission of a car where the weight is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300]])
print(predictedCO2)
結果:
[107.2087328]
エンジンが1.3リッターで重量が2300kgの車は、走行距離1kmあたり約107グラムのCO2を排出すると予測しています。
係数
係数は、未知の変数との関係を表す要素です。
例:x
が変数の場合、
2x
はx
2回です。x
は未知の変数であり、数値2
は係数です。
この場合、CO2に対する重量の係数値とCO2に対する体積を求めることができます。私たちが得た答えは、独立した値の1つを増減した場合に何が起こるかを示しています。
例
回帰オブジェクトの係数値を出力します。
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]
結果の説明
結果の配列は、重量と体積の係数値を表します。
重量:0.00755095
体積:0.00780526
これらの値は、重量が1kg増加すると、CO2排出量が0.00755095g増加することを示しています。
そしてエンジン大きさ(体積)を1 CMによって増加した場合に3、0.00780526グラムによってCO2排出量が増加します。
それは公正な推測だと思いますが、テストしてみましょう。
エンジン1300cm3の車の重量が2300kgだとすると、CO2排出量は約107gになると予測しています。
1000kgで体重を増やすとどうなりますか?
例
前の例をコピーしますが、重みを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リッターで重量が3300kgの車は、走行距離1kmあたり約115グラムのCO2を排出すると予測しています。
これは、0.00755095の係数が正しいことを示しています。
107.2087328 +(1000 * 0.00755095)= 114.75968