12

私は sklearn の KNN の実装に取り​​組んでいます。私の入力データには約 20 の特徴がありますが、いくつかの特徴は他の特徴よりも重要であると思います。次の方法はありますか?

  1. KNN 学習器を「トレーニング」するときに、各機能の機能の重みを設定します。
  2. データの前処理の有無にかかわらず、最適な重み値が何であるかを学習します。

関連して、一般的に KNN はトレーニングを必要としないことを理解していますが、sklearn は KDTrees を使用して実装するため、トレーニング データからツリーを生成する必要があります。ただし、これは KNN をバイナリ ツリーの問題に変えているように思えます。そうですか?

ありがとう。

4

2 に答える 2

7

kNN は単に距離関数に基づいています。「機能 2 が他の機能よりも重要である」と言う場合、通常、機能 2 の違いが価値があることを意味します。たとえば、他の座標では 10 倍の違いがあります。これを実現する簡単な方法は、coord #2 にその重みを掛けることです。したがって、元の座標ではなく、それぞれの重みを掛けた座標をツリーに入れます。

特徴が座標の組み合わせである場合、重みを適用する前に座標に適切な行列変換を適用する必要がある場合があります。PCA (主成分分析) を参照してください。PCA は、質問 2 に役立つ可能性があります。

于 2013-11-10T18:16:32.650 に答える
1

への質問への回答は「メトリック学習」と呼ばれ、現在 Scikit-learn には実装されていません。一般的なマハラノビス距離を使用すると、StandardScaler を使用してデータを再スケーリングすることになります。理想的には、メトリクスでラベルを考慮に入れる必要があります。

于 2013-11-10T23:18:44.900 に答える