LoginSignup
1
0

More than 3 years have passed since last update.

日本語プログラミング言語「プロデル」でIrisの分類タスクをやる(SVM編)

Last updated at Posted at 2019-12-06

昨日,サポートベクタマシンをプロデルで実装したので,使ってみたいと思います。これのSVM版をやります。

はじめに

今回は二値分類です。Irisデータセットは,3クラスなので,データを一部切り捨てて二値分類タスクにします。

前処理

前処理の段階で,正解ラベルを2種類に絞ります。

※コンソール
「..\行列.rdr」を参照する。
「..\サポートベクタマシン.rdr」を参照する。
「..\文字列操作.rdr」を参照する。
「Produire.File.dll」を利用する。
「Produire.Network.dll」を利用する。

アイリスデータは,HTTPで「https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data」を取得したものの行区切りの1番目から100個切り出したもの。
アイリスデータを適当に並び替える。

正解という行列(80,1)を作る。
訓練データという行列(80,4)を作る。
評価データ用正解という行列(20,1)を作る。
評価データという行列(20,4)を作る。

100回,【カウンタ】にカウントしながら繰り返す
    【一行】は,アイリスデータ(カウンタ)を「,」で分割したもの。
    もしカウンタが80以下なら
        4回,添字にカウントしながら繰り返す
            訓練データの中身(カウンタ)(添字)は,一行(添字)。
        繰り返し終わり
        一行(5)について分岐
            「Iris-setosa」の場合
                正解の中身(カウンタ)は,{1}。
            「Iris-versicolor」の場合
                正解の中身(カウンタ)は,{-1}。
        分岐終わり
    でないなら
        4回,添字にカウントしながら繰り返す
            評価データの中身(カウンタ-80)(添字)は,一行(添字)。
        繰り返し終わり
        一行(5)について分岐
            「Iris-setosa」の場合
                評価データ用正解の中身(カウンタ-80)は,{1}。
            「Iris-versicolor」の場合
                評価データ用正解の中身(カウンタ-80)は,{-1}。
        分岐終わり
    もし終わり
繰り返し終わり

データをHTTPで取得をするので,繰り返し実行しないで下さい。ダウンロードしたものを使う場合は,「[ファイル名]」から読み込んだものの行区切りの1番目から100個切り出したものと書き換えて下さい。

100個中,80個を訓練データ,20個を評価データとします。従って,先にランダムに並べ替えておきます。あとはニューラルネットワークの時と一緒です。

学習・推定をする

線形カーネルを利用します(線形カーネルしか実装していない)。

カーネル君という線形カーネル(訓練データ)を作る。
SVM君というサポートベクタマシン(カーネル君)を作る。
訓練データと正解を{5.00,0.0002}でSVM君が学習する。
結果は,SVM君が評価データを推定したものを転置したもの。
結果を表示。
評価データ用正解を転置したものを表示。
評価データ用正解を転置したものを結果で比較したものを表示。

実行には1分もかかりません。結果は次の通りです。

PS C:\> .\アヤメの分類_SVM.exe
80
76.37834
73.94282
71.80421
69.7756
(略)
5.165431
5.112964
5.062041
5.012619
4.96465
-1,1,1,1,-1,1,1,1,-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1
-1,1,1,1,-1,1,1,1,-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1
1

最後から3行目が推定した結果,最後から2行目が正解データのラベル,最後の行が正解率です。100%ですね。
(そんなことあるのかなあ・・・どこか間違っているのでは・・・)

1
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
1
0