機械学習: K近傍方の実装
1. はじめに ~K近傍方
・あるデータが与えられたとき、そのデータに最も近い距離のK個の平均からデータを予測する・最も近い距離は、ユークリッド距離を用いる
・クラス分類で使われ、機械学習の中でも簡単
2. ~pythonでK近傍方の実装
使用するライブラリをインポートimport mglearn import matplotlib.pyplot as plt import pandas as pd import numpy as np from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris
今回もsklearnからアヤメのデータを読み込みデータフレームとして可視化します。
iris = load_iris()
iris
df = pd.DataFrame(iris.data, columns = iris.feature_names)
df['target'] = iris.target
df.head()
データの中身を確認します
df.shape (150, 5)
数値データだけではわかりにくいのでプロットします
mglearn.discrete_scatter(iris.data[:, 0], iris.data[:, 3], iris.target)
三色の点は、アイリスの種類を表しています
次に学習用データとテストデータに分類してfit関数を呼び出して学習させます
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, stratify=iris.target)
clf = KNeighborsClassifier(n_neighbors=2).fit(X_train, y_train)
clf.predict(X_test)
次に近傍数が2の場合はどれくらい予測できているのかを確認します
clf.predict(X_test) == y_test
高い精度で予測できていることが分かります
次は、score関数を用いて近傍数が20の場合はどれくらい学習出来ているか確認します
clf_20 = KNeighborsClassifier(n_neighbors=20).fit(X_train, y_train)
clf.score(X_test, y_test)
かなり高い精度であることが確認できます
近傍数が1~20までの場合をfor文で実行してみたいと思います
for n_neighbors in range(1, 21): clf = KNeighborsClassifier(n_neighbors=n_neighbors).fit(X_train, y_train) print("Test set accuracy : n_neighbors={}, {:.3f}".format(n_neighbors, clf.score(X_test, y_test)))
今回は、pythonでK近傍方を実装してみました。