フルスタックエンジニアを目指す|株式会社ナンバーワンソリューションズ

フルスタックエンジニアを目指す

AI PG Python

Tensorflowを用いて線形SVMを使って分類してみよう

投稿日:

久しぶりの投稿になります。今回はサポートベクトルマシーン(SVM)を使って簡単な分類の予想の立て方について記述できればと思います。
SVMとはWikipedaによると「教師あり学習を用いるパターン認識モデルの一つである」のことをいいます。教師ありデータを用いて分類、解析や回帰を行う際はなくてはならないものです。
今回はTensorflowを使ってSVMを用いて花の品種がヒオウギアヤメ(Iris Setosa)かそうでないかを分類する方法について記述していきます。

〇学習データを準備
ヒオウギアヤメのデータはscikit-learnのdatasetsライブラリ内にあります。今回はそれを用いてやっていきます

ヒオウギアヤメのデータから1番目(がく片の長さ)と4番目(花びらの幅)の変数をロードする。
またdatasets.targetが0の値が目的のヒオウギアヤメになるのでヒオウギアヤメかそうでないかで分類する。
ちなみにdatasets.targetが1の値の場合Iris versicolor、2の場合Iris virginicaになる。

データセットを学習データとテストデータに分割する。今回は学習データを全体の8割、テストデータを2割で分割した

バッチサイズ、プレースホルダー、変数の設定を行う。

モデルの出力を行う。今回は直線で分類するためy = Ax + bの形になるようにモデルを設計している。

損失関数について設定している。

予想関数(正の値なら1に、負の値なら-1に、0なら0にする)と正解率を求める正解関数を設定する

最適化関数を作成、モデルの変数を初期化する

いよいよ学習開始である。勾配、切片、損失率を求める。

この時点で実施した結果として
Step # 100 A = [[-0.52861047]
[ 0.63325727]], b = [[-1.13860738]]
Loss = [ 0.77599818]
Step # 200 A = [[-0.41611043]
[ 0.24167725]], b = [[-1.20580769]]
Loss = [ 0.92222953]
Step # 300 A = [[-0.3528904 ]
[-0.09856269]], b = [[-1.25540757]]
Loss = [ 0.43601176]
Step # 400 A = [[-0.26738036]
[-0.41078258]], b = [[-1.31100762]]
Loss = [ 0.56367826]
Step # 500 A = [[-0.21322033]
[-0.70880252]], b = [[-1.3627075]]
Loss = [ 0.36476588]
が表示される(実施するたびごとに値は変わります)そのうえで学習した結果をグラフで表示するようにしていく。
学習結果より直線を求めていく

ヒオウギアヤメかそうでないかで分割する

すると以下のようなグラフが表示される。

今回はSVMを使って分類する方法を記述してみた。これを応用することで分類分けができ、画像認識などへ応用することができる。
さらに勉強が必要だ!!

-AI, PG, Python

Copyright© フルスタックエンジニアを目指す , 2019 All Rights Reserved Powered by STINGER.