Python(sklearn)を使ってKNN(k近傍法アルゴリズム)の機械学習を実装する方法

スポンサーリンク

今回は、PythonでKNNを理解し実装することに焦点を当てます。

では、さっそく始めましょう

スポンサーリンク

KNN アルゴリズムとは?

KNNはK-Nearest Neighborの頭文字をとったものです。

教師あり機械学習アルゴリズムの1つです。

KNNは基本的に分類や回帰に利用される。

KNN は基礎となるパラメータを仮定しない。

つまり、ノンパラメトリックなアルゴリズムです。

KNNアルゴリズムが辿るステップ

  • 最初に学習データを環境に保存します。
  • 予測用データを取得すると、学習データセットに基づき、最もよく似たk個のデータ値を新しいテストレコードに選択します。
  • さらに、新しいテスト点に対する最も類似したk個の近傍値の選択は、「ユークリッド距離」または「マンハッタン距離」を用いて行われる。基本的には、テスト点と学習データ値との距離を計算し、K個の最近傍値を選択します。
  • 最後に、テストデータの値は、テストデータのK個の最近傍点のうち最大点を含むクラスまたはグループに割り当てられる。

K-NNの実例

問題文 – 緑と青の2色を持つビーズの袋(学習データ)を考える。

つまり、ここには2つのクラスが存在します。

緑と青。

我々の課題は、新しいビーズ ‘Z’ がどちらのクラスに分類されるかを見つけることです。

解決策 – 最初に、Kの値をランダムに選択します。

そこで、KNNは全ての学習データ(ビーズの袋)との距離を計算します。

さらに、Zに最も近い4(K)個の値を選択し、4個の隣接値の大多数がどのクラスに属するかを分析することを試みる。

最終的に、Zには空間内の大多数の近傍値が属するクラスが割り当てられる。

PythonによるKNNの実装

では、KNN の概念を実装して、以下の回帰問題を解いてみましょう。

我々は、様々な環境条件によってレンタサイクルを選択する人の数に関する履歴データを含むデータセットを提供されている。

データセットはここで見つけることができる。

では、始めましょう。

1. データセットのロード

Pandasモジュールを使用し、 pandas.read_csv() 関数を使用してデータセットを環境にロードします。

import pandas
BIKE = pandas.read_csv("Bike.csv")

2. 正しい特徴を選択する

データセットから重要な変数を選択するために、相関回帰分析の手法を利用した。

corr_matrix = BIKE.loc[:,numeric_col].corr()
print(corr_matrix)

相関行列

               temp     atemp       hum  windspeed
temp       1.000000  0.991738  0.114191  -0.140169
atemp      0.991738  1.000000  0.126587  -0.166038
hum        0.114191  0.126587  1.000000  -0.204496
windspeed -0.140169 -0.166038 -0.204496   1.000000

temp」と「atemp」は相関が高いので、「atemp」をデータセットから削除します。

BIKE = BIKE.drop(['atemp'],axis=1)

3. データセットの分割

train_test_split()関数を用いて、データセットを80%のトレーニングデータと20%のテストデータに分離しました。

#Separating the dependent and independent data variables into two data frames.
from sklearn.model_selection import train_test_split
 
X = bike.drop(['cnt'],axis=1)
Y = bike['cnt']
 
# Splitting the dataset into 80% training data and 20% testing data.
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=.20, random_state=0)

4. エラーメトリクスの定義

回帰問題であるため、誤差の指標としてMAPEを以下のように定義しました。

import numpy as np
def MAPE(Y_actual,Y_Predicted):
    mape = np.mean(np.abs((Y_actual - Y_Predicted)/Y_actual))*100
    return Mape

5. モデルの構築

sklearn.neighbors モジュールには Knn を実装するための KNeighborsRegressor() メソッドが含まれています。

#Building the KNN Model on our dataset
from sklearn.neighbors import KNeighborsRegressor
KNN_model = KNeighborsRegressor(n_neighbors=3).fit(X_train,Y_train)

さらに、predict()関数を用いてテストデータを予測します。

KNN_predict = KNN_model.predict(X_test) #Predictions on Testing data

6. 精度チェック!

上記で定義したMAPE関数を呼び出して、誤分類のチェックを行い、モデルの予測精度を判定します。

# Using MAPE error metrics to check for the error rate and accuracy level
KNN_MAPE = MAPE(Y_test,KNN_predict)
Accuracy_KNN = 100 - KNN_MAPE
print("MAPE: ",KNN_MAPE)
print('Accuracy of KNN model: {:0.2f}%.'.format(Accuracy_KNN))

Knn- の精度評価

MAPE:  17.443668778014253
Accuracy of KNN model: 82.56%.

まとめ

ここまでで、このトピックは終了です。

もし何か疑問があれば、お気軽にコメントください。

Pythonに関連するこのような記事のために、ご期待ください、そして、それまでは、幸せな学習!

タイトルとURLをコピーしました