【ラズパイ】AIを動かす①アヤメの分類(Python3)

ラズパイで機械学習

今回は,機械学習のライブラリである,scikit-learnを使って,ラズパイ上で簡単な機械学習を行いたいと思います.

環境

OSrasbian version4.19
プログラミング言語Python3.7.3
機械学習ライブラリscikit-learn

sikit-learnの導入

機械学習を行いたいので,機械学習用ライブラリ[scikit-learn]をインストールします.

ターミナルで下のコードを入力します.

$ sudo apt-get install python3-sklearn

準備

データ

今回は,scikit-learn に元々データセットとして入っている,アヤメの分類を行います.

アヤメは英名でirisといい,種類が多く,人間でも見分けることが大変です.

左からiris setosa/ iris versicolor/ iris virginica (出典:wikipedia)

このどれか3つに分けるために,次の4つの特徴量を用います.

  • 外花被片の長さ
  • 外花被片の幅
  • 内花被片の長さ
  • 内花被片の幅

これらのデータがscikit-learnのデータセットに入っているので,この4次元ベクトルをサポートベクトルマシンを用いて分類します.

サポートベクターマシンについて

今回用いる機械学習は,サポートベクターマシンです.

これは,以下の図のように2つのクラスに分類する場合,それらがきれいに分かれるような境界線を求める式です.

線形で分離できるものとしたときの境界線は,下図のように直線となります.

これは特徴量が2つの2次元ベクトルで,分類も2種類だけですが,アヤメも同じ概念で分類するものだと考えてください.

実際にやってみよう

Pythonコード

アヤメを分類するPythonのコードは以下のようになります.

from sklearn import datasets, svm

# アヤメのデータをロードし、変数irisに格納
iris = datasets.load_iris()

# 特徴量のセットを変数Xに、正解データを変数yに格納
X = iris.data
y = iris.target

# 分類用にサポートベクトルマシンを用意
clf = svm.SVC(decision_function_shape="ovr",kernel="linear")
# データに最適化
clf.fit(X, y)

# データを分類器に与え、予測を得る
result = clf.predict(X)

print('教師データ')
print(y)
print('機械学習による予測')
print(result)

# データ数をtotalに格納
total = len(X)
# ターゲット(正解)と予測が一致した数をsuccessに格納
success = sum(result==y)

# 正解率をパーセント表示
print('正解率')
print(100.0*success/total)

このコードは,『Raspberry piではじめる機械学習』を参考にしたものです.

データ構造

iris = datasets.load_iris()
X = iris.data
y = iris.target

datasetsモジュールのload_irisメソッドで,データを変数irisに格納します.

データ構造は,次の図のようになっています.

特徴量のデータはiris.data,正解データはiris.targetで取り出せます.

サポートベクターマシン

clf = svm.SVC(decision_function_shape="ovr",kernel="linear")

svmモジュールのSVCクラスのインスタンスを生成する文です.

多クラス分類のため,ovr( one-versus-the-rest )で識別します.また,カーネルは線形とします.

clf.fit(X, y)

SVCクラスのfitメソッドを実行し,特徴量と正解データを用いて,モデルを学習します.

clf.predict(X)

SVCクラスのpredictメソッドを実行し,特徴量だけを与えて,正解を予測します.

今回は簡単のため,学習に用いた特徴量と予測に用いた特徴量が同じですが,実際には違ったものを用います.

結果

正解確率は,99.3%でした.

よって,この線形サポートベクターマシンでは,完全には線形分離できなかったことが分かります.

まとめ

今回は,線形サポートベクターマシンを用いて,アヤメの分類をやってみました.

今後もラズパイ上で,機械学習をどこまで行えるのかを探っていきたいと思います.

ラズパイで機械学習を行ってみたいと思った方は,ぜひこの本がおすすめです.

次の記事