Python用の機械学習scikit-learnパッケージでSVM分類器を使用しています。私の特徴は整数です。fit関数を呼び出すと、「スケーラーは浮動小数点値を入力として想定し、int32を取得しました」というユーザー警告が表示され、SVMはその予測を返し、混同行列(2つのクラスがあります)と予測精度を計算します。ユーザーの警告を避けようとしたので、機能をフロートとして保存しました。確かに、警告は消えましたが、私は完全に異なる混同行列と予測精度を取得しました(驚くほど正確ではありません)誰かがそれが起こる理由を知っていますか?何が望ましいですか、floatまたは整数として機能を送信する必要がありますか?ありがとう!
1 に答える
それらをfloatとして変換する必要がありますが、それを行う方法は、整数機能が実際に何を表すかによって異なります。
あなたの整数の意味は何ですか?それらは、カテゴリのメンバーシップ指標(たとえば、1 ==スポーツ、2 ==ビジネス、3 ==メディア、4 ==人...)または順序関係のある数値メジャー(3は2よりも大きい)ですか? 1より大きい)。たとえば、「人」が「メディア」よりも大きいとは言えません。これは無意味であり、機械学習アルゴリズムを混乱させてこの仮定を与えることになります。
したがって、カテゴリフィーチャは、可能なカテゴリごとにいくつかのブールフィーチャ(値0.0または1.0)として各フィーチャを分解するように変換する必要があります。scikit-learnのDictVectorizerクラスを見て、カテゴリ機能の意味をよりよく理解してください。
数値がある場合は、それらを浮動小数点数として変換し、スケーラーを使用して[-1、1]の範囲に大まかに設定します。それらが数桁に及ぶ場合(たとえば、単語の出現回数)、カウントの対数を取ると、より良い結果が得られる可能性があります。ドキュメントのこのセクションにある機能の前処理と例に関するその他のドキュメント:http ://scikit-learn.org/stable/modules/preprocessing.html
編集:機能の表現と前処理の詳細が記載されているこのガイドもお読みください:http ://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf