5つのステップで簡単にできる！ 機械学習コア内蔵MEMSセンサを用いたディシジョン･ツリー開発のヒント

# 機械学習プロジェクトにおける5つのステップ — キー･ポイントを把握すれば、アプリケーション開発は難しくない！  

エッジ･デバイスにおける機械学習には、さまざまなメリットがあります。一方で、標準的なプログラミング手法とは大きく異なるアプローチであるため、「機械学習に関心はあるけれど、開発が難しそう」といった懸念を抱いている方も多いのではないでしょうか？  

この記事では、機械学習の実装に必要な開発手順についての解説や、STマイクロエレクトロニクス（ST）が提供する機械学習コア（MLC）内蔵MEMSモーション･センサのメリットをご紹介します。  

機械学習プロジェクトの開発手順を理解し、キーとなるポイントを把握すれば、誰でも優れた価値を提供する機械学習アプリケーションを開発することができます。また、STが提供するソリューションを活用することで、エッジ･デバイスへの機械学習実装を簡略化し、その性能をさらに高めることができます。  

機械学習やディープ･ラーニングを組込みシステムに実装する場合、一般的に以下5つのステップで開発を行います（図1）。    
 
![fig1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/d4b01ff9-d17e-6687-2778-3d3b58725918.png) **図1：機械学習プロジェクトにおける5つのステップ** 

ステップ1では、機械学習に使用するデータをセンサから収集します。収集されたデータセットは、機械学習モデルのトレーニング（トレーニング･データセット）や、構築されたモデルの性能評価（テスト･データセット）に使用されます。機械学習では、一般的に約80%がトレーニング･データセット、約20%がテスト･データセットとして使用されます。  

ステップ2では、データの「ラベリング」を行います。収集されたデータがそれぞれどのような属性（「走る」、「歩く」、「静止」など）を持っているのかを機械に学習させるステップです。記事の後半で、STのMLC内蔵MEMSモーション･センサで使用される「ディシジョン･ツリー」と呼ばれる分類モデルを例に、詳細な解説を行っています。  
また、「ラベル」や、「クラス」と呼ばれる特徴的な属性に応じて、データをグループ化していきます。  

次にステップ3では、準備されたデータセットを使用して機械学習モデルをトレーニングします。「フィッティング」とも呼ばれるこの作業では、一般的に利用シーンに合わせて選択しておいた機械学習モデル（この場合はディシジョン･ツリー）をトレーニングします。この際、どのような内容のデータを、どのくらいの量だけ利用してトレーニングするかによって、得られる結果の精度が大きく変わります。  

![fig2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/d10db18d-5b0d-88bc-7e4d-1bce28900767.png)
**図2：機械学習の種類とSTのMEMSモーション･センサに内蔵されたMLC**


ステップ4では、トレーニングした機械学習モデルをシステムに組み込みます。コンピュータ上で実行する機械学習の場合には、Pythonライブラリを使ってモデルを直接実行できますが、マイコンなどで実行する場合にはこのライブラリをCコードに変換して実装します。MLC搭載MEMSセンサのようなデバイスなど、ハードウェア動作によるソリューションでは、ライブラリをレジスタ設定値に変換した上で実装します。

最後のステップ5では、機械学習モデルを検証します。ここで検証した結果、思い通りの結果が得られていない場合には、ここまでのステップのどの部分をどのように改善したら良いのかを見極め、機械学習モデルをブラッシュアップしていきます。

# 分類時の人間の思考方法をモデル化するディシジョン･ツリー
  
ディシジョン･ツリーは、データをいくつかの条件分岐によって分類します。「複数の質問に順番に答えて分岐を辿っていくと、最終的に自分の性格がわかる」といった性格診断などをイメージすると、わかりやすいかもしれません。機械学習の分類モデルは、それぞれの段階におけるチェックポイント（「決定ノード」と呼ばれる）を複数組み合わせて作成されます。

もう1つの例として、ベテランの不動産セールスマンが、訪れた顧客が物件を購入してくれるかどうかを評価する際に使用する以下のようなディシジョン･ツリーがあります（図3）。顧客は最終ノード（「リーフ」）に到達し、そこで各決定ノードの条件に応じて最終判断を下します。 
![fig3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/ea779257-20ad-e83b-1c42-c8ba4fa5ae51.png)
**図3:ディシジョン･ツリーによる不動産購入予測の例** 

  

ディシジョン･ツリー開発を始めるにあたり、事前に定義しておくべき3つのポイントがあります。「解決すべき問題」、分類時に重視するパラメータである「特徴量（入力）」、分類アルゴリズムによって最終的に求める「答え（出力）」です。不動産セールスマンの例に当てはめてみると、「顧客が物件を購入するかどうかを予測すること」が「問題」となり、「顧客が物件を「購入する」もしくは「購入しない」が「答え」になります。

