機械学習 - Scale(スケール)
スケール機能
データの値が異なる場合、さらには測定単位が異なる場合、それらを比較することが困難になることがあります。メートルに比べてキログラムは?あるいは高度と時間を比較するのは?
この問題の答えはスケーリングです。比較しやすい新しい値にデータをスケーリングできます。
以下の表を見てください。これは多重回帰の章で使用したのと同じデータセットですが、今回はVolume列にcm3ではなくリットル単位の値が含まれています(1000ではなく1.0)。
Car | Model | Volume | Weight | CO2 |
トヨタ | アイゴ | 1.0 | 790 | 99 |
三菱 | スペーススター | 1.2 | 1160 | 95 |
シュコダ | シティーゴ | 1.0 | 929 | 95 |
フィアット | 500 | 0.9 | 865 | 90 |
ミニ | クーパー | 1.5 | 1140 | 105 |
VW | Up! | 1.0 | 929 | 105 |
シュコダ | ファビア | 1.4 | 1109 | 90 |
メルセデス | Aクラス | 1.5 | 1365 | 92 |
フォード | フィエスタ | 1.5 | 1112 | 98 |
アウディ | A1 | 1.6 | 1150 | 99 |
ヒュンダイ | A0 | 1.1 | 980 | 99 |
スズキ | Rapid | 1.3 | 990 | 101 |
フォード | フィエスタ | 1.0 | 1112 | 99 |
ホンダ | シビック | 1.6 | 1252 | 94 |
ヒュンダイ | I30 | 1.6 | 1326 | 97 |
オペル | アストラ | 1.6 | 1330 | 97 |
BMW | 1 | 1.6 | 1365 | 99 |
マツダ | 3 | 2.2 | 1280 | 104 |
シュコダ | Rapid | 1.6 | 1119 | 104 |
フォード | Focus | 2.0 | 1328 | 105 |
フォード | モンデオ | 1.6 | 1584年 | 94 |
オペル | Insignia | 2.0 | 1428 | 99 |
メルセデス | Cクラス | 2.1 | 1365 | 99 |
シュコダ | オクタビア | 1.6 | 1415 | 99 |
ボルボ | S60 | 2.0 | 1415 | 99 |
メルセデス | CLA | 1.5 | 1465 | 102 |
アウディ | A4 | 2.0 | 1490年 | 104 |
A6 | 灰 | 2.0 | 1725年 | 114 |
ボルボ | V70 | 1.6 | 1523 | 109 |
BMW | 5 | 2.0 | 1705 | 114 |
メルセデス | Eクラス | 2.1 | 1605 | 115 |
ボルボ | XC70 | 2.0 | 1746年 | 117 |
フォード | Bマックス | 1.6 | 1235 | 104 |
BMW | 2 | 1.6 | 1390年 | 108 |
オペル | ザフィーラ | 1.6 | 1405 | 109 |
メルセデス | SLK | 2.5 | 1395 | 120 |
ボリューム1.0とウェイト790を比較するのは難しい場合がありますが、両方を同等の値にスケーリングすると、一方の値が他方の値と比較してどのくらいかを簡単に確認できます。
データのスケーリングにはさまざまな方法があります。このチュートリアルでは、標準化と呼ばれる方法を使用します。
標準化方法では、次の式を使用します。
z = (x - u) / s
ここで、z
は新しい値、x
は元の値、u
は平均、s
は標準偏差です。
上記のデータセットからWeight列を取得すると、最初の値は790で、スケーリングされた値は次のようになります。
(790 - 1292.23) / 238.74 = -2.1
上記のデータセットからVolume列を取得すると、最初の値は1.0で、スケーリングされた値は次のようになります。
(1.0 - 1.61) / 0.38 = -1.59
790と1.0を比較する代わりに、-2.1と-1.59を比較できるようになりました。
これを手動で行う必要はありません。Pythonのsklearnモジュールには、データセットを変換するメソッドを含むScalerオブジェクトを返すStandardScaler()
というメソッドがあります。
例
Weight列とVolume列のすべての値をスケーリングします。
結果:
最初の2つの値が-2.1と-1.59であることに注意してください。これは、次の計算に対応しています。
[[-2.10389253 -1.59336644]
[-0.55407235 -1.07190106]
[-1.52166278 -1.59336644]
[-1.78973979 -1.85409913]
[-0.63784641 -0.28970299]
[-1.52166278 -1.59336644]
[-0.76769621 -0.55043568]
[ 0.3046118 -0.28970299]
[-0.7551301 -0.28970299]
[-0.59595938 -0.0289703]
[-1.30803892 -1.33263375]
[-1.26615189 -0.81116837]
[-0.7551301 -1.59336644]
[-0.16871166 -0.0289703]
[ 0.14125238 -0.0289703]
[ 0.15800719 -0.0289703]
[ 0.3046118 -0.0289703 ]
[-0.05142797 1.53542584]
[-0.72580918 -0.0289703]
[ 0.14962979 1.01396046]
[ 1.2219378 -0.0289703]
[ 0.5685001 1.01396046]
[ 0.3046118 1.27469315]
[ 0.51404696 -0.0289703]
[ 0.51404696 1.01396046]
[ 0.72348212 -0.28970299]
[ 0.8281997 1.01396046]
[ 1.81254495 1.01396046]
[ 0.96642691 -0.0289703]
[ 1.72877089 1.01396046]
[ 1.30990057 1.27469315]
[ 1.90050772 1.01396046]
[-0.23991961 -0.0289703]
[ 0.40932938 -0.0289703]
[ 0.47215993 -0.0289703]
[ 0.4302729 2.31762392]]
CO2値の予測
多重回帰の章のタスクは、車の重量と体積しかわかっていない場合に、車からのCO2排出量を予測することでした。
データセットがスケーリングされると、値を予測するときにスケールを使用する必要があります。
例
重量2300kgの1.3リッター車からのCO2排出量を予測します。
結果:
[107.2087328]
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。