chihiro1364
@chihiro1364

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

k近傍法、k平均法のグラフの作り方について

解決したいこと

k近傍法とk平均法を使って分類器が学習する際のグラフはどう作られているのか近いしたいです。

発生している問題・エラー

特徴量の数だけ軸を作ったグラフの交わる箇所に点を打ち、
それを元にk近傍法、k平均法が計算されているように見えました。

では、この時の特徴量の数がx軸とy軸の二つだけでなく、
特徴量が3,4等複ある場合、どのようなグラフにして計算してるのでしょうか?

0

1Answer

特徴量の数だけ軸を作ったグラフの交わる箇所に点を打ち、
それを元にk近傍法、k平均法が計算されているように見えました。

はい,その認識で間違っていません.ただ,我々3次元空間の住人には4次元以上の特徴量を単一空間で可視化できないだけです.

なので可視化する際には,基本的には,主成分分析をしてグラフを作ることが多いですね.
2次元平面上に可視化する場合はx軸とy軸をそれぞれ第1,第2主成分として軸を構成してプロットします.
第3主成分以降は切り捨てるか別のグラフで描画します.

3次元空間上に可視化する場合は同様にx軸とy軸とz軸をそれぞれ第1第2第3主成分として軸を構成してプロットします.第4主成分以降は切り捨てるか別のグラフで描画します.

特徴量が3,4等複ある場合、どのようなグラフにして計算してるのでしょうか?

「どのようなグラフ」に対しておそらく「ユークリッド空間」が答えになります.
k近傍法で求める距離はユークリッド空間における距離,すなわちユークリッド距離ですので,特徴量が2個だろうが3個だろうが4個だろうが,n個だろうが,n次元ユークリッド空間において2点間の同じ要素の差の二乗和のルートをとるだけです.

2次元の特徴量$x,y$を持つ2点$\boldsymbol{A}=(A_x, A_y),\boldsymbol{B}=(B_x, B_y)$であればユークリッド距離は

$$
{\rm distance(\boldsymbol{A}, \boldsymbol{B})} = \sqrt{\left(A_x - B_x\right)^2+\left(A_y - B_y\right)^2}
$$

ですね,仮に特徴量が$x,y,z$の3つある2点$\boldsymbol{A}=(A_x, A_y, A_z),\boldsymbol{B}=(B_x, B_y, B_z)$の距離だとしても

$$
{\rm distance(\boldsymbol{A}, \boldsymbol{B})} = \sqrt{\left(A_x - B_x\right)^2+\left(A_y - B_y\right)^2 + \left(A_z - B_z\right)^2}
$$

と増えていくだけです.

解答していて思ったんですけど,そもそも「グラフにして計算」という文面から少し認識をはき違えているのかなと思いました.

確かに,よくあるk近傍法の説明では2次元平面上に描画されている2点間の距離を出して計算が進んでいくようには見えますが,あくまでそれは可視化してから説明しているだけであって,実際のプロセスは意味のある情報へと計算してから可視化(グラフにする)するものです.

わざわざ人間が定規を使って2次元平面上に特徴量の数だけ軸を作って,グラフの交わる箇所に点を打ち,そのうち2点間の距離を測って計算をする.のではなく,2次元だろうが3次元だろうが関係なくユークリッド距離の定義に従って2点間の距離を求めてやって最適な分類になるように計算を進めていくものです.
最終的にk近傍法で得られた分類結果を可視化したくても,軸の数が4以上あると我々は1つのグラフに描画することができないので,主成分分析等の次元削減を行なってからグラフに描画します.

今回はタイトルが「k近傍法、k平均法のグラフの作り方について」であったので,上では主成分分析を行なって描画する.と答えましたがもしかしたら本質的には認識を間違えている説もあるのかなと思った次第です.

1Like

Comments

  1. @chihiro1364

    Questioner

    どのようなグラフにして計算してるのでしょうか?
    についてですが、ユークリッド計算の説明で理解出来ました。
    ついでにその説明でなんで正規化するかの疑問解決にもなりました。

    ありがとうございます。

  2. 解決されたようでよかったです.
    本質問をクローズにして終了になります.
    頑張ってください!

Your answer might help someone💌