feature scaling(フィーチャースケーリング)

前回は多変量解線形回帰について、説明しました。
そのとき最急降下法を使用する際に、そのまま使用すると時間がかかってしまいます。そのため少しでも工夫して作業効率をよくする方法である「feature scaling」について説明します。

 

feature scaling

再急降下法では最小二乗法の最小値を求める必要があります。そのとき特徴量に対して、ある幅で最小値に近づいていく(収束する)必要がありますが、その特徴量の範囲がそれぞれ異なると時間がかかってしまいます。そのため、特徴量の範囲を調整することをfeature scaling(フィーチャースケーリング)と言い、それによって処理時間を短くすることができます。

例えば、「特徴数1(x1):大きさ」の場合、範囲が「1-3000」だったとして、「特徴数2(x2):部屋数」の場合は、範囲が「1-3」だとしたら、同じ幅で最小値に収束していくには範囲が大きく異なるため、時間がかかってしまいます。下記の図のように収束していく必要があります。

$$x_1 = 大きさ(1~3000),   x_2 = 部屋数(1~3)$$

 

そこで、予め特徴の最大値で割ることで範囲を同じようにしてあげます。上の例で行うと楕円形が円形となり、上記よりスムーズに収束することができます。

$$x_1 = \frac{ 大きさ(1~3000) }{ 3000 },   x_2 = \frac{ 部屋数(1~3) }{ 3 }$$

 

 

つまり、フィーチャー(特徴)を同じ範囲になるようにスケール(拡大縮小)することがfeature scaling(フィーチャースケーリング)です。これによって範囲が両方とも下記のようになったわけです。

$$0 \leq {x_1} \leq 1 ,   0 \leq x_2 \leq 1$$

上記で特徴を範囲の最大値で割ると記載しましたが、実際は下記の範囲にすることが理想とされています。(X0=1のため) そのため、その範囲に近い状態であれば、無理に範囲を同じにする必要はありません。

$$理想: -1 \leq {x_i} \leq 1 $$
$$そのままでOK: 0 \leq {x_1} \leq 2 ,  -3 \leq {x_2} \leq 0.2 $$
$$feature scaling: -100 \leq {x_3} \leq 100 ,  -0.001 \leq {x_4} \leq 0.001 $$

上記例のように必ずしも特徴同士の範囲が同じになる必要はありません。それでも正常に最急降下法は機能します。

また最大値で割る方法以外にノーマライゼーションという方法があります。
ノーマライゼーションは特徴の値に対して平均値を引いたものを範囲(最大値-最小値)で割ったものです。また範囲の代わりに標準偏差でも可能ですし、範囲も厳密に3000-1=2999としなくても近似値で大丈夫です。具体的に「特徴数1(x1):大きさ」の平均が「1500」で、「特徴数2(x2):部屋数」の平均が「2」だった場合は、下記の式となり、範囲はおよそ-0.5~0.5になるようになります。

$$x_1 = \frac{ 大きさ(1~3000) -1500}{ 3000 },   x_2 = \frac{ 部屋数(1~3) -2}{ 3 }$$
$$-0.5 \leq {x_1} \leq 0.5 ,  -0.5 \leq {x_2} \leq 0.5 $$

 

feature scaling(フィーチャースケーリング)はある正確な値を求めるのではなく、計算を減らすためなので、あまり神経質にならずにある程度の近似値で行っても問題はありません。

 

 

 

AI, ITAI, feature scaling, IT

Posted by yuyu