SonyのNeural Network Console

#動機
プログラミング不要な機械学習ソフトがどういうものか知りたかったので、SonyのNNC(Neural Network Console)を使ってみました。また、プログラミング不要な前処理ソフト([RapidMiner](https://www.rapidminer.jp/))も使ってみました。

#売り
- 環境構築が簡単。新規アカウントを作成し、ログインするだけで準備完了
 - プログラミングをしたことがない人向け。
- デバッグが簡単
 - ネットワークで変なつなぎ方をした場合は注意マークが表示される。
- 試行錯誤が簡単
 - 簡単にネットワークの構造を変えることが可能。サンプルプログラムの使用が可能。
 - structure Searchもしてくれる。精度を下げず、演算量が少ないパラメータなどを探してくれる。
- 演算量(CostMultiplyAdd:順伝播の乗加算回数)の確認が簡単
- 実機に実装した時の精度保証
 - NNC(Neural Network Console)で使用されているライブラリはC++で実装されているため、製品搭載時の精度は変わらない。
- ドキュメント作成が簡単
 - 結果をexportするだけで、ネットワークの構造や学習の進み方、結果の情報が簡単に出力される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/be2a8516-a432-cac8-54d9-c887c3bc4219.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/7e76c92c-ace4-fd58-feef-1b4bb3de5ba9.png)
[SONYのサイト1](https://www.youtube.com/watch?v=y_KGyxAwAic)

#使ってみた感想
- ネットワークの構築、学習、検証は非常に簡単。
- データの前処理は自分で行う必要があるので面倒。

#手順①アカウント作成
下記サイトでアカウントを作成し、クラウド版またはデスクトップ版をダウンロードする。
[SONYのサイト2](https://dl.sony.com/ja/)

#手順②セットアップからサンプルプログラムの実行まで
[SONYのサイト3](https://www.youtube.com/watch?v=QKpWPucmsmU&list=PLg1wtJlhfh20mWfEbfng2ug-bfE437lDW)
[SONYのサイト4](https://www.youtube.com/watch?v=vncZ43udec8&list=PLg1wtJlhfh20mWfEbfng2ug-bfE437lDW&index=2)

#自作データ利用 ①セットアップ
データセットは馬の病気の一種である「疝痛(せんつう)」による生死判定の[データセット](https://archive.ics.uci.edu/ml/datasets/Horse+Colic)
を利用した。DataFolder下のhorse-colic.dataとhorse-colic.testをダウンロード。
dataの内容は以下のような感じ。
![コメント 2020-07-25 181835.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/5bcf5b1b-4a10-96a9-4c51-5be34131186c.png)


データの前処理には[RapidMiner](https://www.rapidminer.jp/)を使用した。
RapidMinerはプログラミングなしで、欠損値の置換やcsvファイルの作成などがGUI上の操作だけで可能。

#自作データ利用 ②前処理
以下のフローでtrainingデータの作成を行っている。
具体的にはcsvファイルの読み取り、無効文字(?など)の削除や欠損値の置換、csvファイルの作成を行っている。
![コメント 2020-07-25 182439.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/395f163b-3968-366a-c546-df8c2643c488.png)

OperatorsからRead CSVを選択し、ドラッグ＆ドロップし、Parametersのfileパスを設定して実行ボタンを押せば、csvファイルの読み込みが可能になる。
![コメント 2020-07-25 183020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/9e59f365-8df2-e3eb-abf0-fa9a07468433.png)

読み込む際に、読み込むcolumnを指定して以下のものを読み込んだ。
- att3(症例によって割り当てられた病院のID)
- att4(直腸温度)
- att5(脈拍)
- att6(呼吸数)
- att16(経鼻胃逆流のPH度)
- att19(血中血球容積)
- att20(タンパク質)
- att22(腹腔穿刺のタンパク質)
- att23(結果1：生存 2：死亡 3：安楽死)
また、4~22を説明変数、23を目的変数とした。

Replaceで?マークを空白に変換し、後で平均値で補えるようにした。
Replace2~4でatt23の値を生存:0 死亡＆安楽死:1に置換した。 
Filter Exampleでatt23で欠損しているものを除外した
Replace Missing Valusで欠損値を各columnの平均値で置換した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/ae1b4bcc-9d89-6c26-6592-1e96dbc5d987.png)
![コメント 2020-07-25 184636.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/8386b069-367e-ae30-697d-81d8fb62b7c6.png)

#####2種類のcsvの作成
Multiplyを使用して２種類のcsvファイルを同時に作成する。
1つ目は目的変数をまとめたcsvファイル。
一行ずつデータを取り出し、病院のIDをファイル名として新しくcsvファイルに保存する。
![コメント 2020-07-25 194434.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/ef648fc8-ecff-7f90-f4e1-11b6f8d2ea4e.jpeg)


2つ目は1つ目のcsvファイルのパスとその目的変数がまとめてあるcsvファイル。(下のパス)
Select AttributesでAtt3とAtt23を指定することで、今後はこの２つのAttributeのみを扱うことができる。
Generate Attributeでは新しいatrributeを作成する。
病院IDと紐づいた説明変数のcsvデータパスを新しいattributeにする。
![コメント 2020-07-25 193047.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/0fc52ec4-319a-2620-ba5d-6f50d4bcda84.jpeg)

![コメント 2020-07-25 193807.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/783bee32-e85a-37e6-25b6-741df704ff78.png)

RenameでAtt23をy:labelという新しい名前に変える。NNCがx,yでデータを認識しているため。
後半では、x:dataとy:labelをcsvファイルとして指定したパスに出力している。

これで2種類のcsvファイルが作成される。
テストデータも同様にして、説明変数がまとめられたファイルと、説明変数のcsvファイルパスと目的変数がまとめられたcsvファイルを作成することで準備完了。


#自作データ利用 ③NNCでネットワークの作成
下記のようなネットワークを作成した。
Inputのサイズは1(チャネル数),7(説明変数の数)とした。
非常に簡単。15秒くらいで作成完了。
![コメント 2020-07-25 195820.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/57092454-f950-dba4-f67b-c2c6b3b93212.png)


#自作データ利用 ③NNCでネットワークの作成
DataSet->Open Datasetから先ほど作成したtrainingとvalidation用のcsvファイルをimportする。
![コメント 2020-07-25 200143.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/ee76c826-a9e5-be04-830a-924012be46ef.png)

#自作データ利用 ③学習条件の設定
![コメント 2020-07-25 200724.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/a63e1aaa-ddef-b9e8-8bb2-d6b6230ab71b.jpeg)

#自作データ利用 ③学習＆検証
Accuracyは0.794でした。
![コメント 2020-07-25 201046.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680528/fe1e7287-d05a-3ece-6099-ef142e3fd00d.jpeg)