機械学習における前処理の効率化
第3章
MATLABアプリを使用した前処理
前章では、MATLAB コマンドとライブエディターを使用して一般的な前処理の手法を実行する方法について説明しました。MATLAB には、複雑なタスクを簡単に実行できるよう特別に設計されたアプリも用意されています。この章では、時系列データを処理する際や、データクリーニングにパラメトリック方程式を使用する際に、データの探索と前処理に特に役立つ 2 つのアプリをご紹介します。
信号アナライザー アプリによるデータの前処理
機械学習モデルをうまく学習させるには、時系列データを前処理し、意味のある特徴量を使う必要があります。これは実質上、信号データの次元を落として変動性を削除することに帰着します。
時系列データの前処理スクリプトを作成する際には、データセット全体を代表するようないくつかの信号から始めるのが良い方法です。信号アナライザー アプリ を使用すると、この作業を簡単に行うことができます。
- データの調査
- どの前処理のメソッドが適切かを判断する
- 全データセットに対して実行するスクリプトの作成または更新
時系列データの調査
データの理解は、可視化から始まります。信号アナライザーアプリは、複数の信号を一度に見てパターンを認識するだけでなく、時間、周波数、時間周波数領域の信号を同時に調査することができる便利なツールです。
Time時間
Frequency周波数
Time-Frequency時間-周波数
このアプリは、MATLAB ツールストリップの [アプリ] タブ内からアクセスするか、MATLABコマンド・ウィンドウでsignalAnalyzer
と入力することでアクセスできます。
注: 欠損データは、信号アナライザー アプリ内で使用される前に除去しておく必要があります。欠損データの処理については、次のセクションを参照してください。
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
を使用することで実行できます。
時系列データの平滑化
平滑化は、フィルタリングを使用して重要でないものを除外しながら、データのパターンを見つける点において便利です。平滑化の目的は、ノイズの多いデータ成分を取り除き、変化やトレンドをなだらかにし、見やすくすることです。
全データセットに対して実行するスクリプトの作成と更新
全データセットに適用したい前処理手法を知っている場合、 アナライザータブの関数の生成をクリックします。
これにより、適用したすべての前処理タスクのコードが1つの関数として生成され、MATLABスクリプトとして保存することができます。任意の大規模データセットの前処理は、関連するすべてのデータにその関数を反復的に適用することで、自動化できるようになりました。
MATLABで外れ値を除去するもう1つの方法は、曲線近似アプリを使用することです。データに含まれる基本的なプロセスがパラメトリックな方程式によってよく近似されているかもしれません。このような状況では、曲線近似を使用して方程式とデータ照らし合わせ、残差を調べることで外れ値を特定することができます。
先ほど使用した経験年数と年齢を尋ねる調査の例では、高い年齢層で、年齢データの欠損が多く見られました。年齢と経験が互いにプロットされている場合、移動平均で欠損データを埋めると仮定すると、線形近似が機能すると期待されるでしょう。これを確認するには、データがクリーンアップされた各変数の配列、つまり調査回答者の年齢の499x1のdouble型の配列と調査回答者の経験年数の499x1のdouble型の配列が必要となります。
MATLABツールストリップで曲線近似アプリを開くことから始めましょう。
他の近似手法を試すこともできます。データをどのようにプロットするかを決めたら、 ファイル > コードの生成 を選択して関数を作成し、前処理スクリプトに追加できます。
また、アプリを使用して、外れ値を選択して除外し、外れ値を除去することが近似モデルに与える効果を確認することもできます。
初期データのクリーニングが完了したら、データにアルゴリズムを試してみて、どのように実行されるかを確認してください。データにさらなる前処理が必要かどうかについて、迅速にフィードバックを得ることが重要です。
プロセスを繰り返す
機械学習アルゴリズムのためのデータのクリーニングは、反復的なプロセスです。データを探索して、どのテクニックが必要かを見つけ、それを実行し、アルゴリズムがどのように実行されるかを確認します。モデルの精度が悪い場合は、戻ってさらに前処理が必要かどうかを確認する必要があるかもしれません。
気象変動のコストを予測する例、もしくは前処理の手順を示すビデオをご覧の上、ご自身でも試してみてください。
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
アジア太平洋地域
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)