正確な答えを得るためには、特徴量の扱いが重要です。この事例では、顧客の収入や物件の価格、部屋の数、駐車場の有無などが特徴量となり、どの特徴量を、どのような順序、どのようなしきい値（データを切り分ける際の基準値）で分類していくかによって、得られる答えが大きく左右します。機械学習を通じてディシジョン･ツリーを作成するには、採用する特徴量を開発者が初めに指定する必要があります。そして、学習を繰り返すことで、各決定ノードでチェックされる特徴量の順序や分類のしきい値を最適化していき、ツリーを改良していきます。こうした構造を見ると、ディシジョン･ツリーは従来プログラミングで用いられてきた「if else文」の方法論とよく似ているように思えるかもしれません。では、どこに違いがあるのでしょうか。

重要なポイントは、使用する特徴、決定ノードの位置、しきい値、およびディシジョン･ツリーの構造が設計者によって「あらかじめ」決定されるのではなく、与えられたデータセットに基づいて機械学習モデルから「学習」されるということです。実際、異なる国や地域の物件に関するデータセットでモデルをトレーニングすると、それぞれ異なる結果が得られるでしょう。

# 効果的なディシジョン･ツリーの開発をサポート！MLC内蔵MEMSモーション･センサ

機械学習によるディシジョン･ツリーの開発に精通したシステム開発者は、現時点ではそれほど多くありません。そこでSTは、機械学習による分類をさらに普及させるために、MLCを内蔵したMEMSモーション･センサを開発しました。3軸加速度センサと3軸ジャイロセンサに加え、MLCを集積した「[LSM6DSOX](https://www.st.com/ja/mems-and-sensors/lsm6dsox.html)」、「[LSM6DSRX](https://www.st.com/ja/mems-and-sensors/lsm6dsrx.html)」、「[ISM330DHCX](https://www.st.com/ja/mems-and-sensors/ism330dhcx.html)」の3製品と、傾斜計向けの超高精度加速度センサとMLCを集積した「[IIS2ICLX](https://www.st.com/ja/mems-and-sensors/iis2iclx.html)」を提供しています。

MLC内蔵MEMSモーション･センサを使用すれば、機械学習による分類とセンサ仕様に最適化されたハードウェア･ロジックにより、ディシジョン･ツリーを低消費電力かつ高精度でリアルタイム実行できます。MLCでは、最大32個の特徴量を処理するディシジョン･ツリーを実行可能です。STは、MLCで実行するディシジョン･ツリーをより簡単に開発するための開発環境も提供しています。

ディシジョン･ツリーの作成には、WekaやRapidMiner、MATLAB、Pythonなど、機械学習システムの開発で広く使用されているプラットフォームを利用することもできます（図4）。ただし、これらのプラットフォームは柔軟性に優れ多機能である一方、使いこなしてユースケースに最適なディシジョン･ツリーを開発するために、高度な知識とスキルが求められます。
 
![fig4](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/02c64f43-b411-853a-a13d-cd63d5848b03.png)
                             **図4：MLCの学習プロセス**  

そこでSTは、MLC上で処理されるディシジョン･ツリーを簡単に開発するための拡張機能を含む、ST製MEMSセンサ評価ボード用の包括的なソフトウェア･パッケージ「[Unico-GUI](https://www.st.com/ja/development-tools/unico-gui.html)」を提供しています。Unico-GUI では、データ収集やモデルのトレーニング、検証などを、GUIを介して直感的かつ簡単に行うことができます。  

また、幅広いハードウェア要件に対応するために、さまざまなセンサを備えた多機能の評価ボードを提供しています（図5）。  

![fig5](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124278/9ead0abe-82ff-362f-cd6c-827d0e9ae7a2.png)
          **図5：MLC内蔵MEMSセンサを搭載する評価ボードと対応ソフトウェア**


MLC内蔵 MEMSモーション･センサを搭載している（または搭載可能な）評価ボードとして、バッテリや無線機能を搭載して疑似的なIoT機器としてスタンドアロンで利用可能なボード、マイコンの開発環境に簡単に接続できるソフトウェア開発に適したボード、車載 / 産業機器、コンスーマ機器などのさまざまなアプリケーションで使用できる汎用性に優れたボードなどが含まれています。  

さらに、これらのボードからデータを簡単に記録するためのPC用GUIソフトウェア「[AlgoBuilderSuite](https://www.st.com/ja/development-tools/algobuilder.html)」も提供しています。AlgoBuilderSuite では、コードを1行も書くことなく、簡単かつ直感的にセンサをプログラムすることができます。