本当に標準偏差(分散)が0の説明変数(記述子・特徴量)を削除してよいのか?

シェアする

教師あり学習をするときの、データ解析のおおざっぱな流れとしては、

  1. データセットをトレーニングデータとテストデータに分ける
  2. トレーニングデータを用いて X と y との間でモデル y = f(X) を構築する (おもに回帰分析もしくはクラス分類)
  3. テストデータの X の値をモデルに入力して y の値を推定する

となります。

2. のモデル構築の前に、こちらにも書いたように、

データセットをそのまま解析してエラーになってしまう方へ、基本的なデータの前処理方法を紹介します!
データセットを読み込んだあとに、まずやったほうがよい基本的なデータの前処理についてです。 最低限、この前処理は行いましょう! とりあえず...

基本的に説明変数 (記述子・特徴量) をオートスケーリング (標準化) します。標準化は、各変数をその変数の平均で引いてから標準偏差で割る操作です。標準偏差で割ることから、標準偏差が 0 では割れないため、事前に標準偏差もしくは分散が 0 の変数を削除することになります。そのような変数の削除が、標準化を行うためには必要なわけです。

でも、標準偏差が 0 の変数を削除してしまって、その後、本当に問題は起こりませんか?

標準偏差が 0 ということは、すべてのサンプルで変数の値が同じ値ということです。その変数の情報量は 0 です。あってもなくても変わらないわけです。なので、回帰モデルやクラス分類モデルを構築するときには、変数を削除してしまって問題なさそうです。

しかし、モデルの適用範囲 (適用領域) Applicability Domain (AD) を考えるとき、少し話は異なってきます。AD の詳細についてはこちらをご覧ください。

モデルの適用範囲・モデルの適用領域 (Applicability Domain, AD) ~回帰モデル・クラス分類モデルを使うとき必須となる概念~
今回は、モデルの適用範囲・モデルの適用領域 (Applicability Domain, AD) についてです。AD は回帰モデル・クラス分...

AD はサンプル間の類似度に基づくものが多いです。たとえば、トレーニングデータのサンプルとテストデータのサンプルとの類似度が高いとき、そのテストサンプルは AD の中、逆に類似度が低いとき、AD の外、といった具合です。

今、類似度を (ユークリッド) 距離の逆数とします。距離が小さいとき、類似度が高くなりますね。ただ距離の逆数でない別の類似度を考えてもらっても全く問題ありません。とにかく、トレーニングサンプルとテストサンプルとの間で距離を計算するわけです。

今、説明変数が 100 あって、トレーニングデータにおいて標準偏差が 0 の変数が 30 あり、残った変数が 70 になったとしましょう。もちろんオートスケーリングした後に、70 変数で距離を計算することになります。

ここで大事なことは、標準偏差が 0 になったのはトレーニングデータの中だけであって、テストデータまで含めると、標準偏差が 0 になるとは限らないことです。言い換えると、ある変数についてトレーニングデータのサンプルの値がすべて 0 だったとしても、テストデータのサンプルの中に、値が 0 でないサンプルが存在する可能性があります。

トレーニングサンプルとテストサンプルとの間で距離を求めるとき、70 変数で計算したときと、100 変数で計算したときとで、異なります。そして、100 変数で計算したほうが、トレーニングサンプルと似ていないテストサンプルを、適切に AD 外と判定しやすくなります。トレーニングデータ内で値がすべて同じ変数について、テストサンプルにおいてその変数が異なる値をとると、その分 距離が大きくなるためです。トレーニングサンプルという ある限られたサンプルの中で決められた、少ない変数で規定される小さい空間 (部分空間・低次元空間) では似ていると判断されてしまうサンプルでも、他の変数も加えた高次元空間では、似ていない可能性もあります。そのような AD 外のサンプルを検出できないのは問題です。

このように、AD を考えるとき、トレーニングデータと似ていないテストサンプルを、適切に類似度は低いと判断するため、事前に説明変数を削除すべきでないことが分かります。このでは標準偏差が 0 の変数の話をしていますが、変数選択で選択された説明変数のみで回帰モデルやクラス分類モデルを構築するときも、AD について全く同じ問題が生じます。AD を考えるとき、選択される前のすべての説明変数を用いたほうがよいのです。すべての説明変数を用いて求める AD のことを、こちらの論文では universal AD と呼んでいます。

もちろん、削除前・選択前のすべての説明変数で類似度 (上の例では距離の逆数) を計算するのが、適切なやり方であるとは限りません。削除されたり選択されなかったりした、モデル構築に使われなかった変数と、モデル構築に使われた変数とは、別に扱うほうがよいかもしれません。たとえば、トレーニングデータで標準偏差が 0 になった変数については、テストサンプルでトレーニングデータと異なる値になったら、そのテストサンプルを問答無用に AD 外とする、といったことも考えられます。

AD を求めるとき、考えうるすべての説明変数を用いているか、について確認していただけたらと思います。

以上です。

質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。

シェアする

フォローする