KNN(k-近傍法)

特徴空間上において、近くにあるK個のオブジェクトのうち、もっとも一般的なクラスに分類する
距離の算出は、ユークリッド距離が使われる。高次元データには向かない
トレーニングデータ数、特徴量が増えると予測が遅くなる
クラス分類や回帰分析に利用可能

なに。。

Kが小さいとノイズに弱く、Kが大きいと精度が下がる

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

from sklearn.datasets import load_iris
iris = load_iris()

X = iris.data
Y = iris.target

print("データ数 = %d 特徴量 = %d" % (X.shape[0], X.shape[1]))
pd.DataFrame(X, columns=iris.feature_names).head()

ユークリッド距離

点Aと点Bのユークリッド距離とは、2点を結んだ線分ABの長さのこと

一次元のユークリッド距離は絶対値
|A – B|

二次元だと
√(a1 – b1)^2 + (a2 – b2)^2

うん、こーなるね。

三次元になると、
√(a1 – b1)^2 + (a2 – b2)^2 + (a3 – b3)^2

三平方の定理です。では、これをpythonで計算すると、

import numpy
x1 = 3
y1 = 4
x2 = 4
y2 = 6
a = numpy.array([x1, y1])
b = numpy.array([x2, y2])
u = b - a
print(numpy.linalg.norm(u))

[vagrant@localhost python]$ python myapp.py
2.23606797749979

なんだこれは。
numpy.linalgは固有値、固有ベクトルの計算
normはノムル

ユークリッド距離は何に使われるかというと
k-nearest neighbor algorithm ※k-nn
パターン認識で使われる。

なるほど、確かに距離の計算をしている、ということはわかる。