一直線に進むことはめったにない 機械学習においては 最初から最後まで迷わず一直線に進むということはめったにありません 常にさまざまなアイデアや方法を繰り返し試すことになるでしょう このセクションでは いくつかの重要な決定ポイントに注目しつつ 機械学習の体系的なワークフローについて説明します
機械学習の課題 機械学習における課題の大部分は データ処理と正しいモデルの発見に関連しています データの形式や規模は均一ではありません 実世界のデータセットは 乱雑で 不完全で フォーマットもさまざまです シンプルな数値データのみの場合もあるかもしれません しかし センサー信号 テキスト カメラからのストリーミング画像など さまざまな種類のデータを組み合わせる場合もあるでしょう データ処理には 専門的な知識やツールが必要になる場合があります 例えば 特徴量を抽出して物体検出アルゴリズムの学習を行うためには 画像処理の専門知識が必要です データの種類によって必要な前処理の方法も異なります データに最も適したモデルを見つけるには時間がかかります 適切なモデルを選択するためには バランスを取る必要があります 柔軟性が高いモデルは データに過適合し ノイズの可能性がある些細な差異をモデル化してしまう傾向があります 一方で シンプルなモデルとすると 単純化の仮定が多くなり過ぎている可能性があります モデルの実行速度と精度と複雑さは 常にトレードオフの関係にあるのです 手強そうに聞こえますね でも 心配はいりません 試行錯誤が機械学習の核心であることを思い出しましょう もし ある方法やアルゴリズムが上手くいかなかったら 別の方法やアルゴリズムを試せばよいのです そして 体系的なワークフローを知っていれば スムーズなスタートを切ることができるでしょう 3
始める前に考慮すべき点 機械学習のワークフローは 必ず次の 3 つの点を明らかにするところから始まります どのような種類のデータを扱うのか そのデータから どのようなインサイトを導き出したいのか 導き出したインサイトを どこで どのように活用するのか 上記の点に基づいて 教師あり学習 教師なし学習のどちらを利用するのかを検討します 教師あり学習 機械学習 教師なし学習 予測 ( 例えば 温度や株価などの連続型変数の将来値の推定 ) や分類 ( 例えば ウェブ動画に映っている自動車の型式の特定 ) を行うモデルの学習が必要な場合は 教師あり学習を選択します 回帰 分類 入力データを詳しく調べる必要がある場合や データをクラスターに分けるなど データの適切な内部表現を見出すモデルの学習が必要な場合は 教師なし学習を選択します 4
ワークフローの概要 1. データにアクセスし 読み込む 4. ステップ 3 で抽出した特徴量を用いてモデルの学習を行う 2. データの前処理を行う 5. 最適なモデルが見つかるまで繰り返す 3. 前処理したデータから特徴量を抽出する 6. 最も上手く学習されたモデルをプロダクションシステムに組み込む 次のセクションでは 健康管理アプリを例に 各ステップをより詳しく説明します このワークフローは全て MATLAB 内で完結します 5
身体活動の分類を行うモデルのトレーニング 携帯電話の健康管理アプリを例にとって説明します 入力は 携帯電話の加速度計とジャイロスコープからの 3 軸センサーデータで構成されます 応答 ( 出力 ) は 歩く 立つ 走る 階段を上る 横になる などの活動です 入力データを用いて 上記のような活動を特定する分類モデルの学習を行う必要があります 目標が分類なので 教師あり学習を採用します 学習が済んだモデル ( 分類器 ) は 1 日を通してユーザーの活動レベルを追跡するアプリに組み込まれます 機械学習 6
1 ステップ 1: データを読み込む 加速度計とジャイロスコープからデータを読み込むために 以下を行います 1. 携帯電話を持って座ります 電話からのデータを記録し そのデータを 座る (Sitting) とラベルを付けたテキストファイルに保存します 2. 携帯電話を持って立ち上がります 電話からのデータを記録し そのデータを 立つ ( Standing) とラベルを付けた 2 番目のテキストファイルに保存します 3. 分類したい各活動のデータが全て保存できるまで 上記のステップを繰り返します ラベルの付いたデータセットを ひとつのテキストファイルに保存します テキスト形式や CSV などのフラットファイルフォーマットで保存すると その後の処理が容易になり データを簡単にインポートできます 機械学習アルゴリズムは ノイズと意味ある重要な情報とを区別できるほど賢くはありません 収集したデータを用いて学習を行う前に データにノイズがなく 完全であることを確かめる必要があります 7
2 ステップ 2: データの前処理を行う データを MATLAB にインポートし ラベルの付いたそれぞれのセットをプロットします データの前処理のために 以下を行います 1. 異常値 すなわち他のデータから離れた位置にあるデータポイントを探します 異常値を無視してよいのか あるいは その異常値はモデルが考慮すべき現象を表しているのかを見極めなければなりません ここに例として示したデータの場合は 異常値を無視しても問題ありません ( データの記録中に被験者が無意識に体を動かしてしまったために 異常値が現れたのです ) 2. 欠損値 ( 記録中に接続が切れたために失われたと思われるデータ ) を調べます 欠損値を全く無視しても構いませんが それではデータセットのサイズが小さくなってしまいます 代わりに 内挿を行ったり 他のサンプルの相当する部分のデータを使用したりして欠損値を推定して補うこともできます 活動追跡データの異常値 異常値が決定的に重要な情報となるアプリケーションもたくさんあります 例えば クレジットカード不正利用検出アプリでは 異常値はその顧客の通常の購買パターンから外れた購入であることを表しています 8
2 ステップ 2: データの前処理を行う ( 続き ) 3. 作成したアルゴリズムが 携帯電話の動きではなく 被験者の動きのみに着目できるように加速度計データから重力の効果を除きます そのためには 通常 双二次フィルターなどシンプルなハイパスフィルターを使用します 4. データを 2 つのデータセットに分けます データの一部をテスト用に保存します ( テスト用データセット ) 残り ( 学習用データセット ) はモデルの構築に使用します この方法はホールドアウト法と呼ばれる交差検証法の 1 つです モデル化のプロセスで使用しなかったデータを用いてモデルのテストを行うことで 未知のデータに対してどのような動作をするのかをチェックします 9
3 ステップ 3: 特徴量を抽出する 特徴量の抽出 ( 特徴量エンジニアリングまたは特徴抽出とも呼ばれる ) は 機械学習において最も重要な部分のひとつです この作業によって 生データを機械学習のアルゴリズムが利用できる情報へと変換します アクティビティトラッカー ( 活動量計 ) の場合は 加速度計データの周波数成分を捕捉した特徴量を抽出する必要があります これらの特徴量は アルゴリズムが 歩いている状態 ( 周波数が低い ) と 走っている状態 ( 周波数が高い ) とを区別する上で役立ちます 抽出した特徴量をまとめた新たな表を作成します 特徴選択を通じて 以下を行います 機械学習アルゴリズムの精度を向上させます 高次元データセットに対するモデルの性能を高めます モデルの解釈のしやすさを向上させます 過適合を防ぎます 10
3 ステップ 3: 特徴量を抽出する ( 続き ) 抽出できる特徴量は 想像力次第で変わります しかし データの種類によって一般的によく用いられる手法というものがあります データの種類特徴選択作業手法 センサーデータ 生のセンサーデータから信号特性を抽出し 高度な情報に変換 ピーク分析 - 高速フーリエ変換によって 卓越周波数を特定 パルスおよび遷移指標 - 立ち上がり時間 立ち下がり時間 整定時間などの信号特性を抽出 スペクトル測定 - 信号電力 帯域幅 平均周波数 中央周波数をプロット 画像 映像データ エッジ位置 分解能 色などの特徴を抽出 Bag of visual words-エッジ 角 ブロブなど 画像の局所的特徴のヒストグ ラムを作成 勾配方向ヒストグラム ( HOG)- 局所的な勾配の方向のヒストグラムを作成 最小固有値アルゴリズム - 画像の角の位置を検出 エッジ検出 - 輝度が急に変化するポイントを特定 トランザクションデータデータ内の情報を強化する抽出値を計算タイムスタンプ分解 - タイムスタンプを日 月などの成分に分解 合算値計算 - 特定の事象が起こった合計回数など 高度な特徴を算出 11
4 ステップ 4: モデルの構築 学習を行う モデルの構築にあたっては シンプルな方法から始めるのがいいでしょう その方が 実行時間が短く 解釈もより簡単になります 基本的な決定木から始めます モデルの性能を調べるために混同行列を作成します 混同行列は モデルが行った分類とステップ 1 で作成した実際のクラスラベルとを比較した表です 特徴 53<335.449 特徴 53>=335.449 座っている >99% 立っている 99% 特徴 3<2.50002 特徴 3>=2.50002 特徴 56<12686 特徴 56>=12686 特徴 11<0.45 特徴 11>=0.45 立っている座っている歩いている 真のクラス 歩いている走っている >99% 1% 93% 5% 踊っている 40% 59% 走っている 踊っている 座っている 立っている 歩いている 踊っている走っている 予測したクラス 混同行列から 作成したモデルでは踊っている状態と走っている状態の区別に問題があることが分かります このタイプのデータに対しては 決定木は上手く機能しないのかもしれません そこで 他のいくつかのアルゴリズムを試してみます 12
4 ステップ 4: モデルの構築 学習を行う ( 続き ) まず k 近傍法 ( KNN) を試してみます KNN はシンプルなアルゴリズムで 学習用データを全て読み込み 新たなポイントと学習用データとを比較し k 個の最近傍点の中で最も頻度が高いクラスを返します KNN による精度は 98% で それに対してシンプルな決定木の精度は 94.1% でした 混同行列も以下の通り改善しています しかし KNN は予測に全ての学習用データを使用するため 実行にかなりの量のメモリを必要とします 次に 線形判別モデルを試みましたが 結果は改善しませんでした 最後に複数クラスのサポートベクタ マシン (SVM) を試みました SVM では非常に良い結果が得られました 精度が 99% となったのです 座っている >99% 座っている >99% 立っている 1% 99% 1% 立っている >99% 真のクラス 歩いている 走っている 2% 98% 1% 97% 1% 真のクラス 歩いている 走っている >99% 98% 2% 踊っている 1% 1% 6% 92% 踊っている 3% 96% 座っている 立っている 歩いている 走っている 踊っている 座っている 立っている 歩いている 走っている 踊っている 予測したクラス 予測したクラス さまざまなアルゴリズムを試しながらモデル化を繰り返すことで 目標を達成することができました もし踊っている状態と走っている状態の区別について信頼性がまだ十分でない場合は さらにモデルを改善する方法を探します 13
5 ステップ 5: モデルを改善する モデルの改善には 単純化と複雑化の 2 つの異なる方向が考えられます 単純化 まず 特徴量の数を削減する可能性を検討します 特徴量の数を削減する一般的な方法としては 以下が挙げられます 相関行列 変数間の関係を明らかにすることで 相関がそれほど高くない変数 ( 特徴量 ) を削ることができます 主成分分析 (PCA) もともとの特徴量同士の重要な違いを捉え データセットから強力なパターンを引き出す特徴量の組み合わせを見つけ 冗長性を排除します 特徴量の逐次削減 モデルの性能に改善が見られなくなるまで 繰り返し特徴量を削減します 次に モデル自体を小さくしていく方法を検討します 次のような方法が挙げられます 優れたモデルには 最も予測力の高い特徴量しか含まれません 汎化性能の高いシンプルなモデルは 新しいデータに対して適応しない汎化性能の低い複雑なモデルよりも優れています 機械学習においては 他の多くのコンピュータ処理プロセスと同様に モデルの単純化によって 理解のしやすさや頑健性 処理効率が高まります 決定木の枝を剪定します アンサンブルの中の学習器を減らします 14
5 ステップ 5: モデルを改善する ( 続き ) 複雑化 過剰な汎化を行ってしまっているせいで 踊っている状態と走っている状態とをモデルが区別できない場合 モデルの微調整を行う方法を見つける必要があります そのためには 次のいずれかの方法が考えられます モデルを組み合わせて使用する 複数のシンプルなモデルを統合し より大きなモデルを作成します この場合 個々のシンプルなモデルのどれよりも適切にデータの傾向を表すことができるような大きなモデルとします データソースをさらに追加する ジャイロスコープデータと加速度計データの両方を使用します ジャイロスコープは活動中の携帯電話の向きを記録します このデータは それぞれの活動独特の特徴を示すことがあります 例えば 加速と回転のある特定の組み合わせは 走っている状態に特有のものである場合があります モデルの調整が済んだら 前処理段階で取り分けたテストデータを用いてモデルの性能を検証します モデルがテストデータに記録された活動を確実に分類できれば 携帯電話に組み込んで活動の追跡を行う準備が整ったことになります 15
参考資料 機械学習について さらに詳しく学んでみませんか? 機械学習の方法論 事例 ツールの詳細について 以下の資料もぜひご参照ください 見る MATLAB による機械学習の基礎 ~ 特徴抽出 分類器 交差検定 ~ 38:31 センサーデータ解析と機械学習 ~ 振動データからの異常検出 ~ 47:21 機械学習のための信号処理 51:37 読む 教師あり学習のワークフローとアルゴリズム MATLAB アナリティクスによるデータに基づいたインサイト : 電力負荷予測のケーススタディ 調べる 機械学習の MATLAB サンプルコード 分類学習器アプリによるデータ分類 ( 英語 ) 2016 The MathWorks, Inc. MATLAB and Simulink are registered trademarks of The MathWorks, Inc. See mathworks.com/trademarks for a list of additional trademarks. Other product or brand names may be trademarks or registered trademarks of their respective holders. 93078v00