特徴量なしの分類 — 「類似度だけ」でデータを読み解く

「このタンパク質はどのクラスに属するか?」——でもタンパク質は文字列であり、数値ベクトルへの変換方法が自明ではない。 ペアごとの類似度(近接行列)さえあれば、SVMや最近傍法などの強力な分類器が使えることを示す。 文字列カーネルによるタンパク質分類と著者識別の実例を通じて、特徴量なき分類の可能性と限界を探る。

データを「数値の列」に変換できないとき

機械学習の多くの手法は、データが「特徴ベクトル」として表現されていることを前提にしています。 身長・体重・年齢…といった数値の列です。

でも、次のようなデータを考えてみてください。

タンパク質の配列。タンパク質はアミノ酸の「文字列」です。

IPTSALVKETLALLSTHRTLLIANETLRIPVPVHKNHQLCTEEIFQGIGTLESQTVQGGTV
ERLFKNLSLIKKYIDGQKKKCGERRRVNQFLDYLQEFLGVMNTEWI (長さ 110)
PHRRDLCSRSIWLARKIRSDLTALTESYVKHQGLWSELTEAERLQENLQAYRTFHVLLA
LLWGLKVLQELSQWTVRSIHDLRFISSHQTGIP (長さ 153)

2つのタンパク質は長さが違い、アミノ酸の組成も異なります。これを「何次元のベクトルに変換するか」という問い自体が難しい。

ここで発想を転換してみましょう。「特徴ベクトルを作る」のではなく、「2つのオブジェクトの間の類似度を直接計算する」という方向です。

抽象的なオブジェクト群から近接行列が生まれ、分類に使われる流れ
抽象オブジェクト → N×N近接行列 → 分類結果

N個のオブジェクトがあれば、すべてのペアの類似度を並べた N×N の近接行列(proximity matrix)が作れます。 そしてこの近接行列を内積として解釈すれば、SVMや最近傍法などの多くの分類器がそのまま使えるのです。

これが本章のコアアイデアです。「データを数値ベクトルに直す」という最初のステップを省略し、 オブジェクト間の「距離」や「類似度」だけから出発する——そんな世界を一緒に見ていきましょう。

文字列カーネル — タンパク質の類似度を数値化する

タンパク質の配列から「類似度」を定義する方法の一つが文字列カーネル(String Kernel)です。

アイデアはシンプルです:「共通する部分配列が多ければ多いほど、2つのタンパク質は似ている」

2つの配列が並んで、共通する部分配列を次々と発見していくアニメーション
スキャン枠が移動するたびに共通パターンを発見し、カウンターが増える

長さ $m$ のすべての部分配列について、各タンパク質でそれが何回登場するかを数えます。 例えば LQE という3文字の部分配列は、上の2つのタンパク質のどちらにも登場します。

形式的には、タンパク質 $x$ の特徴マップを次のように定義します:

$$\Phi_m(x) = \{\phi_a(x)\}_{a \in \mathcal{A}_m}$$

ここで $\mathcal{A}_m$ は長さ $m$ の全部分配列の集合、$\phi_a(x)$ は部分配列 $a$ が タンパク質 $x$ に何回登場するかを表す数です。

そして2つのタンパク質の類似度(カーネル)を次のように定義します:

$$K_m(x_1, x_2) = \langle \Phi_m(x_1), \Phi_m(x_2) \rangle$$

これが文字列カーネル $K_m$ です。 「共通する部分配列の個数の重み付き合計」がこの内積の正体です。

$m = 4$ の場合、アミノ酸の種類が20種なので可能な部分配列の数は$20^4 = 160{,}000$ 通り。 しかしこのカーネル行列は、160,000次元のベクトルを明示的に計算せずに、木構造を使って効率的に求められます

1,708個のタンパク質データにSVMを適用した結果、ROC曲線の面積(AUC)= 0.84 という高精度が得られました。 AUCは0から1の値をとり、1に近いほど分類精度が高いことを意味します。

内積だけで動く分類器たち

文字列カーネルのような N×N の内積行列(カーネル行列)があれば、SVMだけでなく様々な分類器が実装できます。

その理由は、距離が内積の組み合わせで表せるというシンプルな事実にあります。 これが鍵です。

距離と内積の幾何学的な関係を示すアニメーション
2点間の距離の二乗は、3つの内積の組み合わせに分解できる
$$\|x_i - x_{i'}\|^2 = \langle x_i, x_i \rangle + \langle x_{i'}, x_{i'} \rangle - 2\langle x_i, x_{i'} \rangle$$

