k-最近傍法
今回のテーマは、k-最近傍法です。
機械学習の分類問題で、一番簡単なアルゴリズムです。
*ここでは、近傍の距離の求め方、アルゴリズム等には触れません。今後触れていけたらな思います。
予測は、訓練データの中から、テストデータに1番近い点つまり、最近傍点を見つける。
kとは、近傍点の数を示す。
最も多く現れたクラスをその点に与える。多数派のクラスを採用する。
KNeighbors分類器は、近傍点の数は3,5程度の大きさで十分である。
距離の計算は、ユークリッド距離を用いるのが一般的
k最近傍法は、アルゴリズムは理解しやすい
処理速度が遅く、多数の特徴量を扱うことができないため、実際には殆ど使われていない
k-最近傍法の精度グラフ
sklearn.neighbors.KNeighborsRegressor
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import load_breast_cancer from sklearn.metrics import accuracy_score cancer = load_breast_cancer() train_X, val_X, train_y, val_y = \ train_test_split(cancer.data, cancer.target, random_state=0) training_accuracy = [] test_accuracy = [] neighbors_settings = range(1,11) for n_neighbors in neighbors_settings: clf = KNeighborsClassifier(n_neighbors=n_neighbors) clf.fit(train_X, train_y) training_accuracy.append(accuracy_score(clf.predict(train_X), train_y)) test_accuracy.append(accuracy_score(clf.predict(val_X), val_y)) plt.plot(neighbors_settings, training_accuracy, label="training accuracy") plt.plot(neighbors_settings, test_accuracy, label="test accuracy") plt.ylabel("accuracy") plt.xlabel("n_neighbors") plt.legend()
結果
おまけ
コード
import numpy as np import mglearn import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_boston boston = load_boston() X, y = mglearn.datasets.load_extended_boston() mglearn.plots.plot_knn_classification(n_neighbors=1)
結果
2~4最近傍
2最近傍
3最近傍
4最近傍
感想
k-最近傍法の理論(考え方)は、分かりやすいと思います。
ただ、ここでは数理的な理論には触れていない
理解しやすさと引き換えに、多数の特徴量が扱えないなどの制限があり、利用されていないようです。