Azure ml

42
パパパパパパパパパ パパパ 2 パパパパパパパパパパパパパパパパパパパパパ パパパパパパ

Transcript of Azure ml

Page 1: Azure ml

パソコン部活動報告番外編 2

最新の技術をとりあえず試してみることを目的とした部です。

Page 2: Azure ml

活動内容

azure ML を使って機械学習をしてみる。

作った機械学習のモデルを Web サービス化して番外編 1 で作ったアプリケーションから呼び出すまでをやってみる。

Page 3: Azure ml

1. とりあえずやってみる

機械学習も azure ML もまったくわならないがノリでやってみる。新規で Experiment を作成するとこんな画面になる。

Page 4: Azure ml

1. とりあえずやってみる

あとは、やりたいようにフローを作ればおっけー!!

Page 5: Azure ml

全然わからんな。つか、日本語にしてよ!

1. とりあえずやってみる

Page 6: Azure ml

まだ調べるには早いんだぜ!データ読み込んで学習させればいいんだからこんな感じなはず。

1. とりあえずやってみる

Page 7: Azure ml

Save Datasets > Sample から選択

Data Transformation > Sample and Split から選択

Machine Learning > Train から選択

1. とりあえずやってみる

Page 8: Azure ml

次は。。。。。全然わからんな。

つか、日本語にしてよ!

1. とりあえずやってみる

Page 9: Azure ml

1. データを選択する2. 必要な項目を抽出する3. 学習データと評価データに分割4. 学習させる5. 評価させる6. 学習を実行

僕には敷居が高かったようです。。。少し調べてみました。azure で ML を作るときのフロー作成手順は

の順番で配置していく。

2. しらべてみる

Page 10: Azure ml

1.データを選択する

データは azure が用意しているサンプルもあるけど、 R の時に使ったデータを利用して予測させてみる。

自分の用意したデータは簡単にアップロードできる。あと、データにデータベースを選択することもできる。

画面下部の +NEW を押すと↓の画面が出てくる。

FROM LOCAL FILE を選択するとアップロード画面が出てくる。

3. フローの作成

Page 11: Azure ml

アップロードすると、右メニューの [Saved Datasets] に表示されるので、使う場合は D&D かダブルクリックするとフロー作成のエリアへ移動する。

ローカルからアップロードした CSV

データベースを利用したい場合はこっちの Reader

3. フローの作成

Page 12: Azure ml

2. 必要な項目を抽出する

説明変数(※ 1 )として必要な項目を指定する。Data Transformation のツリーから[Project Columns] を選択する。

※1 :物事の原因となる要因を表すもの。   目的変数 ( 物事の結果 ) を説明するため   変数。

3. フローの作成

Page 13: Azure ml

選択したデータと Project Columns を接続する。これで Project Colunms を利用して説明変数を選択できるようになる。配置した Project Columns をクリックすると左メニューでオプションを指定できるようになるのでそこから設定をする。

ここをクリックするここをクリックする

3. フローの作成

Page 14: Azure ml

Launch columns selector をクリックすると画面がポップアップするので説明変数にしたい項目を選択する。

関係ないけど、昔赤枠みたいに動くセレクトボックスを作ろうとして挫折したっけ。。。

3. フローの作成

Page 15: Azure ml

3. 学習データと評価データに分割

学習データは言葉通りで学習させるためのデータ。評価データは学習済みのモデルに通すデータ。

Data Transformation ツリーから Split を選択する。Split を使って読み込みデータを学習データと評価データに分割させる。

3. フローの作成

Page 16: Azure ml

配置した Split と Project Columns を接続する。Split クリックすると左メニューでオプションを指定できるようになる。オプションは選択する Splitting mode によって変更される。

3. フローの作成

Page 17: Azure ml

1. Split Rows

2. Fraction of rows in the first output dataset

今回は Splitting mode に Split Rows を選択して実行するので、 Split Rows とそのオプションを簡単に説明しておく。

データセットをランダムに学習データと評価データに分割するモード。

読み込んだデータのうち学習データに割り振るの割合を指定する。

3. フローの作成

Page 18: Azure ml

4 . Stratified split

3. Randomized split と Random seed

割り振るデータをランダムにするかどうか。チェックを入れた場合、 Random seed によって疑似乱数シーケンスが初期化されるので同一の seed を使えば実行結果が再現可能になる。0 の場合は実行する度にデータの振り分けが変化する。

層化分割(※ 2 )するかどうか。

※2: 統計学における母集団からの標本調査の手法のひとつ

3. フローの作成

Page 19: Azure ml

4. 学習させる

学習させるためのモジュールは Train ってやつ。

Machine Learning から Train Model を選択して Split と接続させる。

他にも学習用モジュールがあるけど、選択するアルゴリズムによって適切なものを選択する必要がありそう。

3. フローの作成

Page 20: Azure ml

次に学習用のアルゴリズムを選択する。

Machine Learning から Boosted Decision Tree Regression を選択して Train Model と接続させる。

予測のアルゴリズムでよく使われるのは回帰分析ってことなので、 Regression アルゴリズムから選択した。他にも回帰のアルゴリズムがあるけど、 MS のデモムービーでこれを使っていたから使ってみる。

3. フローの作成

Page 21: Azure ml

Train Model のオプションで目的変数を設定する。

ここをクリックする ここをクリックする

3. フローの作成

Page 22: Azure ml

学習結果を受けて、ここのパラメータは変更するのがよいらしい。

ここをクリックする

3. フローの作成

Page 23: Azure ml