つまり「内積さえ知っていれば、距離も求まる」。この関係を使うと、以下のような分類器が実装できます:

最近傍法(k-NN)

テスト点と各訓練データの距離を上の式で計算し、最も近いクラスに分類します。 個々の特徴ベクトルを知らなくても、カーネル行列さえあれば距離が計算できます。

最近重心法(Nearest Centroid)

テスト点 $x_0$ とクラス $k$ の 重心 $\bar{x}_k$ との距離も展開できます:

$$\|x_0 - \bar{x}_k\|^2 = \langle x_0, x_0 \rangle - \frac{2}{N_k} \sum_{g_i=k} \langle x_0, x_i \rangle + \frac{1}{N_k^2} \sum_{g_i=k} \sum_{g_{i'}=k} \langle x_i, x_{i'} \rangle$$

右辺の各項はすべてカーネル行列の要素です。個々の特徴ベクトルを知らなくても、 この式でテスト点と各クラス重心の距離が計算できます。

主成分分析(PCA)

カーネル行列 $\mathbf{K} = \mathbf{X}\mathbf{X}^T$ の固有値分解から 主成分を求めることもできます。

距離行列しかない場合でも

さらに、ペアワイズ距離しか分からない場合でも大丈夫です。 距離行列を中心化する操作(二重中心化)によって内積行列に変換できます。 各距離の二乗を $-1/2$ 倍したものを、行・列・全体の平均で調整するという計算です。

実例 — 3人の著者を「言葉」で識別する

ここで、少し遊び心のある実験を見てみましょう。

統計学者 Bradley Efron(BE)、Trevor Hastie(HT)、Jerome Friedman(JF)の3人が書いた論文アブストラクト、 各16本(計48本)を集めました。「この論文は誰が書いたか?」を機械学習で当てるのです。

各アブストラクトの特徴量は、ユニークな単語1,310個それぞれの登場回数。 これをBag of Words(単語の袋)表現と呼びます。p = 1,310、つまり1,310次元の高次元分類問題です。

5つの手法の誤差率を横棒グラフで比較
特徴量あり(黄)vs カーネルのみ(青)の誤差率比較。緑が最良、赤が最悪。

特徴ベクトル X を完全に使える手法と、カーネル行列だけを使う手法を比較した結果です:

手法CV誤差率
最近縮小重心法(特徴量あり)17%(最良)
SVM(カーネル)23%
最近重心法(カーネル)29%
1-最近傍法(カーネル)44%
最近メドイド法(カーネル)65%(最悪)

最近縮小重心法が最も精度が高いのは、 個々の単語を標準化(スケール調整)できるからです。 一方、カーネルのみを使う手法は全単語を「等しく扱う」ため、重要な単語と無関係な単語の区別ができません。

最近メドイドとは、クラスの「中心」として平均(重心)ではなく 実際のデータ点を使う手法です。しかし少数サンプルの高次元では、「最も平均的なデータ点」を見つけること自体が難しく、 精度が大幅に落ちました。

カーネルでできないこと — 限界を知る

著者識別の実験が示したように、カーネル(内積行列・距離行列)だけでは性能に限界があります。

カーネルは「情報の圧縮」です。 高次元の特徴量を1つの類似度スコアに集約する。その集約によって失われる情報があります。

特徴ベクトルあり vs カーネルのみの情報量の違い
特徴量あり(左):重要な変数を特定できる。カーネルのみ(右):情報が圧縮され個別評価不可。

変数の標準化ができない

各特徴量を個別にスケール調整することは、特徴値へのアクセスが必要です。 著者識別の実験で最近縮小重心法が際立っていたのも、この標準化の恩恵です。カーネルのみではこれができません。

個々の変数の貢献度が評価できない

どの単語が著者の識別に最も役立っているか? t検定やLassoによる変数選択は、各特徴値へのアクセスがなければできません。

信号とノイズを分けられない

関連変数と無関係変数の比率が小さい場合、カーネル法は全変数を等しく扱うため、 変数選択を行う手法よりも性能が劣りがちです。

まとめ

カーネル法はタンパク質のように「特徴ベクトルを明示的に作るのが難しい場面」で強力なツールです。 しかし、特徴量に直接アクセスできる場合には、その情報を活かした手法の方が良い結果を出すことも多い。

「特徴量なき分類」は強力なツールですが、万能ではありません。場面を見極めて使うことが大切です。

次章(18.6)では、高次元回帰における「監視型主成分」という手法を見ていきます。 応答変数との関係が強い方向だけを選ぶことで、次元削減と予測精度を両立させるアプローチです。