特徴量エンジニアリング

特徴量エンジニアリングとは?

特徴量エンジニアリングとは、生のデータを機械学習で使用する特徴量に変換するプロセスです。信号や画像から特徴量を抽出するには、ドメインについての深い知識が必要であり、最適な特徴量を見つけることは根本的に反復的なプロセスであるため、自動化された方法を利用したとしても、特徴量エンジニアリングは容易ではありません。

特徴量エンジニアリングは、以下の 1 つ以上の手順で構成されます。

  1. 特徴量抽出。候補となる特徴量を生成します。
  2. 特徴量変換。特徴量をマッピングして、下流でのモデル作成に適したデータに変換します。
  3. 特徴選択。データをモデル化する際に優れた予測力をもたらすサブセットを特定しながら、モデルサイズを縮小し、予測を簡略化します。

たとえば、スポーツ統計には、出場試合数、1 試合あたりの平均出場時間、得点などの数値データがあり、これらはいずれも選手別に分類されます。ここで言う特徴抽出とは、たとえば、このような統計を、1 試合あたりの得点や、得点までの平均時間など、派生する数値に圧縮することを指します。この場合、特徴選択は、これらの比率だけでモデルを構築するのか、それとも元の統計がモデルのより正確な予測に役立つのか、という問題になります。

信号や画像データの特徴抽出を手動で行うには、信号や画像処理の知識が必要ですが、ウェーブレット変換などの自動化技術も非常に有効です。これらの技術は、信号データにディープラーニングを使用する場合にも有効です。これは、ディープニューラルネットワークでは生の信号データから構造を見つけることが容易ではないからです。従来、テキストデータから特徴量を抽出するには、テキストを bag of words (BoW) としてモデル化するという方法を使用していました。現在の手法では、ディープラーニングを使用して単語の文脈を符号化します。たとえば、広く利用されている単語埋め込み技術、word2vec などがあります。

特徴量の変換には、スケールが大きく異なる特徴量に対処する正規化などの一般的なデータ準備技術のほか、データを要約するための集計、ノイズを除去するためのフィルタリング、PCA や因子分析などの次元削減技術などがあります。

MATLAB® では、特徴選択の手法を数多くサポートしています。一部の手法は、重要度による特徴量のランク付けに基づいており、応答との相関のような基本的な方法ともいえます。機械学習モデルの中には、学習アルゴリズム中に特徴量の重要度を推定するもの (「埋め込み型」の特徴選択) もありますが、いわゆるフィルターベースの手法では、特徴量重要度のモデルを個別に推定します。ラッパー選択手法では、ある選択基準を使用して、候補特徴量の追加および削除を繰り返します。以下の図は、機械学習モデルに適した特徴量を見つけるうえでの、特徴量エンジニアリングのさまざまな側面を示しています。

特徴量エンジニアリングの基本的なワークフロー。

特徴量エンジニアリングの基本的なワークフロー。

ディープラーニングは、生の画像や信号データを入力として使用することで、特徴量エンジニアリングの手順を省略できるものとして知られるようになりました。これは大規模な画像や動画のデータセットには効果的ですが、小規模なデータセットや信号ベースの問題にディープラーニングを使用する場合、優れたパフォーマンスを得るには特徴量エンジニアリングが依然として不可欠です。

主なポイント

  • 特徴量エンジニアリングは、機械学習を適用する際に不可欠であると同時に、ディープラーニングを信号に適用する際にも使用されます。
  • ウェーブレット散乱を使用することで、信号や画像データから優れた特徴量を実現します。手動による特徴量抽出は不要です。
  • さらに、特徴量の変換や選択などの手順を行うことで、ハードウェアに制約のある環境での展開に適した、高精度でありながら小さな特徴量セットを作成できます。

MATLAB の関数 fscmrmr で実装されている Minimum Redundancy Maximum Relevance (MRMR) アルゴリズムを適用して特徴量をランク付けすると、この例に示されているように、実行時間を短縮しながら、分類に適した特徴量が得られます。重要度スコアの低下が大きい場合は、モデルに使用する特徴量のしきい値の判断が確実にできることを意味し、低下が小さい場合は、結果として得られるモデルの精度が大幅に低下するのを避けるために、多くの特徴量を追加する必要がある可能性があることを意味します。

MRMR は分類の問題にのみ適用

MRMR は、分類の問題にのみ適用されます。回帰には、近傍成分分析を使用することをお勧めします。MATLAB では関数 fsrnca を利用できます。

参考: 特徴抽出, 特徴選択, クラスター分析, Wavelet Toolbox