前章では、データを多項式やスプラインで変換する方法を学びました。このセクションでは、その考え方をさらに一般化します。「生のデータ」をそのまま使うのではなく、「意味のある特徴」に変換してから学習させる——これがフィルタリングと特徴抽出の核心です。
ウェーブレット変換やニューラルネットワークなど、現代の機械学習で広く使われる手法の基盤となる考え方を見ていきましょう。
画像認識を考えてみましょう。
100×100ピクセルの画像があるとします。これは10,000個の数値(各ピクセルの明るさ)として表現できます。でも、この10,000個の数値をそのまま使って「猫かどうか」を判定するのは、効率が悪いと思いませんか?
人間が画像を見るとき、個々のピクセルを見ているわけではありません。「輪郭」「模様」「形」といった特徴を捉えています。
機械学習でも同じ発想が使えます。生のデータ $x$ をそのまま使うのではなく、意味のある特徴 $x^*$ に変換してから学習させる。これがフィルタリングの基本的なアイデアです。

フィルタリングを数学的に表現してみましょう。
例えば、5つの数値で表されるデータ $x$ があるとします。これを3つの新しい数値 $x^*$ に変換したい。最もシンプルな方法は、行列を使った変換です。
行列とは、数を長方形に並べたものです。ここでは $H$ という行列を使います。$H$ の各列は「どの入力をどれだけ重視するか」を表すパターン——つまりフィルターです。
例えば、画像処理でよく使われる「エッジ検出フィルター」は、隣り合うピクセルの差を強調します。明るい部分と暗い部分の境目(輪郭)を見つけるフィルターですね。

重要なのは、変換後の数値の個数は自由に決められるということです。
前章で学んだ多項式やスプラインも、実はこの「行列による変換」の一種です。
ここで、
しかし、行列を使った変換だけでは限界があります。
例えば、「この部分に角があるかどうか」「急激な変化があるかどうか」といった特徴は、単純な足し算とかけ算の組み合わせでは捉えにくいのです。そこで登場するのが非線形フィルタリングです。
一般的な形で書くと、変換関数 $g$ を使って $x^* = g(x)$ と表せます。
この $g$ はどんな関数でも良いのですが、実用上重要なのは以下の2つです:

特にニューラルネットワークは、どんな特徴が有用かをデータ自体から学習できる点で革命的でした。人間が「どんな特徴を使うか」を設計する必要がなくなったのです。
ここで、$g$ は非線形変換関数です。例として、ウェーブレット変換やニューラルネットワークなどがあります。
ウェーブレットという名前は「小さな波」を意味します。
信号を分析する古典的な方法に「フーリエ変換」があります。これは「信号全体を通じてどんな周波数が含まれるか」を調べる手法です。一方、ウェーブレット変換は「どの位置に、どんな変化があるか」を捉えます。
なぜこの違いが重要なのでしょうか?
画像を考えてみてください。猫の写真で重要なのは「滑らかな毛並み」ではなく、「目や耳の輪郭」——つまりエッジです。ウェーブレットは、こうした局所的な急激な変化(ジャンプやエッジ)を効率的に検出できます。

本書では、ウェーブレット変換でまず特徴を抽出し、その後ニューラルネットワークで分類するアプローチが紹介されています。2つの手法を組み合わせることで、お互いの長所を活かせるのです。
ここまで、データを自動的に変換する方法を見てきました。でも、忘れてはいけないことがあります。
ドメイン知識——つまり、その分野に特有の専門知識——は、依然として強力な武器です。
例えば、音声認識では、人間の聴覚特性に基づいて設計された特徴量が長年使われてきました。生の音声波形よりも、「人間が聞き分けやすい違い」を強調した表現の方が、機械にとっても学習しやすいのです。
医療画像診断では、放射線科医の知見を取り入れた前処理が精度を大きく向上させます。

ニューラルネットワークが「特徴を自動学習できる」とはいえ、良い特徴を与えれば学習はより効率的になります。データと向き合い、その構造を理解することの価値は、今も変わりません。
このセクションで学んだことを振り返りましょう。

フィルタリングと特徴抽出は、機械学習の「入り口」を担う重要なステップです。データが学習アルゴリズムに入る前に、適切な形に整えておく——これだけで、より少ないデータで、より高い精度を達成できるようになります。
次章では、「カーネル法」という少し魔法のようなテクニックを学びます。特徴を明示的に計算しなくても、高次元空間での類似度を効率よく求める方法です。