kNNでの関係、重み、および投票の処理


13

私はkNNアルゴリズムをプログラミングしていますが、次のことを知りたいです:

タイブレーク:

  1. 多数決で明確な勝者がいない場合はどうなりますか?たとえば、k個のすべての最近傍が異なるクラスに属している、またはk = 4の場合、クラスAから2つの近傍とクラスBから2つの近傍がありますか?
  2. 同じ距離を持っているより多くの隣人があるために正確にk個の最も近い隣人を決定することが不可能な場合はどうなりますか?たとえば、距離のリストの(x1;2), (x2;3.5), (x3;4.8), (x4;4.8), (x5;4.8), (x6;9.2)場合、3番目から5番目の近傍はすべて同じ距離を持っているため、k = 3またはk = 4の近傍を決定することはできません。

重さ:

  1. 勝ったクラスを選択する前に、k最近傍に重みを付けるのが良いと読みました。それはどのように機能しますか?すなわち、隣人はどのように重み付けされ、クラスはどのように決定されますか?

多数決案:

  1. 多数決以外の勝ち組を決定する他のルール/戦略はありますか?

回答:


8

私の見解では、k最近傍のネクタイを破る理想的な方法は、ネクタイを破るまでkを1 減らすことです。k = 1の場合、タイは不可能であるため、これは投票の重み付けスキームに関係なく常に機能します。kを増やして、重み付けスキームとカテゴリの数を保留すると、タイブレークを保証できなくなります。


10
k = 1の場合、なぜタイは不可能です。同じ距離の異なるクラスに属する2つの近傍がある場合、k = 1で最も近い近傍をどのように決定しますか。
j5shi 14

6

kNNを実行する際には、1つのことを覚えておく必要があります。つまり、厳密に数学的に導出されたアルゴリズムではなく、1つの直感に基づく単純な分類子/リグレッサーです-引数が変化しない場合、基になる関数はあまり変化しませんずっと。または言い換えれば、基礎となる関数は局所的にほぼ一定です。この仮定により、最も近いkポイントの値の(おそらく重み付けされた)平均により、任意のポイントの基になる関数の値を推定できます。

これを念頭に置いておくと、多数決で明確な勝者がいない場合に何をすべきかについて明確な必須事項がないことに気付くことができます。常に奇数のkを使用するか、単射の重み付けを使用できます。

隣接する3〜5が関心のあるポイントから同じ距離にある場合、2つだけを使用するか、5つすべてを使用できます。繰り返しますが、kNNは複雑な数学的分析から派生したアルゴリズムではなく、シンプルな直感。これらの特殊なケースにどう対処するかは、あなた次第です。

1||バツy||2、または距離が小さい場合は比較的大きく、ポイント間の距離が大きい場合は比較的小さい(おそらく、連続したメトリック関数の逆)。

今年のNIPSでSamory KpotufeとAbdeslam Boulariasが適切な重みを見つける問題に触れた素晴らしい論文もありました。それらの一般的な直観は、基礎となる関数が異なる方向で異なるように変化することです(つまり、その異なる偏導関数は異なる大きさです)。したがって、この直観に従ってメトリック/重み付けを何らかの意味で変更するのが賢明です。彼らはこのトリックが一般的にkNNとカーネル回帰のパフォーマンスを改善すると主張し、彼らはこの主張を裏付けるいくつかの理論的結果さえ持っていると思う(それらの理論的結果が実際に主張するものがわからないが、私は行く時間がなかったまだ全体の紙を通して)。論文は、彼らのサイトから無料でダウンロードするか、グーグル「グラディエントウェイトがノンパラメトリックリグレッサーを助ける」後にダウンロードできます。

ここで、適切なk、メトリック、重み付け、ドローがあるときに実行するアクションなどを見つける方法を知りたいと思うでしょう。悲しいことは、いくつかの深い思考の後に正しいハイパーパラメーターに到達するのは基本的に難しいことです。おそらく、ハイパーパラメーターの異なる束をテストし、どの検証セットでうまく機能するかを確認する必要があります。いくつかの計算リソースがあり、適切なパラメーターを適切なハイパーパラメーターセットに自動的に到達させたい場合は、その設定で微分フリー最適化のためにGaussianプロセスを使用するという最近のアイデアがあります(非常に気に入っています)。

詳細に説明します-ハイパーパラメーターのセット(つまり、検証データのエラーを最小化する)を見つけることは、最適化の問題と見なすことができます。残念ながら、この設定では、最適化しようとする関数の勾配を取得できません(これは、通常、勾配降下またはいくつかの高度な方法を実行するために行いたいことです)。この設定では、ガウス過程を使用して、大きな可能性を秘めたハイパーパラメーターのセットを見つけて、それまでに見つけた最高のものよりも優れたパフォーマンスを発揮することができます。したがって、いくつかのハイパーパラメーターのセットを使用してアルゴリズムを繰り返し実行してから、次に試行するのに最適なアルゴリズムをGaussianプロセスに要求し、それらを試行することができます。

詳細については、Jasper Snoek、Hugo Larochelle、およびRyan P Adamsによる論文「Practical Bayesian Optimization of Machine Learning Algorithms」をご覧ください(WebサイトまたはGoogleからも入手できます)。


2
警告:検証セットで最高の精度を得るためにハイパーパラメーターを最適化することは、忘却の行き過ぎに直結する方法です。ネストされたCVが必要です。

「奇妙なk」は必ずしもタイの問題を解決するとは限らないことに注意してください。たとえば、3つのグループを分類する場合はk = 3です。それに加えて同意します。いい説明。
ポール

1

このタイ部分について、タイの最良のベースラインアイデアは通常、ランダムブレークであるため、投票に勝つすべてのランダムクラスを選択し、kを満たすのに十分な大きさのタイオブジェクトのサブセットをランダムに選択します。

そのような解決策は、それらがkNN体制で決定を下すのに十分な情報を単に提供しない病理学的なケースであるという事実を強調します。ところで、もしそれらがあなたのデータに共通しているなら、おそらくあなたはもう少し差別化された距離を試してみるべきでしょうか?


0

可能な方法の1つは、明確な勝者が得られるまで、アルゴリズムにkを自動的に増減させることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.