LoginSignup
2
3

More than 3 years have passed since last update.

LabVIEWを使って単純パーセプトロンによる分類をやってみた

Posted at

本記事の内容

LabVIEW Community Editionを使い、Irisデータセットに対して、単純パーセプトロンによる分類をおこないました。
下記サイトをゴッソリ参考にさせていただき、標準関数のみを使用して分類処理を作成しています。

"機械学習の元祖「パーセプトロン」とは?"
https://rightcode.co.jp/blog/information-technology/simple-perceptron

処理の流れ

次の流れで処理をおこなっています。
1.データセットの読込、2.教師データの作成、3.散布図用データの作成、4.確率的勾配降下法による重みの更新、5.境界直線データの生成
image.png
順番に処理を説明します。

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")

image.png

2.教師データの作成

2クラス分類とするため、virginica行を削除して教師データを作成しています。setonaは0、versicolorは1とラベリングします。
image.png

3.散布図用データの作成

Sepal lenghおよびSepal widthを要素とするクラスタを、SetosaとVersicolorそれぞれで作成し、Build array関数で結合した後でXYグラフへ入力することによって、プロットを分けてグラフ表示することが可能となります。
image.png
image.png

4. 確率的勾配降下法による重みの更新

-w0 + w1 × Sepal length + w2 × Sepal width をstep関数(0より大きければ1を、それ以外は0を出力)に入力した値がラベリングした値と一致するように、重みw0,w1,w2を更新する。 誤差が0になるか、エポック数が上限に達するまで処理を繰り返します。
image.png

5.境界直線データの生成

重み値を使って境界直線データを生成します。
ループ回数10回は適当に決めた値です。
image.png

結果

エポック数の上限を200とすることで、繰り返し試行した場合においても正解率はほぼ100%となりました。
image.png

まれに100%未満となる。重みの初期値によって結果が変わります。
image.png

おわりに

本記事ではLabVIEWを使ってパーセプトロンによる分類をおこないました。
LabVIEWの標準関数を使用することでまったく問題なく処理を実装することができました。

2
3
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
2
3