はじめに
前回の記事(scikit-learnを用いた機械学習の初歩①~データ及び解析手法~)では機械学習に用いるデータと機械学習のアルゴリズムの一つである「k近傍法」について説明をしました。今回は実際に学習モデルを構築し、評価を行っていきます。
データの分割
まず初めに、前回の記事で読み込んだ150個あるアヤメのデータをトレーニングデータ(訓練データ、学習用データ)とテストデータ(評価用データ、検証用データ)に分割をします。pythonでデータサイエンスではトレーニングデータとテストデータは一般的に80:20,75:25,70:30の比率で分割するのが一般的とのことでしたので、今回は80:20で分割をしたいと思います。
ちなみにこのようにデータを一定の割合でトレーニングデータとテストデータに分割することをホールドアウト検証というみたいです。ホールドアウト検証は単純な評価方法の一つですが、①集めたデータを2つに分割するため、学習に使えるデータ量が減ってしまう②分割する際、データに偏りが生じるとうまく評価をすることが出来ないといった2つのデメリットが存在します。
データの分割はscikit-learnの「sklearn.model_selection.train_test_split」という関数を用います。
sklearn.model_selection.train_test_split(*arrays, **options)
何個か説明がわからなかった引数がありましたが、とりあえずデータの分割を行ってみます。
from sklearn.model_selection import train_test_split iris_dataset = load_iris() X_train,X_test,x_train,x_test = train_test_split(iris_dataset["data"],iris_dataset["target"],test_size = 0.2)
実際にX_train、X_testの中身を見てみると120個のデータと30個のデータに分割されていて、80:20にデータが分割されていることがわかります。ちなみにデータの順番はシャッフルされています。
import pandas as pd print(pd.DataFrame(X_train,columns = iris_dataset.feature_names)) print(pd.DataFrame(X_test,columns = iris_dataset.feature_names))
図1:X_trainの中身 |
機械学習モデルの構築
ようやくすべての準備が整いましたので、実際にk近傍法を用いてクラス分類を行う学習モデルの構築を行います。k近傍法はscikit-learnのKNeighborsClassifierを用います。
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30, p=2, metric=’minkowski’, metric_params=None, n_jobs=1, **kwargs)
やはり何個かよくわからない引数がありますが、とりあえずやってみます。
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import numpy as np iris_dataset = load_iris() X_train,X_test,x_train,x_test = train_test_split(iris_dataset["data"],iris_dataset["target"],test_size = 0.2) knn = KNeighborsClassifier() knn.fit(X_train, x_train)#fit関数を用いてトレーニングデータの読み込み X_temp_test = np.array([[4.4,2.9,1.4,0.2]])#学習データの中にあったSetosaのデータ prediction = knn.predict(X_temp_test)#クラスに予想させる print(iris_dataset["target_names"][prediction])#予想結果の表示
モデルの評価
今度はテストデータを使って、今回作成したモデルの精度を評価してみます。
x_pred =knn.predict(X_test)#テストデータを学習モデルにセット x_judge = x_pred == x_test #予測したデータと答えが一致しているか true_count = len(np.where(x_judge==True)[0])#正解した数 print(x_judge) print(true_count/len(x_judge))#正答率
まとめ
今回はscikit-learnを用いてアヤメの分類を行いました。
0 件のコメント :
コメントを投稿