機械学習

機械学習レシピ#3

More than 1 year has passed since last update.

https://www.youtube.com/watch?v=N9fDIAflCMY&index=5&list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal

分類器の質は供給する特徴量の良さに依る。

⇒良い特徴量を出すことが機械学習における重要な仕事のひとつ。

何が良い特徴量になるのか、どうやって分かるのか?

二項分類をしている場合、良い特徴量だと2つの異なるものを決定するのが簡単になる。

特徴量を考えるとき、世界には変異がたくさんあるので、個体数の異なる値に対しどうかと考える必要がある。

犬の犬種を区分けする分類器を書きたいとし、このときの特徴量が犬の身長(インチ)と目の色だとする。

グレイハウンドはラブラドールより高いとし、目の色は犬の犬種に関係しないとする。すなわち身長は役に立つが、目の色は役に立たない特徴量である。

$ pip install matplotlib

import numpy as np

import matplotlib.pyplot as plt

greyhounds = 500
labs = 500

#グレイハウンドの平均身長は28インチ、ラブラドールは24インチ。ばらつきがあるので正規分布でプラスマイナス4インチとする。
#np.random.randn(greyhounds)で標準正規分布を500個生成
grey_height = 28 + 4 * np.random.randn(greyhounds)
lab_height = 24 + 4 * np.random.randn(labs)

#ヒストグラムで可視化
plt.hist([grey_height,lab_height], stacked=True, color=['r','b'])
plt.show()

スクリーンショット 2016-10-17 22.17.54.png

これは個体数中に所定の身長の犬が何匹いるかを示す。

20インチの身長のものはラブラドール(青)の確率が高く、35インチのものはグレイハウンドの確率が高い。ただ25インチの場合、各種の犬の確率が近いので判断できない。

そのため、身長は有用な特徴量だが完璧ではない。そのため機械学習では複数の特徴量が必要になる。

どういう特徴量を使えばいいか把握するには”思考実験”をする。

自分が分類器だと思って、ラブラドールかグレイハウンドかを分かろうとすれば他にどんなことを知りたいか? 毛の長さ?足の速さ?体重?

いくつの特徴量を使うべきかは、目安として自分が問題を解くのにいくつ必要か考える。

例えば目の色は二通り(青と茶)だけで、それが犬種に依らない場合、大抵の値に対して分布は半々になる。そのため、この特徴量は犬の種類とは関係せず何も教えないので、学習データにこのような無用な特徴量を含めるのは分類器の精度の害になりえる。それは誤って有用に見える可能性があるからである。特に少量の学習データしかない場合はそうなる。

独立した特徴量であること。関連性の高い特徴量を学習データから除外すること。

例えば既にインチの情報はあるが、これにcmを追加しても既にあるので役に立たない。

インチでの身長とcmでの身長を分類器は同じだと理解できない。特徴量の重要性を二重カウントしてしまう。

特徴量を分かりやすくすること

例えば2つの異なる都市間で手紙を送ると何日かかるか予測するとき、

良い特徴量は都市間の距離(マイル)で

悪い特徴量は経度と緯度による都市の位置

理由は人間でも距離を見れば手紙が付くまでの期間を推量できるが、緯度・経度と時間の関係を分かることは難しく、学習データにもっと多くのデータが必要になる。

特徴量がどのくらい役に立つか測るために使える技術があり、どの組み合わせがよいかも分かる。これについては次回。