TECH I.S.

機械学習 - 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列のすべての値をスケーリングします。

import pandas from sklearn import linear_model from sklearn.preprocessing import StandardScaler scale = StandardScaler() df = pandas.read_csv("data.csv") X = df[['Weight', 'Volume']] scaledX = scale.fit_transform(X) print(scaledX)

結果:

最初の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排出量を予測します。

import pandas from sklearn import linear_model from sklearn.preprocessing import StandardScaler scale = StandardScaler() df = pandas.read_csv("data.csv") X = df[['Weight', 'Volume']] y = df['CO2'] scaledX = scale.fit_transform(X) regr = linear_model.LinearRegression() regr.fit(scaledX, y) scaled = scale.transform([[2300, 1.3]]) predictedCO2 = regr.predict([scaled[0]]) print(predictedCO2)

結果:

[107.2087328]

実行例(開発準備中)»



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

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

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

スクールの詳細