K近傍法【K-NearestNeighbor】
〇特徴区間におけるもっとも近い訓練例に基づいた分類アルゴリズムの1つ
-分類や回帰のためのアルゴリズム
-K-NNと頻繁に呼ばれる。
-似たようなデータをK個集め、それらの多数決から目的とする値を求める。
〇以下の4つの流れでクラスを判別していきます。
1.学習データを赤と青の丸としてプロット
2.Kの数を指定しておく(K=3とする)
3.未知のデータが得られたら、隣接している点を3つ取得
4.その3つの点のクラスの多数決で、道データの属するクラスを推定。
(赤1、青2なら青に分類する。)
〇K近傍法の手順
<手順①>ライブラリのインポート
from sklearn.neighbors import KNeighborsRegressor
(or) KNeighborsClassifier
<手順②>インスタンスの作成
clf = KNeighborsRegressor()
(or) KNeighborsClassifier()
<手順③>モデルの作成
clf.fit(X,y)
<手順➃>作成したモデルでの予測
clf.predict(X')
scikit-learn.neighbors
・分類問題の場合:KNeighborsClassifier
・回帰問題の場合:KNeighborsRegressor
【KNeighborsClassifier()、KNeighborsRegressor()の引数】
・引数n_neighbors:近傍オブジェクト数(デフォルトは5)
・引数weights:重み('uniform', 'distance')(デフォルトはuniform)
・引数algorithm: アルゴリズム選択('ball_tree', 'kd_tree' ,'brute' ,'auto')(デフォルトはauto)
・引数leaf_size: リーフサイズ(デフォルトは30)
・引数n_jobs: 計算に使うジョブの数
・引数verbose: モデル構築の過程のメッセージを出すかどうか(デフォルトは0)
【クラスのメソッド】
・fit(X, y[, sample_weight]):学習の実行
・get_params():学習の際に用いたパラメータの取得
・predict(X): 予測の実行
・score(X, y[, sample_weight]): 決定係数の算出
・set_params(**params): パラメータの設定の確認
〇K近傍法を使った分類
In [1]: # ライブラリのインポート
import pandas as pd
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# データのロード
breast = load_breast_cancer()
df_breast = pd.DataFrame(data=breast.data,columns=breast.feature_names)
df_breast['target'] = breast.target
# インスタンス作成
clf = KNeighborsClassifier(n_neighbors=3)
# 説明変数
X = df_breast[breast.feature_names].values
# 目的変数target
Y = df_breast['target'].values
# データの分割
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2,random_state=0)
# 予測モデルを作成
clf.fit(X_train, y_train)
# 精度算出
accuracy_score(y_test,clf.predict(X_test))
Out[1]: 0.9122807017543859
・K(n_neighbors)はサンプル数より小さくないといけない。
・Kの値が大きくなるほど、精度が低くなる。
〇K近傍法を使った回帰
# ライブラリのインポート
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split
# データのロード
boston = load_boston()
df_boston = pd.DataFrame(data=boston.data,columns=boston.feature_names)
df_boston['target'] = boston.target
# インスタンス作成
clf = KNeighborsRegressor()
# 説明変数
X = df_boston[boston.feature_names].values
# 目的変数target
Y = df_boston['target'].values
# データの分割
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2,random_state=0)
# 予測モデルを作成
clf.fit(X_train, y_train)
また作成したモデルの詳細は作成したインスタンスを表示することで確認することができます。
In [1]: print(clf)
Out[1]: KNeighborsRegressor(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=None, n_neighbors=3, p=2,weights='uniform')