k-NN計算の複雑さ


17

素朴な検索アプローチを使用したk -NNアルゴリズムの時間の複雑さは何ですか(kdツリーなどはありません)?

ハイパーパラメータkを考慮した時間の複雑さに興味があります。私は矛盾した答えを見つけました:

  1. O(nd + kn)、nはトレーニングセットのカーディナリティ、dは各サンプルの次元です。[1]

  2. O(ndk)、ここでもnはトレーニングセットのカーディナリティ、dは各サンプルの次元です。[2]

[1] http://www.csd.uwo.ca/courses/CS9840a/Lecture2_knn.pdf(ページ18/20)

[2] http://www.cs.haifa.ac.il/~rita/ml_course/lectures/KNN.pdf(18/31ページ

回答:


20

が固定されていると仮定すると(リンクされた両方のレクチャーが行うように)、アルゴリズムの選択により、計算にランタイムとランタイムのどちらがかかるかが決まります。O n d + k n O n d k kO(nd+kn)O(ndk)

まず、ランタイムアルゴリズムを考えてみましょう。O(nd+kn)

  • トレーニングセットのすべての観測値に対してを初期化します。iselectedi=0i
  • 各トレーニングセットの観測値について、新しい観測値からトレーニングセットの観測値までの距離計算しdは、私は、T I Iidistii
  • 用に対して:すべてのトレーニングセットの観測を介してループインデックスを選択最小と値とれる。設定して、この監視を選択します。k i d i s t i s e l e c t e d i = 0 s e l e c t e d i = 1j=1kidistiselectedi=0selectedi=1
  • 選択したインデックスを返しますk

各距離の計算にはランタイムが必要なので、2番目のステップではランタイムが必要です。3番目のステップで反復するたびに、トレーニングセットの観測値をループすることで作業を実行するため、ステップ全体では作業が必要です。最初と4番目のステップでは作業のみが必要なので、ランタイムを取得します。O n d O n O n k O n O n d + k n O(d)O(nd)O(n)O(nk)O(n)O(nd+kn)

次に、ランタイムアルゴリズムを考えてみましょう。O(ndk)

  • トレーニングセットのすべての観測値に対してを初期化します。iselectedi=0i
  • 以下のためににするすべてのトレーニングセットの観測を通じてループを、距離計算:選択されたトレーニングセットの観察と新たな観測の間。最小の値を持つインデックスを選択します。設定して、この監視を選択します。k d i d s e l e c t e d i = 0 s e l e c t e d i = 1j=1kdidselectedi=0selectedi=1
  • 選択したインデックスを返しますk

2番目のステップの反復ごとに、新しい観測と各トレーニングセットの観測との間の距離を計算します。反復には必要であり、したがって全体で必要です。O n d k O(nd)O(ndk)

2つのアルゴリズムの違いは、最初のアルゴリズムが距離を事前計算して保存する(追加メモリが必要)のに対し、2番目のアルゴリズムは距離を事前計算して保存しないことです。ただし、メモリを必要とするトレーニングセット全体と、ストレージを必要とするベクトルを既に保存している、2つのアルゴリズムのストレージは漸近的に同じです。結果として、漸近ランタイムが優れていると、最初のアルゴリズムがより魅力的になります。O n d s e l e c t e d O n k > 1O(n)O(nd)selectedO(n)k>1

アルゴリズムの改善を使用してランタイムを取得できることは注目に値します。O(nd)

  • 各トレーニングセットの観測値について、新しい観測値からトレーニングセットの観測値までの距離計算しdは、私は、T I Iidistii
  • quickselectアルゴリズムを実行して、ランタイムで最小距離を計算します O n kthO(n)
  • 計算された最小距離以下のすべてのインデックスを返しますkth

このアプローチは、ソートされていない配列で最小値を見つけるための効率的なアプローチが存在するという事実を利用しています。kth


1
すばらしい答えであり、私は特にの使用に関するアドバイスが好きですquickselect
usεr11852が復活モニック言う

もう1つの質問:3番目のオプションでは、予測を出すためにk最近傍の中で最も一般的なラベルを計算する必要があるため、時間の複雑さはO(nd + k)である必要があると思いますか?
ダニエルロペス

@Danielなので、はと同じです。O N D + K O N D knO(nd+k)O(nd)
-josliber

前回お邪魔しました:私が取り組んでいるk -NNの修正版の計算の複雑さを判断しようとすると、次のようになります: O(nd + nd / p) 定義により、nd、およびpは整数ゼロ。それをO(nd)に単純化できますか?
ダニエルロペス

@Danielはい、その場合は機能します。O(nd)
ジョスリバー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.