Twitterで面白そうな記事が流れてきたので、理論的な話の解説をしようと思います。pythonコードは元記事にあるので、そっちを使ってみてください。
面白そうな記事はこれです。無料で読める記事は3記事までらしいので、無料で読みたい記事が既にある人はリンクを踏まない方が良いかもしれません。

紹介した記事の概要
上で挙げた記事には、大体、次のようなことが書いてあります。
機械学習において、特徴量選択には主に3種類の手法があるようです。
- Filter methods
- Embeddeb methods
- Wrapepr methods
上の記事では、1.Filter methods の手法3種類と、メリット、デメリットを紹介しています。Filter methodsは、基本的に統計学の知識を使う手法で、どんな機械学習手法に対しても適用する事が出来ます。1具体的には、4種類の手法が紹介されています。
- ANOVA F-Value(分散分析)
- Variance Threshold
- Mutual information(相互情報量)
- Scikit-learn’s SelectKBest
手法の解説が一言ずつされていて、後はsklearn を使うとこんな感じに出来るよ、メリットデメリットはこんな感じだよ、という記事になっています。
最後の手法以外に対して、少し真面目な解説をするのが、この記事の趣旨です
ANOVA F-Value(分散分析のF値)
ANOVAやF値については、既に解説記事を書いているので、そちらを読んでください。
大筋としては、回帰分析を行って、特徴量に対応する回帰係数をまずは計算します。
次に、注目する特徴量の回帰係数が0だと仮定してF検定を行い、その特徴量が意味を持つか調べるという感じです。
勿論、特徴量の2乗以上の項や、交互作用項は、モデルに組み込んでやらないと調べらませんし、それらの特徴量と、答えの線形の関係を仮定した時の話なので、注意が必要です。
Variance Threshold
Variance Thresholdについて解説します。
この手法は聞いたことが無かったのですが、単純に、特徴量自身の分散と自分で決めた閾値を比べて、閾値より分散が小さかったら特徴量を捨てる、という手法です。2
真面目に考えると、次のように考える事が出来ます。
特徴量
2値を取る確率分布として、ベルヌーイ分布が良く使われます。
ただし、
これを使うと、9割が1[だけの特徴量3を捨てたいと思ったら、分散が
これはデータの取り方によって分散が小さく見えるだけ、とかがあるので注意が必要です。分散=0となっているデータだけ捨てる、とかが安全な使い方です。
Mutual information(相互情報量)
相互情報量は、ベイズ風の統計を勉強すると見たことがあるかもしれません。簡単に言うと、確率変数
答え
確率変数
全ての特徴量に対して計算を行い、0に近い順に何個かの特徴量を捨てる、といった使い方が出来ます。
相互情報量は、確率変数として独立かどうかを調べる量なので、持っているデータが偏っていない限りは信用できる量になっています。
まとめ
- 面白そうな記事を紹介した
- 分散分析のF値を紹介した
- Variance Thresholdを紹介した
- 相互情報量を紹介した
- データ自身に統計の手法を適用するので、そうなります。
- 全く動きが無い特徴量は勿論答えに対して何も意味を持たないので、捨てましょう、という感じです
- 勿論0だけでも同じ
- 詳しい原理や計算などは解説の記事があるので読んでみてください。エントロピーからKLダイバージェンスを理解する