Azure MLの実験の流れを理解する

Azure MLの基本的な実験の流れ

実験を作成 Blank Experimentなどから空の実験を作成する
学習データの用意 機械学習をするために元となるトレーニングデータを用意する
アルゴリズムの決定 どの機械学習アルゴリズムを用いてトレーニングを行うか決定
モジュール配置 ML Studioでモジュールを配置してデータの流れと実験内容を記述する
パラメータ調整 モジュールのパラメータを変更してアルゴリズムを調整する
実験を開始 実験を開始して学習終了を待つ
評価 実験結果から実験の評価をつける。もし評価が悪いようならアルゴリズムの決定やパラメータ調整を行って再度実験を行う
Webサービス化 トレーニングしたモデルに未知のデータをいれて出力結果を得るためにWebサービスとしてデプロイする

サンプル実験

  • このページではサンプル実験として気象庁の過去気象データから指定日の24時間の気温を予測する実験を作成する
  • アルゴリズムは線形回帰(LinearRegression)

実験を作成

  • ML Studioにサインイン
  • 下にあるNewボタンからBlank Experimentを選択

 

学習データの用意

  • Azure MLのモジュール間を流れるデータはDataSetと呼ばれる
  • DataSetの配置方法はcsvアップロード、HttpGet、SQL Databaseなど様々な方法がある
  • 今回はサンプル実験としてCSVアップロードによるDataSetの配置をする
  • 気象庁の過去気象データを入手する
    • 気象庁の過去データサイトにアクセス
    • 過去の気象データをCSVで入手可能
    • どの地点の気象データかを選択
    • どの項目を含めるかを選択する
    • 今回は月別値の月平均気温とする
    • どの期間のデータかを選択
    • 今回は1990年3月から2015年3月までとする
    • 表示オプションを選択
    • 値を表示する。観測結果などの変化にかかわらず~。年月日などに分けて格納の3つを選択
    • CSVファイルをダウンロードを押す
  • ダウンロードしたCSVを加工する
    • 気象庁のダウンロードデータはAzure MLでは少し使い勝手が悪い
    • Azure MLのDataSetとしてのCSVの条件
      • ヘッダー項目は1行orなし
      • エンコードはUTF-8
    • ダウンロードしたデータが上記条件に一致するように加工する
    • CSVをExcelで開く
    • 5行目の「品質情報」と「均一番号」を上のセルに移動
    • 空白になった5行目を削除
    • 上から3行すべて削除
    • このようなデータを作る
    • できたら上書き保存
    • 次にUTF-8に変換する
    • CSVをメモ帳で開く
    • ファイル→名前をつけて保存
    • 文字コードをUTF-8にして同一名で保存
  • CSVデータをML Studioにアップロードする
    • UTF-8のCSVができたらDataSetとしてアップロードする
    • ML Studioで「New」→「DataSet」→「From Local File」を選択
    • ファイルを選択ボタンで先ほどつくったCSVを選択する
    • データセットの名前は「temperature_monthly」とする
    • SELECT A TYPE THE DATASET:の項目は「Generic CSV File with a header(.csv)」を選択
    • Descriptionは書いても書かなくても
    • これでDataSetのアップロード完了

学習アルゴリズムを決定する

  • 機械学習のアルゴリズムを決定する
  • 機械学習に定説は少なく、基本的に実験データによって使用するアルゴリズムが変わってくる
  • 実験データと目的から正しい学習アルゴリズムを判断しなければ良い結果がでにくい
  • 今回は線形回帰(Linear Regression)を選択する
    • ホントは24時間の気温のような非線形問題に線形回帰は正しい選択ではないけどとりあえず線形回帰で
  • 線形回帰
    • 今回使用する線形回帰アルゴリズムは回帰という機械学習のアルゴリズムの一つ
    • 回帰とは入出力のデータ集合に対して何かしらの法則性を見つけ、未知の入力に対してその法則を当てはめて出力を得るアルゴリズム
    • 線形回帰の場合その法則が線形(直線)
    • ※ざっくりとした説明です。詳しくは調べてください
  • つまり今回の場合、日付と時間という入力から、気温という出力の関係性を学習させる