5. 評価させる

学習結果のモデルの性能を評価させる。評価で使うのは、 Score モジュールと Evaluate モジュール。

Score モジュールは実際の値と学習の結果出力された結果を比較するモジュール。Evaluate モジュールは Score モジュールの比較結果を受けて制度を数値化するモジュール。

評価させるときはこの 2 つのモジュールをセットとして考えておけばいい。

3. フローの作成

Page 24: Azure ml

Machine Learnin から Score Model を選択して Split とTrain Model と接続させる。

3. フローの作成

Page 25: Azure ml

Machine Learnin から Evaluate Model を選択して Score Model と接続させる。

3. フローの作成

Page 26: Azure ml

これでフローの作成が完了。

3. フローの作成

Page 27: Azure ml

画面下部の RUN を押せば作ったフローに沿って学習が実行される。実行が完了したモジュールは緑のチェックが付くようになっている。

4. フローの実行

Page 28: Azure ml

学習結果を確認するのは Score Model の下部にある●をクリックして Visualize を選択する。

精度は Evaluate Model の下部にある●をクリックしてVisualize を選択する。

4. フローの実行

Page 29: Azure ml

Score Model の実行結果

Evaluate Model の実行結果

ここが実行結果

意味がわからない。。。

4. フローの実行

Page 30: Azure ml

Evaluate Model の実行結果の内容は azure のドキュメントを見るとこのように定義されている。

● 平均絶対誤差 (MAE) - 絶対誤差の平均です (*誤差 * とは、予測された値と実際の値との差です ) 。

● 二乗平均平方根誤差 (RMSE) - テスト データセットに対して実行した予測の二乗誤差平均の平方根です。

● 相対絶対誤差 - 実際の値とすべての実際の値の平均との絶対差を基準にした絶対誤差の平均です。

● 相対二乗誤差 - 実際の値とすべての実際の値の平均との二乗差を基準にした二乗誤差の平均です。

● 決定係数 - "R-2 乗値 " ともいいます。どの程度モデルが高い精度でデータと適合するかを示す統計指標です。

4. フローの実行

Page 31: Azure ml

各誤差の統計値は、小さいほど優れています。つまり値が小さくなるほど、予測が実際の値に近くなることを意味します。決定係数では、値が 1 (1.0) に近づくほど、予測の精度が高くなります。

つまり、決定係数( Coefficient of Determination )は1.0 に近ければよくて、それ以外は 0 に近ければいいということかな?

ってことは実行結果はダメな感じですね。。。データが少ないのも原因かも。

4. フローの実行

Page 32: Azure ml

ちなみにエラーが起きたらどうなるか試したところ、エラー発生個所のモジュールに赤で × がついて、以降のフローは実行されなかった。赤 × をクリックするとエラー内容が英語で表示されたのでそれをみれば何を直すかはちゃんとわかりそう。

4. フローの実行

Page 33: Azure ml

ひとまず分析までできたから、 Web サービス化してみる。

手順はとても簡単。

ここを押すだけ。

非活性になっている場合は、一度 RUN を行えば活性化される。

メニューの WebService から input と output を配置して作ることもできる。

5.Web サービス化する

Page 34: Azure ml

作成すると、 Web サービスのページが表示される。

5.Web サービス化する

呼び出し方とかのページへ遷移できる

呼び出し方は↑の通り別ページに書いてあるのでそれを参考によびだしてみる。

Page 35: Azure ml

6.Web サービスを呼び出す

Page 36: Azure ml

node のアプリケーションから呼び出そうと試みるも、 401 エラーになった。。。。

C#,Python,R の場合は WEB サービス作成時に生成されるドキュメントのコードをコピペすれば問題ないみたい。

6.Web サービスを呼び出す

Page 37: Azure ml

エラーログを見てみると認証に失敗しているらしい。。

ってことは、 request 時に設定している値がおかしいということ。リクエストヘッダーをみてみたら、 Authorization にキーが設定されていなかった。凡ミスだぜ。。。。

6.Web サービスを呼び出す

Page 38: Azure ml

再度実行したところ、 400 エラーが出た。。。エラー内容は「 No request body provided or error in deserializing the request body」

つまり設定しているパラメータがダメってことだね。

と思い込んでしまったため解決するのに時間がかかってしまったよ。。。

6.Web サービスを呼び出す

Page 39: Azure ml

実際はリクエストヘッダーの contents-type が application/json に設定していたつもりが、「 application/x-www-form-urlencoded」になっていることで、 azure側の要求している形と違うことからエラーとなっていたみたい。

リクエストは npm パッケージの request.js を使っていたんだけど、パラメータ設定では、対応できなかったので改造することにした。

6.Web サービスを呼び出す

Page 40: Azure ml

request.js の使い方は割愛するけど、 option に azure ってのを追加して対応した。

この option を request.post に渡す。

request パッケージの request.js の init処理の form メソッド実行後に、 option.azare の分岐を追加して azure の場合は、contents-type に application/json にするようにした。

6.Web サービスを呼び出す

Page 41: Azure ml

で、実行したところ response が戻ってきた。値もちゃんと入っているので、これで node アプリケーションでも azure の ml を使ったアプリを作ることができそう。

6.Web サービスを呼び出す

Page 42: Azure ml

azure の UI がイケてるから、ノリでできると思っていた時期が僕にもありました。。。

そもそも、機械学習の知識がない人はノリで使うことはできない。分析したいことがあったとしても、どんな分析方法を使えばいいかわからないから。

オンラインドキュメントは完全には日本語になっていない。