本記事の内容
LabVIEW Community Editionを使い、Irisデータセットに対して、単純パーセプトロンによる分類をおこないました。
下記サイトをゴッソリ参考にさせていただき、標準関数のみを使用して分類処理を作成しています。
"機械学習の元祖「パーセプトロン」とは?"
https://rightcode.co.jp/blog/information-technology/simple-perceptron
処理の流れ
次の流れで処理をおこなっています。
1.データセットの読込、2.教師データの作成、3.散布図用データの作成、4.確率的勾配降下法による重みの更新、5.境界直線データの生成
順番に処理を説明します。
1.データセットの読込
あらかじめ下記処理で保存しておいたCSVファイルを読み込みます。
Irisデータセットは4次元のデータですが、結果のプロットを簡単にするため、sepal lenght(cm)とsepal width(cm)の2つのデータをのみを使用します。
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
iris_df["species"] = [iris.target_names[i] for i in iris.target]
iris_df.to_csv("./Iris.csv")
2.教師データの作成
2クラス分類とするため、virginica行を削除して教師データを作成しています。setonaは0、versicolorは1とラベリングします。
3.散布図用データの作成
Sepal lenghおよびSepal widthを要素とするクラスタを、SetosaとVersicolorそれぞれで作成し、Build array関数で結合した後でXYグラフへ入力することによって、プロットを分けてグラフ表示することが可能となります。
4. 確率的勾配降下法による重みの更新
-w0 + w1 × Sepal length + w2 × Sepal width をstep関数(0より大きければ1を、それ以外は0を出力)に入力した値がラベリングした値と一致するように、重みw0,w1,w2を更新する。 誤差が0になるか、エポック数が上限に達するまで処理を繰り返します。
5.境界直線データの生成
重み値を使って境界直線データを生成します。
ループ回数10回は適当に決めた値です。
#結果
エポック数の上限を200とすることで、繰り返し試行した場合においても正解率はほぼ100%となりました。
まれに100%未満となる。重みの初期値によって結果が変わります。
#おわりに
本記事ではLabVIEWを使ってパーセプトロンによる分類をおこないました。
LabVIEWの標準関数を使用することでまったく問題なく処理を実装することができました。