【Python】scikit-learnで重回帰分析

今回はscikit-learnのライブラリを使って重回帰分析を実行する方法についてまとめていきたいと思います。

データの読み込み

今回は車に関するデータを使ってみます。データは下のリンクからダウンロードして各自任意のフォルダに移しておいてください。

まずはpandasを使ってCSVデータを読み込みます。

import pandas as pd
df = pd.read_csv('data/cars.csv')
df.head()
 Car Model Volume Weight CO2
0 Toyoty Aygo 1000 790 99
1 Mitsubishi Space Star 1200 1160 95
2 Skoda Citigo 1000 929 95
3 Fiat 500 900 865 90
4 Mini Cooper 1500 1140 105

今回は車の体積(Volume)と車の重量(Weight)を説明変数として、CO2の排出量について予測できるかやっていきたいと思います。

なのでいったん説明変数と目的変数をそれぞれX、yの変数にいれましょう。

X = df[['Weight', 'Volume']]
y = df['CO2']
余談
説明変数のリストには大文字のXをつけて、目的変数のリストには小文字のyをつけるのが一般的らしいです。

モデルの作成と予測

データの読み込みが完了したのでここからモデルの作成と予測を実行していきたいと思います。

まずは重回帰分析を実行するためのライブラリを読み込みましょう。重回帰分析では「linear_model」を使います。

from sklearn import linear_model

モデルの作成

LinearRegressuib()メソッドを使用して線形回帰オブジェクトを作成し、fit()メソッドを使ってcarsのデータをもとにモデルを作成します。

reg = linear_model.LinearRegression()
reg.fit(X, y)

これだけで、VolumeとWeightに基づいてCO2の値を予測する準備ができました。

予測の実行

先程作成したモデルをもとに、適当な値をいれて予測を実行してみます。

predict_co2 = reg.predict([[2400, 1300]])
print(predict_co2)
[107.96382753]

Volumeが2400に対してWeightが1300のときはCO2が107.96382753であると予測されました。

係数と切片の確認

ついでに係数を確認して、実際の予測の計算が正しいのか確認してみましょう。

作成したモデルに対して係数を確認するには以下のようにします。

print(reg.coef_)
[0.00755095 0.00780526]

この結果の解釈としてはWeightの係数が0.00755095でVolumeの係数が0.00780526であることを表しています。

つまりWeightが1増えるとCO2が0.00755095増え、Volumeが1増えるとCO2が0.00780526増えるということです。

また、切片はintercept_を確認します。

print(reg.intercept_)
79.69471929115937

係数と切片を確認できたので実際に手動で計算してみると、先程の結果と同じになることがわかると思います。

(reg.coef_[0] * 2400) + (reg.coef_[1] * 1300) + reg.intercept_