前回に続いて、「Microsoft Azure Machine Learning Studio」について
より詳しく知るために、今回は自分で一からモデルを作っていきます٩(ˊᗜˋ*)و
まずは簡単なモデルで試してみたいので
SIGNATEの練習問題「アヤメの分類」に挑戦します。
【練習問題】アヤメの分類 | SIGNATE - Data Science Competition
モデル作成開始
Microsoft Azure Machine Learning Studio (classic)
ホーム画面から始めていきます!
「my experiments」をクリックすると、自分の作業場へ移動します。
始めに「PROJECTS」を作成します。
プロジェクトでは、データやモデルをまとめて管理することができます。
「PROJECTS」を選択し、下の「+NEW」をクリックします。
「Empty Project」をクリックすると「New Project」が開くので
プロジェクトの名前や、説明文を記入して作成が完了します。
データの読み込み
始めはデータをアップロードし、データを読み込みます。
作業場にある「DATASETS」を選び、下の「+NEW」をクリックします。
「FROM LOCAL FILE」をクリックし、ローカルからデータを選択します。
データファイルを選択します。
もし今後データが新しくなり既にアップロードしたデータを上書きしたい場合は、
チェックボックスにチェックし、下のプルダウンから古くなったデータを選択します。
アップロードが完了すると、データが一覧に表示されますが
PROJECTの欄が設定されていないので「None」となっています。
設定するにはデータにチェックを入れ、下の「ADD TO PROJECT」をクリックします。
初めに作成したプロジェクトを選択すれば、設定の完了です。
モデルの作成を「EXPERIMENTS」から行います。
既に作成されているモデルは右側(緑枠)にプレビューが表示されます。
「+NEW」をクリックして進むと、沢山のサンプルが選択できます。
データも付いていて様々な事例を勉強するのに便利そうです。
今回は自分の準備したデータがあるので、「Blank Experiment」を選びます。
モデルの構築
モデルのワークスペースが開くので、ここでモデルを構築していきます。
初めに上部の名前部分(青線)を任意の名前に変更します。
次に左のツール内の「Saved Datasets」→「My Datasets」より
アップロード済みのデータを、ワークスペースにドラック&ドロップします。
読み込んだデータを可視化して確認します。
データから以下のことが読み取れました。
・カラム数:6 サンプル数:75
・目的変数[class]は[Iris-virginica, Iris-setosa, Iris-versicolor ]の3つに分類される
・各変数に欠損値は無い
次に学習に必要の無い変数[id]を除外します。
他のモデルでも使用した「Selected Columns in Dataset (カラムの選択)」を使います。
次にtrainデータを分割します。前回と同様「Split Data」を使用します。
今回使用する学習モジュールは「ランダムフォレスト」です。
左の一覧から「Machine Learning」→「Initialize Model」→「Classification」→「Multiclass Decision Forest」を選択します。
ランダムフォレストではいくつかのパラメータを指定する必要があります。
・Resampling method(リサンプリング方法):
各ツリーで使用される手法、バギングかレプリケーション
・Create trainer mode:前回説明の通り。今回はSingle Parameter
・Number of decision trees:アンサンブルに作成する決定木の数
・Maximum depth of decision trees:作成できる決定木の最大深さ
・Number of random splits per node:ノードごとのランダム分割数
・Minimum number of samples per leaf node:リーフノードあたりの最小サンプル数
これらのパラメータを調整しながら決定できたら、
今までと同様に、「Train Model」「Score Model」「Evaluate Model」を使って
学習と推論の結果を確認してみます。
結果は以下のようになりました。
マトリックスが表示されるので、どう間違いが生じたのか分かり易いですね!
この学習モデルを使って、testデータの推論もやってみます。
testデータを読み込み、trainデータと同様に[id]列を除外します。
そして「Score Model」ブロックに、学習モデルとtestデータを繋ぎます。
この結果をSIGNATEに投稿するためにデータをSCV形式に変換し、ダウンロードします。
ダウンロードしたデータを投稿する形に整え(投稿形式は各コンペによる)
投稿してみた結果がこちらです!!
0.93333...でしたー。
初めてにしては良いほう?
まとめ
今回自分で一から構築してみて今まで見えていなかったデメリットが見えてきました。
それは前処理等の操作に限りがあることです。
データセットに列を追加しようとしても、列の並びは指定できなかったり
1つの操作にブロックがいくつも必要だったり、
融通の利かなさに少し困ってしまう点がいくつかありました。
また、今回使用したランダムフォレストにはパラメータがいくつかありましたが
Pythonで構築した際のパラメータと名称が異なるため、どのパラメータが
どれを指しているのかがわからず、実際Pythonで作成したモデルの方が精度の高くなり
それを再現することが出来ませんでした。
お知らせ
諸事情によりここで私のブログの投稿を一時お休みさせていただきますが、
頼もしい後輩ちゃんが引き続き頑張ってくれるので
今後とも「テービーテックのデータサイエンス」をよろしくお願いします!
また1年後戻ってまいります~~(*゚▽゚)ノ