以下のサイトを参考に、kNNを実装してみる。
やりたいこと
kNNの実装
kNNの目指すもの
学習データを全て覚えて、予測したいデータと距離の近いk個のデータから多数決をする手法。
実装する前の仮説
- kNNという字面から、放送局のような印象を受ける。
- 恐らく、なにかの頭文字をとって、kNN。
- kNNの、kは抽出するデータの個数であるk。
- 「学習データを全て覚えて」から、予測精度が高そう。
実装
このアルゴリズムにも、どうやら回帰と分類2つのバージョンがあるらしい。
回帰版
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor
# データの読み込み
boston = load_boston()
X = boston['data']
y = boston['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
model = KNeighborsRegressor(n_neighbors=3)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
print('score is', score)
分類版
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# データの読み込み
wine = load_wine()
X = wine['data']
y = wine['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
print('score is', score)
回帰版
score is 0.5545587353916865
分類版
score is 0.7037037037037037
わかったこと
- kNNアルゴリズムを実装するためには、sklearnのneighborsを使う
- 引数にn_neighbors(数字)を取る
- 出力結果としては、分類版のほうが1に近い
- 実装の違いとしては、メソッド。(回帰版→Regressor、分類版→Classier)
まとめ
なぜかWarningメッセージが表示される。問題なく、実行結果が得られているので、無視しているが。これでトータル4つのアルゴリズムを実装してみたが、コードとしては難しくなく、使うモジュール、メソッドが違うだけで、単語を知っていればいろんなアルゴリズムを実装できる気がしてきた。だが、目指すべきは、複数のアルゴリズムを使い分けること。そのためには、実行方法を知る+それぞれのアルゴリズムの特性を理解している必要がある。
後々調べるべきこと
- Warningメッセージの意味。