Ebook

第3章

MATLABアプリを使用した前処理


前章では、MATLAB コマンドとライブエディターを使用して一般的な前処理の手法を実行する方法について説明しました。MATLAB には、複雑なタスクを簡単に実行できるよう特別に設計されたアプリも用意されています。この章では、時系列データを処理する際や、データクリーニングにパラメトリック方程式を使用する際に、データの探索と前処理に特に役立つ 2 つのアプリをご紹介します。

section

信号アナライザー アプリによるデータの前処理

機械学習モデルをうまく学習させるには、時系列データを前処理し、意味のある特徴量を使う必要があります。これは実質上、信号データの次元を落として変動性を削除することに帰着します。

時系列データの前処理スクリプトを作成する際には、データセット全体を代表するようないくつかの信号から始めるのが良い方法です。信号アナライザー アプリ を使用すると、この作業を簡単に行うことができます。

  • データの調査
  • どの前処理のメソッドが適切かを判断する
  • 全データセットに対して実行するスクリプトの作成または更新

時系列データの調査

データの理解は、可視化から始まります。信号アナライザーアプリは、複数の信号を一度に見てパターンを認識するだけでなく、時間、周波数、時間周波数領域の信号を同時に調査することができる便利なツールです。

このアプリは、MATLAB ツールストリップの [アプリ] タブ内からアクセスするか、MATLABコマンド・ウィンドウでsignalAnalyzer と入力することでアクセスできます。

注: 欠損データは、信号アナライザー アプリ内で使用される前に除去しておく必要があります。欠損データの処理については、次のセクションを参照してください。

ここに、1 つの信号が 3 回コピーされたものがあります。各コピーはハイパス、バンドパス、ローパスフィルタのいずれかで前処理されています。元の信号のスペクトログラムと一緒に、それぞれの処理された信号が時間と周波数領域でどのように見えるかを見ることができます。

信号アナライザー アプリで作業する場合は、まず欠損データを除去する必要があります。さらに、信号アナライザー アプリは、timetable中のデータを期間として見ており、現在のdatetime型のデータはduration型に変換されます。

datetime 配列として保存された時間値を持つtimetableを解析するには、最初の要素を他のすべての要素から差し引くことで、配列を相対的なduration配列に変換します。次の例では、datetime 行の時間を持つ timetable を作成し、それを 信号アナライザーで読み込める timetable に変換しています。

