0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonではじめる機械学習 part4

Last updated at Posted at 2021-08-19

前回の内容

Pythonではじめる機械学習 part3

k-最近傍法を使ったアイリスのクラス分類 概要

一番初めの分析モデルとして、k-最近傍法というアルゴリズムを使ったアイリスのクラス分類についてまとめていきます!
初心者の自分にも分かりやすいアルゴリズムだったので、ここを足がかりに学習を進めていきましょう。

k-最近傍法とは?

新しいデータポイントを予測する際に、単純に学習済みの特徴量に一番近い点を見つけてきて、それを分類結果とするアルゴリズムである。
k-最近傍法の「k」はいくつの近傍点を参考にするか?を表している(つまり、3個とか5個とかも取れる。)
このセクションでは一旦、1つの近傍点で見る。

k-最近傍法の実装

kNeighbors.py
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)

n_neighborsで与えている引数が、近傍点数となる。

また、テストデータを与えるには、fit関数を呼び出す。

fit.py
knn.fit(X_train, y_train)

*X_train, y_trainはiris_dataから解析したもの。
X_train: データを含むNumpy配列
y_train: ラベルを含むNumpy配列

予測を行う

いよいよ本題。fitで与えたテストデータから最近傍法アルゴリズムを用いて新規データの予測を行います。

predict.py
# ガク長: 5cm, ガク幅:2.9cm, 花弁長:1cm,花弁幅:0.2cmの野生のアイリス
X_new = np.array([[5, 2.9, 1, 0.2]])

prediction = knn.predict(X_new)
print("Prediction: {}" .format(prediction))
print("Predict Target Name: {}" .format(iris_data['target_names'][prediction]))

出力は以下の通り

predictionOutput.txt
Prediction: [0]
Predict Target Name: ['setosa']

*クラス0、[setosa]という分類だとモデルは予測したということになる。

モデルの評価について

さて、ここで予測を行ったはいいものの、本当にこれが正しいのか?の検証が必要である。
前回までで述べたが、機械学習は学習データとテストデータに分割してから、予測を行うのが一般的である。
ここで、実際に取っておいた各テストデータに対して、同様に予測を行い、正しいかどうかの精度を出力する。

モデルの評価の実装

predictonTest.py
# とっておいたテストデータに対して、予測を行い、score関数を使ってスコア(精度)を算出する。
y_pred = knn.predict(X_test)
print("Test set preditions: \n {}" .format(y_pred))
print("Test set score: {:.2f}" .format(knn.score(X_test, y_test)))

出力は、以下の通り

predictonTestOutput.txt
 [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0
 2]
Test set socre: 0.97

これはつまり、テストセットに対して97%の精度を持った予測ができたことを表します!!✌️

k-最近傍法を使ったアイリスのクラス分類 所感

今回は結構ボリュームが多くなってしまいましたが、k-最近傍法といういかにも機械学習らしいアルゴリズムが登場しました。
記事中にも書きましたが、この内容はまだ初心者にも理解できる範疇かと思ったので、心が折れるのはもう少し先延ばしになりそうです。

予測自体は、KNeighborsClassifierのpredict関数で思ったより簡単に行えるんだなと実感(まだ簡単なアルゴリズムだからかもしれないが。)
また、前記事で予測評価の重要性について触れたが、今回実践的に踏み込めてより理解が進んだように思う。

次回記事

Pythonではじめる機械学習 part5

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?