TECH I.S.

機械学習 - 多重回帰


多重回帰

多重は線形回帰に似ていますが、複数の独立した値を持ちます。つまり、2つ以上の変数に基づいて値を予測しようとします。

以下のデータセットを見てください。これには、自動車に関する情報が含まれています。

Car Model Volume Weight CO2
トヨタ アイゴ 1000 790 99
三菱 スペーススター 1200 1160 95
シュコダ シティーゴ 1000 929 95
フィアット 500 900 865 90
ミニ クーパー 1500 1140 105
VW Up! 1000 929 105
シュコダ ファビア 1400 1109 90
メルセデス Aクラス 1500 1365 92
フォード フィエスタ 1500 1112 98
アウディ A1 1600 1150 99
ヒュンダイ A0 1100 980 99
スズキ Rapid 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
シュコダ Rapid 1600 1119 104
フォード Focus 2000年 1328 105
フォード モンデオ 1600 1584年 94
オペル Insignia 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マックス 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オブジェクトを返すことができます。

このファイルはテストのみを目的としており、次のデータ.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、体積が1300cm3の自動車の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) #predict the CO2 emission of a car where the weight is 2300kg, and the volume is 1300cm<sup>3</sup>: predictedCO2 = regr.predict([[2300, 1300]]) print(predictedCO2)

結果:

[107.2087328]

実行例(開発準備中)»

1.3リットルのエンジンを搭載し、重量が2300kgの自動車は、1km走行するごとに約107グラムのCO2を排出すると予測しています。


係数

係数は、未知の変数との関係を表す係数です。

例: xが変数の場合、2xxを2回表します。xは未知の変数、数値2は係数です。

この場合、CO2 に対する重量の係数値と、CO2に対する体積の係数値を求めることができます。得られた答えは、独立した値の1つを増やしたり減らしたりするとどうなるかを教えてくれます。

回帰オブジェクトの係数値を出力します。

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

これらの値は、重量が1kg増加すると、CO2排出量が0.00755095g増加することを示しています。

また、エンジンのサイズ(体積が1cm3増加すると、CO2排出量は0.00780526g増加します。

それは公正な推測だと思いますが、テストしてみましょう!

1300cm3のエンジンを搭載した車の重量が2300kgの場合、CO2排出量は約107gになると予測しています。

体重を1000kg増やしたら?

前の例をコピーしますが、重みを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リットルのエンジンを搭載し、重量が3300kgの自動車は、1km走行するごとに約115グラムのCO2を放出すると予測されています。

これは、0.00755095の係数が正しいことを示しています。

107.2087328 + (1000 * 0.00755095) = 114.75968



プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細