モジュールを配置する

  • 最初にML Studioに作成した実験のキャンバスにモジュールをドラッグアンドドロップして配置する
  • 学習データセットの配置
    • 先ほどアップロードしたCSVの学習データセットを配置する
    • 左上の検索ボックスに「temperature」と打ち込むとSavedDatasetsの中にアップロードしたCSVがあるのでキャンバスに配置する
    • モジュールの出力部を右クリック→Visualizeで配置した学習セットの中身を見ることができる
  • データを加工する
    • モジュールを使ってDataSetのデータを加工する
    • Project Columnsモジュールで使いたいカラムを選択できる
    • Project ColumnsモジュールをDataSetの下にドラッグアンドドロップ
    • モジュール間を結ぶことでデータの流れを記述する
    • temperature_montlyの出力部からProject Columnsの入力部へドラッグする
    • Project Columnsモジュールのプロパティからどのカラムを選択するかを指定する
    • Project Columnsモジュールを選択→PropertiesにあるLaunch column selectorを押す
    • BeginWithをNo columns、Include、column names、「月」、「平均値(℃)」を選択
    • これで月カラムと平均値カラムだけデータが流れる
    • 次に流れてくるデータをSplit モジュールで行ごとに分割する
    • Azure MLの基本的な学習として学習データは「学習用」と「評価用」に分割するという考え方がある
      • まず学習DataSetを「学習用」と「評価用」に行ごとに分割する
      • 学習時は学習用DataSetを使って学習モデルのトレーニングを行う
      • 評価時は評価用DataSetの入力値を学習モデルに入力し、出力を得る
      • 評価用DataSetの出力は正解値となるのでそれと学習モデルからの出力を比較し、評価をつける
    • 上記のデータ分割を実現するためにSplitモジュールを配置する
    • SplitモジュールのPropertiesにはFraction of rows in the first output datasetという値がありここに数値を入れるとその比率でデータが分割される
    • 0.7と入れると7割のデータがランダムに左の出力部から、3割のデータが右の出力部から出てくる
    • 今回は学習用DataSetを7割、評価用DataSetを3割にしたいので0.7と指定する
  • 学習モジュールを配置する
    • 学習モデルとなるモジュールを配置する
    • Train Modelを配置する
    • Splitの左側の出力部をTrain Modelの入力部につなげる
    • Train ModelのPropertiesにLabel columnという項目があり、Launch Column Selectorというボタンがあるのでクリックする
    • ここではどのカラムデータを正解データとするのかを指定する
    • 今回は気温データを正解データとし、予測するため、「平均気温(℃)」を選択する
  • アルゴリズムのモジュールを配置する
    • これによってどのアルゴリズムを使用するのかが決定される
    • 今回は線形回帰を使うのでLinear RegressionモジュールをTrain Modelの上に配置する
    • 配置できたらLinear Regressionの出力部をTrain Modelの左側の入力部につなげる
  • スコアモジュールを配置する
    • スコアモジュールは学習したモデルを使って、未知の入力データを通し、出力を得るモジュール
    • Score Modelモジュールを配置する
    • Train Modelの出力をScore Modelの左側の入力につなげる
    • Splitの右側の出力をScore Modelの右側の入力につなげる
    • こうすることでSplitで分割した左側の学習データをつかって学習したモデルに、Splitで分割した右側の評価用データを入れ、結果を出力することができる
  • 評価用モジュールを配置する
    • 評価用モジュールとはScore Modelが出力した出力値がどれ位正解値と一致しているかを出力するモジュール
    • Evaluate Modelを配置する
    • Score Modelの出力をEvaluate Modelの左側の入力につなげる
  • CSV変換モジュールを配置する
    • 最後にスコア結果をCSVとしてダウンロードできるようにConvert to CSVモジュールをScore Modelとつなげる
  • これで学習モデルが完成する

実験と評価を行う

  • 下にあるSAVEボタンを押し、RUNボタンを押して実験を開始する
  • Finished runnningになったら実験完了
  • Score Modelの出力部を右クリックしてVisualizeを押して見る
  • Scored Labelカラムが機械学習によって予測された値となる
  • 続いてEvaluate Modelの出力部を右クリックしてVisualizeしてみる
  • 5つの評価軸で評価値が表示される
  • 評価軸の意味は以下のようになる
  • 名前 概要
    Mean Absolute Error 平均絶対誤差、0に近いほど良い
    Root Mean Squared Error 予測値が正解値からどれだけ離れているかを示す。0に近いほど良い
    Relative Absolute Error 相対誤差
    Relative Squared Error ルート相対二乗誤差
    Coefficient of Determination 決定係数、特徴ベクトルが正解値をどれだけ説明できているか。高いほど良い
  • Mean Absolute Errorである平均絶対誤差が5.6ということは平均して5.6℃気温の予測値に誤差があるということである
  • Convert to CSVモジュールの出力を右クリックしてDownload→ShiftJISに変換→Excelでグラフ化するとこうなる
  • 山を描いている水色が正しい値なのに対して、出力されたオレンジ色の値は一直線となっている
  • 線形回帰は線形(直線)でしかスコア付けができないのでこのような良くない結果となる
  • 改善策として、非線形回帰であるニューラルネットワークを使うことができる
  • アルゴリズムの変え方としては線形回帰モジュールを削除してニューラルネットワークに置き換えてつなげるだけ
  • このようにAzure MLの実験は調整と実験と評価を繰り返して誤差を少なくしていく必要がある

Webサービス化する

  • 評価が良くなったらWebサービスとして配置することで未知データを外部から入力し、学習モデルを通して予測した結果を取得することができる
  • Webサービス化するにはWebサービスの入出力を配置する
  • Web ServiceのInputとOutputモジュールを配置する
  • 配置したらInputはScore Modelの右側の入力に、OutputはScoreModelの右側の出力につなげる
  • これでWebからの未知の入力値をScore Modelで学習モデルを通し、出力結果をWeb ServiceのOutputとして出力する流れを作れる
  • つなげたらもう一度「RUN」を押し、実験開始する
  • 実験が終了すると、「PUBLISH WEB SERVICE」というボタンが押せるようになるので押す
  • ポップアップは「YES」を選択
  • しばらくするとこのようなページに遷移する
  • REQUEST/RESPONSEというリンクをクリックするとAPIヘルプページに遷移する
  • このWebページの通りにHttpリクエストを発行すると学習モデルを通した結果を取得することができる
  • C#とPython、Rのサンプルもあるのでコピペしても使える

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください