Upload
vx-pc-club
View
28
Download
0
Embed Size (px)
Citation preview
パソコン部活動報告番外編 2
最新の技術をとりあえず試してみることを目的とした部です。
活動内容
azure ML を使って機械学習をしてみる。
作った機械学習のモデルを Web サービス化して番外編 1 で作ったアプリケーションから呼び出すまでをやってみる。
1. とりあえずやってみる
機械学習も azure ML もまったくわならないがノリでやってみる。新規で Experiment を作成するとこんな画面になる。
1. とりあえずやってみる
あとは、やりたいようにフローを作ればおっけー!!
全然わからんな。つか、日本語にしてよ!
1. とりあえずやってみる
まだ調べるには早いんだぜ!データ読み込んで学習させればいいんだからこんな感じなはず。
1. とりあえずやってみる
Save Datasets > Sample から選択
Data Transformation > Sample and Split から選択
Machine Learning > Train から選択
1. とりあえずやってみる
次は。。。。。全然わからんな。
つか、日本語にしてよ!
1. とりあえずやってみる
1. データを選択する2. 必要な項目を抽出する3. 学習データと評価データに分割4. 学習させる5. 評価させる6. 学習を実行
僕には敷居が高かったようです。。。少し調べてみました。azure で ML を作るときのフロー作成手順は
の順番で配置していく。
2. しらべてみる
1.データを選択する
データは azure が用意しているサンプルもあるけど、 R の時に使ったデータを利用して予測させてみる。
自分の用意したデータは簡単にアップロードできる。あと、データにデータベースを選択することもできる。
画面下部の +NEW を押すと↓の画面が出てくる。
FROM LOCAL FILE を選択するとアップロード画面が出てくる。
3. フローの作成
アップロードすると、右メニューの [Saved Datasets] に表示されるので、使う場合は D&D かダブルクリックするとフロー作成のエリアへ移動する。
ローカルからアップロードした CSV
データベースを利用したい場合はこっちの Reader
3. フローの作成
2. 必要な項目を抽出する
説明変数(※ 1 )として必要な項目を指定する。Data Transformation のツリーから[Project Columns] を選択する。
※1 :物事の原因となる要因を表すもの。 目的変数 ( 物事の結果 ) を説明するため 変数。
3. フローの作成
選択したデータと Project Columns を接続する。これで Project Colunms を利用して説明変数を選択できるようになる。配置した Project Columns をクリックすると左メニューでオプションを指定できるようになるのでそこから設定をする。
ここをクリックするここをクリックする
3. フローの作成
Launch columns selector をクリックすると画面がポップアップするので説明変数にしたい項目を選択する。
関係ないけど、昔赤枠みたいに動くセレクトボックスを作ろうとして挫折したっけ。。。
3. フローの作成
3. 学習データと評価データに分割
学習データは言葉通りで学習させるためのデータ。評価データは学習済みのモデルに通すデータ。
Data Transformation ツリーから Split を選択する。Split を使って読み込みデータを学習データと評価データに分割させる。
3. フローの作成
配置した Split と Project Columns を接続する。Split クリックすると左メニューでオプションを指定できるようになる。オプションは選択する Splitting mode によって変更される。
3. フローの作成
1. Split Rows
2. Fraction of rows in the first output dataset
今回は Splitting mode に Split Rows を選択して実行するので、 Split Rows とそのオプションを簡単に説明しておく。
データセットをランダムに学習データと評価データに分割するモード。
読み込んだデータのうち学習データに割り振るの割合を指定する。
3. フローの作成
4 . Stratified split
3. Randomized split と Random seed
割り振るデータをランダムにするかどうか。チェックを入れた場合、 Random seed によって疑似乱数シーケンスが初期化されるので同一の seed を使えば実行結果が再現可能になる。0 の場合は実行する度にデータの振り分けが変化する。
層化分割(※ 2 )するかどうか。
※2: 統計学における母集団からの標本調査の手法のひとつ
3. フローの作成
4. 学習させる
学習させるためのモジュールは Train ってやつ。
Machine Learning から Train Model を選択して Split と接続させる。
他にも学習用モジュールがあるけど、選択するアルゴリズムによって適切なものを選択する必要がありそう。
3. フローの作成
次に学習用のアルゴリズムを選択する。
Machine Learning から Boosted Decision Tree Regression を選択して Train Model と接続させる。
予測のアルゴリズムでよく使われるのは回帰分析ってことなので、 Regression アルゴリズムから選択した。他にも回帰のアルゴリズムがあるけど、 MS のデモムービーでこれを使っていたから使ってみる。
3. フローの作成
Train Model のオプションで目的変数を設定する。
ここをクリックする ここをクリックする
3. フローの作成
学習結果を受けて、ここのパラメータは変更するのがよいらしい。
ここをクリックする
3. フローの作成
5. 評価させる
学習結果のモデルの性能を評価させる。評価で使うのは、 Score モジュールと Evaluate モジュール。
Score モジュールは実際の値と学習の結果出力された結果を比較するモジュール。Evaluate モジュールは Score モジュールの比較結果を受けて制度を数値化するモジュール。
評価させるときはこの 2 つのモジュールをセットとして考えておけばいい。
3. フローの作成
Machine Learnin から Score Model を選択して Split とTrain Model と接続させる。
3. フローの作成
Machine Learnin から Evaluate Model を選択して Score Model と接続させる。
3. フローの作成
これでフローの作成が完了。
3. フローの作成
画面下部の RUN を押せば作ったフローに沿って学習が実行される。実行が完了したモジュールは緑のチェックが付くようになっている。
4. フローの実行
学習結果を確認するのは Score Model の下部にある●をクリックして Visualize を選択する。
精度は Evaluate Model の下部にある●をクリックしてVisualize を選択する。
4. フローの実行
Score Model の実行結果
Evaluate Model の実行結果
ここが実行結果
意味がわからない。。。
4. フローの実行
Evaluate Model の実行結果の内容は azure のドキュメントを見るとこのように定義されている。
● 平均絶対誤差 (MAE) - 絶対誤差の平均です (*誤差 * とは、予測された値と実際の値との差です ) 。
● 二乗平均平方根誤差 (RMSE) - テスト データセットに対して実行した予測の二乗誤差平均の平方根です。
● 相対絶対誤差 - 実際の値とすべての実際の値の平均との絶対差を基準にした絶対誤差の平均です。
● 相対二乗誤差 - 実際の値とすべての実際の値の平均との二乗差を基準にした二乗誤差の平均です。
● 決定係数 - "R-2 乗値 " ともいいます。どの程度モデルが高い精度でデータと適合するかを示す統計指標です。
4. フローの実行
各誤差の統計値は、小さいほど優れています。つまり値が小さくなるほど、予測が実際の値に近くなることを意味します。決定係数では、値が 1 (1.0) に近づくほど、予測の精度が高くなります。
つまり、決定係数( Coefficient of Determination )は1.0 に近ければよくて、それ以外は 0 に近ければいいということかな?
ってことは実行結果はダメな感じですね。。。データが少ないのも原因かも。
4. フローの実行
ちなみにエラーが起きたらどうなるか試したところ、エラー発生個所のモジュールに赤で × がついて、以降のフローは実行されなかった。赤 × をクリックするとエラー内容が英語で表示されたのでそれをみれば何を直すかはちゃんとわかりそう。
4. フローの実行
ひとまず分析までできたから、 Web サービス化してみる。
手順はとても簡単。
ここを押すだけ。
非活性になっている場合は、一度 RUN を行えば活性化される。
メニューの WebService から input と output を配置して作ることもできる。
5.Web サービス化する
作成すると、 Web サービスのページが表示される。
5.Web サービス化する
呼び出し方とかのページへ遷移できる
呼び出し方は↑の通り別ページに書いてあるのでそれを参考によびだしてみる。
6.Web サービスを呼び出す
node のアプリケーションから呼び出そうと試みるも、 401 エラーになった。。。。
C#,Python,R の場合は WEB サービス作成時に生成されるドキュメントのコードをコピペすれば問題ないみたい。
6.Web サービスを呼び出す
エラーログを見てみると認証に失敗しているらしい。。
ってことは、 request 時に設定している値がおかしいということ。リクエストヘッダーをみてみたら、 Authorization にキーが設定されていなかった。凡ミスだぜ。。。。
6.Web サービスを呼び出す
再度実行したところ、 400 エラーが出た。。。エラー内容は「 No request body provided or error in deserializing the request body」
つまり設定しているパラメータがダメってことだね。
と思い込んでしまったため解決するのに時間がかかってしまったよ。。。
6.Web サービスを呼び出す
実際はリクエストヘッダーの contents-type が application/json に設定していたつもりが、「 application/x-www-form-urlencoded」になっていることで、 azure側の要求している形と違うことからエラーとなっていたみたい。
リクエストは npm パッケージの request.js を使っていたんだけど、パラメータ設定では、対応できなかったので改造することにした。
6.Web サービスを呼び出す
request.js の使い方は割愛するけど、 option に azure ってのを追加して対応した。
この option を request.post に渡す。
request パッケージの request.js の init処理の form メソッド実行後に、 option.azare の分岐を追加して azure の場合は、contents-type に application/json にするようにした。
6.Web サービスを呼び出す
で、実行したところ response が戻ってきた。値もちゃんと入っているので、これで node アプリケーションでも azure の ml を使ったアプリを作ることができそう。
6.Web サービスを呼び出す
azure の UI がイケてるから、ノリでできると思っていた時期が僕にもありました。。。
そもそも、機械学習の知識がない人はノリで使うことはできない。分析したいことがあったとしても、どんな分析方法を使えばいいかわからないから。
オンラインドキュメントは完全には日本語になっていない。