機能スケーリングの結果


11

私は現在SVMを使用しており、トレーニング機能を[0,1]の範囲にスケーリングしています。最初にトレーニングセットを適合/変換し、次に同じ変換をテストセットに適用します。例えば:

    ### Configure transformation and apply to training set
    min_max_scaler = MinMaxScaler(feature_range=(0, 1))
    X_train = min_max_scaler.fit_transform(X_train)

    ### Perform transformation on testing set
    X_test = min_max_scaler.transform(X_test)

トレーニングセットの特定のフィーチャの範囲が[0,100]であり、テストセットの同じフィーチャの範囲が[-10,120]であると仮定します。トレーニングセットでは、その機能は[0,1]に適切にスケーリングされますが、テストセットでは、その機能は[-0.1,1.2]のような最初に指定された範囲外の範囲にスケーリングされます。

テストセットの機能がモデルのトレーニングに使用されている機能の範囲外にあると、どのような結果になるのでしょうか。これは問題ですか?

回答:


6

各クラス内には、機能の値の分布があります。それ自体は懸念の理由ではありません。

少し理論的な観点から、機能をスケーリングする理由と、選択した方法で機能をスケーリングする理由を自問することができます。
理由の1つは、特定のトレーニングアルゴリズムが、他の桁数をカバーする機能よりも0〜1の値の方が速く収束することがわかっているためです。その場合は、おそらく大丈夫です。私の推測では、SVMは問題ないと思います。内積のために、数値が大きすぎないようにしたいのですが、最大値1.2と最大値1.0との違いはあまりありません。
(OTOH、たとえば、負の値を受け入れないアルゴリズムを知っている場合は、明らかに問題があります。)

実際的な問題は、トレーニングの対象範囲からわずかに外れた場合でも、モデルが適切に機能するかどうかです。これは、このようなケースでのテスト/トレーニングドメイン外のケースのパフォーマンス低下がないかテスト結果を検査することによってのみ、最善かつおそらく解決できると信じています。これは有効な懸念事項であり、これを調査することはモデルの検証の一部になります。

あなたが説明するサイズの違いを観察することは私見モデルの安定性をかなりよく見る理由です。


7

これはコメントを意図したものですが、長すぎます。

テストセットの範囲異なるという事実は、トレーニングセットがテストセットを適切に表現していないことを示している可能性あります。ただし、例のように差が本当に小さい場合は、予測に影響しない可能性があります。残念ながら、どのような状況でもSVMに影響を及ぼさないと思う十分な理由はないと思います。

MinMaxScalarを使用する根拠は(ドキュメントによれば)であることに注意してください。

このスケーリングを使用する動機には、特徴の非常に小さな標準偏差に対する堅牢性と、スパースデータのゼロエントリの保持が含まれます。

したがって、データがそのケースに適合することを確認することが重要です。

差の範囲が本当に心配な場合は、preprocessing.scale代わりに通常の標準化(など)を使用する必要があります。


こんにちはロバート、返信ありがとうございます!トレーニング/テストセットの表現についての良い点ですが、これは時系列データであるため、新しいデータが入ってくるので、値が以前と同じ範囲であるとは保証できません。私はあなたとまったく同じ気持ちで、どんな状況でもSVMに影響を与えないと考える正当な理由はありません。
mike1886

MinMaxScalerと標準化を使用して予測を比較しましたか?
ロバート・スミス、

私は持っており、結果は似ていますが、MinMaxScalarで問題が発生しているかどうかはわかりません。
mike1886 14

承知しました。いずれにせよ、から何か価値のあるものを得られないのであれば、標準化を使用する方が良いでしょうMinMaxScaler
Robert Smith
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.