1

特徴ベクトルの値が結果にどのように影響するかをよりよく理解しようとしています。たとえば、最終値が結果である次のベクトルがあるとします (たとえば、これは SVC を使用した分類問題です)。

0.713, -0.076, -0.921, 0.498, 2.526, 0.573, -1.117, 1.682, -1.918, 0.251, 0.376, 0.025291666666667, -200, 9, 1

ほとんどの値は 0 を中心にしていますが、桁違いに小さい -200 という値が 1 つあります。

この値が予測をゆがめており、値が大きく異なるという理由だけで、他の値よりも不当に重み付けされているのではないかと懸念しています。

これは、特徴ベクトルを作成する際に考慮すべきことですか? それとも、私が提供するトレーニング セットに基づいて、この大きな (または小さな) 値に対するベクトル制御を評価するために使用する統計テストはありますか? ベクトルを正規化するために特に推奨する sci-kit Learn で利用可能な方法はありますか?

ご協力ありがとうございました!

4

2 に答える 2

1

特徴ベクトルの値が結果にどのように影響するかをよりよく理解しようとしています。

次に、ここにあなたのための数学があります。簡単な例として、線形カーネルを考えてみましょう。xサンプルとサポート ベクターを取り、svそれらの間の内積を計算します。内積の単純な Python 実装は次のようになります。

def dot(x, sv):
    return sum(x_i * sv_i for x_i, sv_i in zip(x, sv))

ここで、機能の 1 つが他のすべての機能よりもはるかに極端な範囲を持っている場合 (xまたは でsv、または両方で)、この機能に対応する用語が合計を支配します。

多項式カーネルと RBF カーネルでも同様の状況が発生します。poly カーネルは、線形カーネルの (シフトされた) 累乗です。

def poly_kernel(x, sv, d, gamma):
    return (dot(x, sv) + gamma) ** d

xRBF カーネルは、との間の距離の 2 乗にsv定数を掛けたものです。

def rbf_kernel(x, sv, gamma):
    diff = [x_i - sv_i for x_i, sv_i in zip(x, sv)]
    return gamma * dot(diff, diff)

これらの各ケースで、1 つの機能が極端な範囲を持つ場合、それが結果を支配し、他の機能は効果的に無視されます。

sklearn.preprocessingモジュールでこれをライブで処理する scikit-learn ツール: MinMaxScalerStandardScalerNormalizer

于 2013-10-05T10:19:42.840 に答える