データ解析や機械学習をしている方は、「次元の呪い」 という問題があることを聞いたことがあるかもしれません。「次元」という言葉があるように、分子記述子・合成条件・製造条件・プロセス条件・プロセス変数などの変数もしくは特徴量が多いときに生じる問題です。次元の呪いとは何か、については様々な記事で紹介されており、例えば 次元の呪い、あるいは「サクサクメロンパン問題」 の解説がわかりやすいです。
ここでは、データ解析や機械学習をやる上で、次元の呪いの何が問題なのかを解説します。この問題を一言で言えば、
余計な特徴量 x があることでサンプル間の類似度を適切に評価できなくなること
なのですが、丁寧に説明します。
そもそも回帰分析において特徴量 x と物性・活性・特性などの目的変数 y の間で数理モデル y = f(x) を構築するとき、大前提となっているのは、
2つのサンプル間で x の値が近いとき、y の値も近い
ということです。同じような x の値をもつサンプル同士は、y の値も同じような値をもたないといけません。x と y の関係が線形・非線形にかかわらず、「2つのサンプル間で x の値が近いとき、y の値も近い」 ことを満たしていないと、良好なモデルを構築できません。x の値が近いのに、y の値が離れているサンプルがあると、どちらかは外れ値となります (もちろん y の値に問題がある可能性だけでなく、x に問題がある可能性もあります)。
また、モデルの適用範囲 (Applicability Domain, AD) を設定する上で重要となるのは、サンプル間の x の値の近さです。
トレーニングデータにおけるサンプルの x の値と、予測したいサンプルの x の値が近ければ、本来のモデルの予測精度で y の値を予測できると考えられます。
回帰分析でも AD でも、「近さ」 が重要であることがわかりました。近さを言い換えると、「類似度」 です。これまで出てきたのは y の値の類似度と x の値の類似度です。y については、基本的に一つの変数であることが多いため類似度は単純です。例えば y の 2 つの値を引いて、その絶対値が小さければ近い (類似度が高い) ですし、大きければ近くない (類似度が低い) となります。
一方で、x は基本的に複数あるので、複数のすべての x を考慮してサンプル間の類似度を検討することになります。類似度としては色々ありますが、最も一般的なのはユークリッド距離に基づく類似度でしょう。二つのサンプル間でユークリッド距離は、各 x の値の差に基づきます。x ごとに x1, x2, x3, … とすると、ユークリッド距離は
(x1 の値の差)2 + (x2 の値の差)2 + (x3 の値の差)2 + ・・・
を計算し、最後に平方根を求めます。二つのサンプル間において、各 x の値の差が 0 に近ければ、ユークリッド距離の値は小さくなり、類似しています。ユークリッド距離が 0 に近いほど、類似度は高くなります。
以上を踏まえて、次元の呪いの問題について考えます。
例えば、人をサンプルとして、y を「人間の体積」、xを「身長」と「体重」とします。
今、A さん・A’ さん・Bさんがいます。A さんと A’ さんは y である体積が類似しており (二人とも大きくて)、A さんと B さんは y の値が離れている (B さんは小さい) とします。このとき、x である身長と体重から計算されるユークリッド距離は
(身長の値の差)2 + (体重の値の差)2
の平方根を求めて計算できます。A さんと A’ さんの身長と体重がそれぞれ似ていればユークリッド距離の値は小さくなり、A さんと B さんの身長と体重がそれぞれ離れていればユークリッド距離の値は大きくなり、y である体積における類似度との整合性も取れます。ユークリッド距離の値が小さい A さんと A’ さんの y の値は類似しており、ユークリッド距離の値が大きい A さんと B さんの y の値は離れています。ここまでは問題ありません。
今、x に「身長」や「体重」だけでなく、「右の視力」、「左の視力」、「右の聴力」、「左の聴力」、「血圧」、「LDLコレステロール」、「HDLコレステロール」も含まれるときを考えます。このとき、x から計算されるユークリッド距離は
(身長の値の差)2 + (体重の値の差)2 + (右の視力の値の差)2 + (左の視力の値の差)2 + (右の聴力の値の差)2 + (左の聴力の値の差)2 + (血圧の値の差)2 + (LDLコレステロールの値の差)2 + (HDLコレステロールの値の差)2
の平方根を求めて計算できます。A さんと A’ さんの身長と体重がそれぞれ似ていて (身長の値の差)2 + (体重の値の差)2 は小さく、A さんと B さんの身長と体重がそれぞれ離れていて (身長の値の差)2 + (体重の値の差)2 は大きかったとしても、それ以外の部分である
(右の視力の値の差)2 + (左の視力の値の差)2 + (右の聴力の値の差)2 + (左の聴力の値の差)2 + (血圧の値の差)2 + (LDLコレステロールの値の差)2 + (HDLコレステロールの値の差)2
によって、ユークリッド距離が変わってしまいます。例えば、A さんと B さんの視力・聴力が高く (二人は似ていて)、A’ さんの視力・聴力が低ければ、A さんと A’ さんのユークリッド距離の値と、A さんと B さんのユークリッド距離の値とが同じくらいになってしまいます。これは、x が近いにもかかわらず y である体積が離れており、問題です。
このように、余計な x があることで、サンプル間のユークリッド距離を適切に評価できなくなることが、次元の呪いの問題です。今回は x における類似度の例として、ユークリッド距離に基づく類似度で説明しましたが、ユークリッド距離と同様に x をすべて考慮した類似度であれば、同じように次元の呪いの問題があります。
次元の呪いの問題が
余計な x があることでサンプル間の類似度を適切に評価できなくなること
なので、解決方法としては、
余計な x を使用しないこと
になります。例えば回帰分析においては、y と関係のある重要な x のみ使用することです。上の例でいえば、「身長」や「体重」のみを x にすればよいのです。
一方で、余計な x を用いてなく重要な x だけしか用いていなければ、x の数は多くても OK です。重要な x のみによってユークリッド距離が
(重要な x1 の値の差)2 + (重要な x2 の値の差)2 + (重要な x3 の値の差)2 + ・・・
によって計算されますので、すべての重要な x で差が小さければユークリッド距離が小さくなり、重要な x の値の差が大きければその分だけユークリッド距離が大きくなるため問題ありません。もちろん x ごとに重みを考慮してもよいと思います。
重要な x だけ用いるため、x を低次元化したり特徴量選択したりすることが考えられます。
ここで大事なことは、ただ x の数を減らせばよいというわけではなく、y と関係のない余計な特徴量もしくは潜在変数を入れないということです。
ぜひ以上のことを念頭に入れてデータ解析・機械学習をすることで、モデルの予測精度が向上したり適切に AD を設定できたりすることになるでしょう。
以上です。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。