3

scikit-learn の SVM は LIBSVM に基づいています。LIBSVM/SVM では、データをスケーリングする必要があり、特徴値は [0, 1] または [-1, 1] の 2 つの範囲のいずれかにあることが推奨されます。つまり、典型的なマトリックスでは、各列が特徴であり、スケーリングは列ごとに行われます。

LIBSVM FAQ は、[0, 1] の間の機能を取得するための単純なスケーリングを提案しています。

x'=(x-min)/(Max-min)

scikit-learn はこの「単純なスケーリング」をサポートしていますか? SVM および RBF カーネルで使用する機能をスケーリングするための他の推奨事項はありますか? 参照はありますか?LIBSVM に基づく「A Practical Guide to Support Vector Classification」という参照記事を見つけ、[0, 1] または [-1, 1] にスケーリングすることを推奨しています。

4

2 に答える 2

5

はい、この機能は含まれています。あなたが説明した正確な式は、次のリリースでsklearn.preprocessing.MinMaxScaler. 今のところ、sklearn.preprocessing.Scaler(StandardScaler次のリリースで名前が変更されますが、下位互換性のために古い名前が残ります) は、平均 0 と分散 1 を持つように機能を中心化およびスケーリングします。これは、SVM 学習器にデータを渡すのに十分なはずです。

また、sklearn.preprocessing.Normalizer(およびテキスト分類に使用される ) は、サンプルごとTfidfVectorizerの値を [0, 1] の範囲に正規化します。これは、テキスト分類と情報検索で一般的な長さの正規化に相当します。

オブジェクトを使用してPipeline、センタリング、スケーリング SVM 分類器を構築できます。

clf = Pipeline([('scale', Scaler()),
                ('svm', SVC())])
于 2012-10-03T21:17:31.387 に答える
1

少なくとも [-1,1] の場合は、 StandardScalerを探していると思います。

于 2012-10-03T21:15:49.963 に答える