Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

kNN(k最近傍法)

入力xtest\boldsymbol{x}^{\text{test}}に最も近いkk個の訓練データx1train,…,xktrain\boldsymbol{x}_1^{\text{train}}, \dots, \boldsymbol{x}_k^{\text{train}}のサンプルの平均を使って予測するシンプルな機械学習アルゴリズム

例

以下のデータを例として使う

Source
<Figure size 640x480 with 1 Axes>

予測の処理は、ユークリッド距離

d(xtest,xitrain)=∥xtest−xitrain∥d(\boldsymbol{x}^{\text{test}}, \boldsymbol{x}_i^{\text{train}}) = \| \boldsymbol{x}^{\text{test}} - \boldsymbol{x}_i^{\text{train}} \|

を個々のデータ点同士について計算してkk個の近傍点で平均をとることにする。

計算量を考えると、本当はKDTreeなどの高速な最近傍探索アルゴリズムを使ったほうがよい。

識別境界を簡単に確認してみる。格子状に点をとって判別結果を描く方法をとってみる。

Source
<Figure size 640x480 with 1 Axes>

k=0の最近傍法

仮想的にk=0k=0と置いた0近傍法が理論上の最適レートを達成するらしい。

モンテカルロ・シミュレーションでバイアスとバリアンスを測ると、kkを大きくするほどバリアンスは小さくなるがバイアスは大きくなるトレードオフがある。kkがゼロに近くなるとバリアンスは非常に大きくなるがバイアスは小さくなる。

C=max⁡{γ∈N∪{0}∣γ<β/2}C=\max \{\gamma \in \mathbb{N} \cup\{0\} \mid \gamma < \beta / 2\} とした多項式関数

fθ(r)=θ0+θ1r2+θ2r4+⋯+θCr2Cf_\theta(r)=\theta_0+\theta_1 r^2+\theta_2 r^4+\cdots+\theta_C r^{2 C}

を回帰関数として用いると、仮想的な0近傍推定量は高次のバイアスを補正し、最適レートを達成することが証明できる。 さらにプラグイン型の分類器 1(η^(X∗)≥1/2)\mathbb{1}(\hat{\eta}(X_*) \geq 1 / 2) を用いると分類問題における最適レートを達成する (Okuno and Shimodaira (2020) Theorem 2)

重み付き近傍法との関係

仮想的な0近傍推定量は重み付き近傍法

η^k,w(kNN)(X∗)=∑i=1kwiy(i)\hat{\eta}_{k, \boldsymbol{w}}^{(k \mathrm{NN})}\left(X_*\right)=\sum_{i=1}^k w_i y_{(i)}

として考えることができる。

試してみる

モンテカルロ・シミュレーションでkごとの予測値の平均と標準偏差を見る

たしかに、論文中にあったような図になる。kが小さいほうがbiasは小さい傾向がある

Source
<Figure size 640x480 with 1 Axes>
Source
<Figure size 640x480 with 1 Axes>

各kkについてkNN推定値を計算し、それらをつかって線形回帰してk=0k=0を外挿してみる。

常にベストになるわけではなが、ほどほどに良いkkを選んだときと同程度にはなるっぽい

Source
<Figure size 640x480 with 1 Axes>