Tt = timetable(datetime(2016,11,9,2,30,1:10)',randn(10,1));
dt = tt.Time-tt.Time(1);
tn = timetable(dt,tt.Var1);

サンプルを試す:

適切な前処理技術と方法を見極める

データを調査することで、どのような前処理技術を適用すればよいのか把握できます。元信号を残しておく習慣をつけておけば、前処理作業が信号にどのような影響を与えたかを都度確認できます。

ここでは、2つの前処理タスクを紹介します。

  • 均一なデータを作成するためのリサンプリング、一般的にはデータクリーニングの初期に実行されます。
  • リサンプリング後に実行される、データのパターンを見つけるための平滑化

時系列データは常に一様にサンプリングされるわけではありません。センサーが異なる間隔で信号を記録したり、イベントによってトリガーされた場合にのみ記録することがあります。このような場合、サンプルレートは大きく変動する可能性があります。他のケースでは、定期的にサンプリングされた複数の信号を扱う場合があり、それぞれが異なるサンプルレートを使用します。特定の状況いかんに関わらず、データを一様にサンプリングされた信号にリサンプリングすることで、後続のタスクが格段に楽になります。

一様にサンプリングされた信号では、多くの信号処理アルゴリズムを適用することができます。

  • 特徴を抽出して、さまざまな機械学習アルゴリズムにデータを利用することができます。
  • 信号データをスペクトログラムやウェーブレット変換などの時間周波数マップに変換して可視化したり、2Dデータ表現で動作するモデルとして使用することができます。
  • 関心のある(またはない)領域を特定することができます。

信号のリサンプリングは、信号アナライザー アプリで簡単に行うことができます。 ワークスペース・ブラウザ から使用するデータを 信号テーブルもしくはディスプレイ にドラッグします。信号を右クリックし、時間値を定義して、選択した信号のサンプル・レート、サンプル時間、または時間値ベクトルを記述します。

ここで紹介する単純な例は、6 週間にわたって 1 日 1 回サンプリングされた不均一データを使用しています。この例の詳細はこちらを参照ください。

[アナライザー] タブで [前処理] ギャラリーを展開し、[リサンプリング] アイコンをクリックします。信号アナライザー は、Signal Processing Toolbox™ の resample を使用することで実行できます。

Anazlyzer menu

データが一様にサンプリングされていない場合は、アプリを使用して一様なグリッドに補間し、補間方法(線形、形状維持区分的 3 次内挿、または3 次スプライン内挿)とサンプル・レートを指定します。

他の補間方法やリサンプル設定がどのように実行されるかを確認したい場合は、[前処理を元に戻す]をクリックして、信号を再度リサンプルしてください。

一様にサンプリングされた信号の場合、アプリを使用してサンプルレートを変更することができます。希望するサンプルレート、または信号を補間または間引きする係数のいずれかを指定することができます。

平滑化は、フィルタリングを使用して重要でないものを除外しながら、データのパターンを見つける点において便利です。平滑化の目的は、ノイズの多いデータ成分を取り除き、変化やトレンドをなだらかにし、見やすくすることです。

例えば1ヶ月間、1時間ごとに撮影された摂氏温度の測定値のセットがあるとしましょう。.

移動平均フィルターとリサンプリングを使用して、1時間ごとの温度測定における1日の周期成分の影響の分離や、開ループ電圧測定による不要なノイズを除去することができます。

測定時間が気温の測定値に与える影響が確認できます。1ヶ月間における毎日の気温の変化に関心がある場合、1時間ごとの変動はノイズとなるだけなので、日ごとの変動を識別することが困難になります。信号アナライザー アプリの 前処理 セクションから平滑化機能を選択すると、測定時間の影響を非常に簡単に取り除くことができます。

平滑化手法は8種類から選択できます。

デフォルト設定の移動平均がどのような影響を与えるかが可視化されます。

これをプログラムで実行する方法については、信号の平滑化の例を参照してください。

smoothed termperature readings

全データセットに対して実行するスクリプトの作成と更新

全データセットに適用したい前処理手法を知っている場合、 アナライザータブの関数の生成をクリックします。

MATLAB toolstrip

これにより、適用したすべての前処理タスクのコードが1つの関数として生成され、MATLABスクリプトとして保存することができます。任意の大規模データセットの前処理は、関連するすべてのデータにその関数を反復的に適用することで、自動化できるようになりました。

MATLAB example
section

曲線近似アプリ

MATLABで外れ値を除去するもう1つの方法は、曲線近似アプリを使用することです。データに含まれる基本的なプロセスがパラメトリックな方程式によってよく近似されているかもしれません。このような状況では、曲線近似を使用して方程式とデータ照らし合わせ、残差を調べることで外れ値を特定することができます。

先ほど使用した経験年数と年齢を尋ねる調査の例では、高い年齢層で、年齢データの欠損が多く見られました。年齢と経験が互いにプロットされている場合、移動平均で欠損データを埋めると仮定すると、線形近似が機能すると期待されるでしょう。これを確認するには、データがクリーンアップされた各変数の配列、つまり調査回答者の年齢の499x1のdouble型の配列と調査回答者の経験年数の499x1のdouble型の配列が必要となります。

MATLABツールストリップで曲線近似アプリを開くことから始めましょう。

Curve fitting on the tool strip

ユーザーインターフェイスが別ウィンドウで開きます。左上に、プロットしたいものを選択するためのドロップダウン・メニューがあります。ワークスペースに何があるかによって、ここで利用できる変数が決まります

中央上部のドロップダウン・メニューでは、曲線をデータに近似させるための一連の方法を提供しています。この例では線形近似が機能します。表示の下には、残差をプロットするオプションがあり、2つ目のプロットが表示されます。若い年齢ほど経験年数のばらつきが少なく、20歳の人が15年の経験を持つことは難しいでしょう。逆に、年齢が上がるにつれて、近似から大きく異なる傾向にあります。

他の近似手法を試すこともできます。データをどのようにプロットするかを決めたら、 ファイル > コードの生成 を選択して関数を作成し、前処理スクリプトに追加できます。

また、アプリを使用して、外れ値を選択して除外し、外れ値を除去することが近似モデルに与える効果を確認することもできます。

コード生成

初期データのクリーニングが完了したら、データにアルゴリズムを試してみて、どのように実行されるかを確認してください。データにさらなる前処理が必要かどうかについて、迅速にフィードバックを得ることが重要です。

プロセスを繰り返す

機械学習アルゴリズムのためのデータのクリーニングは、反復的なプロセスです。データを探索して、どのテクニックが必要かを見つけ、それを実行し、アルゴリズムがどのように実行されるかを確認します。モデルの精度が悪い場合は、戻ってさらに前処理が必要かどうかを確認する必要があるかもしれません。

気象変動のコストを予測する例、もしくは前処理の手順を示すビデオをご覧の上、ご自身でも試してみてください。