【Python】K-NNによる分類モデル
概要
Pythonの機械学習用ライブラリといえばscikit-learnです。
今回はこのscikit-learnのなかでも分類問題に使用することができるK-NNのクラスを使用して分類問題を行う方法について簡単に紹介します。
使用するデータ
データ分析などのコンペなどで有名なKaggleですが、フリーで使用できるデータセットがいくつか掲載されています。
今回はこのKaggleの中でOpen Database Licenseとして利用可能な以下のをデータを使用してやってみます。
ネット広告と購買実績の関係のデータ
https://www.kaggle.com/dragonheir/logistic-regression?select=Social_Network_Ads.csv
License : https://opendatacommons.org/licenses/odbl/1-0/
ソースコード
実際の分類問題のソースコードは以下になります。
# ライブラリのインポート
import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import MinMaxScaler
# データセットの読み込み
df = pd.read_csv("Social_Network_Ads.csv")
# ラベルエンコーディング処理
le=LabelEncoder()
df['Gender']=le.fit(df['Gender']).transform(df['Gender'])
# 正規化
scaler = MinMaxScaler()
df.loc[:,:] = scaler.fit_transform(df)
df.head()
# 特徴量と目的変数の選定
X = df[["Gender","Age", "EstimatedSalary"]]
y = df["Purchased"]
# テストデータ分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# KNNのインスタンス定義
knn = KNeighborsClassifier(n_neighbors=6)
# モデルfit
knn.fit(X,y)
#スコア計算
score = format(knn.score(X_test, y_test))
print('正解率:', score)
正解率: 0.9375
勉強になったこと
最初正解率が低めだったが、正規化したらいい感じの正解率が出るようになった。