IoT ハンズオンコンテンツVer3のMachine Learning

未だに、Ver2を実践されている方もいらっしゃるようですが・・・

https://aka.ms/IoTKitHoL から公開しているIoTの要素を一通り学ぶ自学自習が可能なハンズオンコンテンツは、現在、Version 3です。IoTデバイス(PinKit/NETMF、Raspberry Pi2/Win10IoTCore)、または、Wpf EmulatorでIoT Hubに送ったセンサーデータを元に、デバイス識別子、計測時間、加速度からの温度状態予測をStep 7でMLを使っています。このコンテンツでは、IoT Hubで受信したセンサーデータをStream Analyticsで決めうちで温度の状態をHot、Coldに分類してストレージに格納したデータを使っています。

ハンズオンセミナーの時間の制約があり、こうしているのですが、実際には、デバイスごとの実測値を元に、温度のHot、Coldは決める必要があります。SASSensorテーブルには温度も含め蓄積されているので、R Scriptを使って、ML Studioの中で温度の高い低いを決めることが可能です。

Step10まで一通り終わった方は、是非、以下の方法を試してみて、よりリアルなMachine Learningにチャレンジしてください。

実は私は、データアナリストのプロフェッショナルでもなく、R Scriptのプロでもなく、未だ手探りの状態で、「あぁこれなら動くね」的な感じで作っています。もっといい書き方あるよーってかた、是非、フィードバックお願いします。

テーブルからのデータ読み込み

まずは、ML StudioでExperimentsを一つ新たに作成します。そして、”Data Input and Output”の”Import Data”をドラッグ&ドロップし、

DataImport

プロパティで

  • Data Source → Azure Table
  • Account Name、Account Keyは、SASSensorのストレージの情報を入力
  • Table name → SASSensor
  • Rows to scan ... →ScanAll

とします。プロパティの入力が終わったらRUNで実行します。

データの分割

これがAzure MLのせいなのか、R Scriptがもともとそうなのか、ちょっとわからないのですが、時間がR Scriptを通すと、1970年1月1日からのTick数になってしまうので、分割します。

まず、Data Transformation→ManipulationのSelect Columns in Datasetを二つ追加してImport Dataに接続します。

DividDataProp

左側は、timeを抽出します。後でマージする必要があるので、msgIdも一緒に抽出します。ちなみに、msgIdは計測時に、全ての計測レコードが一意に特定できるようにデバイスに付与している値です。左側のSelect Columns in Datasetのプロパティは、

LeftSideSPDProp

右側は、timeだけを排除します。

RightSideSPDProp

設定したら、またRUNします。これで、左側のSelect Columns in Datasetから、timeとmsgIdのデータセットが、右側からはtime以外のデータセットが出力されます。

R Scriptで温度のHot、Coldを決定し新しくカラムを追加する

まずは、R Language ModulesのExecute R Scriptを追加し、右側のSelect Columns in Datasetの出力とつなぎます。

AddRScripting

Execute R Scriptのスクリプトには、

と入力します。これで、各deviceId毎の温度の平均値を求めて、その平均値より温度が高ければHot、低ければColdという値を持つ、TempStatusというプロパティが追加されます。この段階で学習モデルの教師データが作成できます。

ResultOfRScriptiong

R言語の実行の過程で、tempmeanというプロパティが追加されています。この値は、deviceId毎に計算された温度(temp)の平均値です。ハンズオン資料の中で、TempStatusのカテゴリに変換するパートがありますが、このR言語内でカテゴリに変換しても構いません。

時間をマージする

Data TransformationのManipulationのJoin Dataを追加し、二系統のデーターセットをマージします。

AddJoinModule

プロパティで、双方のmsgIdをキーにしてデータを結合します。

JoinProp

各項目、設定したらRUNするのをお忘れなく。

結果をデータセットとして保存する

Join Dataの下の○を右クリックし、”Save as Dataset”を選択し、

JoinedDataset

変換した結果をデータセットとして保存します。名前は適当に付けて構いません。例えば、”Categorized Temp Status Data”とか。すると

SavedDataSet

保存が完了すると、”Saved Datasets”→”My Datasets”の下に現れます。
後は、ハンズオンのStep 7の冒頭のImport Dataをこの保存したデーターセットに置き換えれば、変換したデータを使った予測モデルが作成可能です。