1. 程式人生 > >What makes a good feature

What makes a good feature

import numpy as np
import matplotlib.pyplot as plt

greyhounds = 500 # 灰獵犬500只
labs = 500 # 拉布拉多犬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()

img

從上圖中我們可以得到的資訊,首先在height低於20時,我們可以很高的概率預測這隻狗是拉布拉多犬,而在height高於35時,我們也能相當有信心的預測這隻狗是灰獵犬,但是當height位於這兩者之間時,兩種狗的概率很接近。因此height是一個有用的特徵但是並不完美。

所以在機器學習中,我們總是需要多種特徵,否則我們只需要寫if-else的規則而不是分類器。

Independent features are best

獨立的特徵給你不同型別的資訊,試想一下上面的例子,有兩個特徵,用釐米測定的height和用英寸測定的height。這兩個特徵是高度相關的。從訓練資料中刪除高度相關的特徵是一個很好的做法,因為很多分類器沒有足夠的智慧明白用釐米或英寸度量的身高是同樣的事情。因此分類器可能會重複計算height特徵的重要性。

Features should be easy to understand (simpler relationships are easier to learn)

舉一個例子,假如你把一封信從一個城市寄到另一個城市,預測需要多少天。兩個城市之間的距離越遠所需時間也就越長。一個有用的特徵是用英里表示兩個城市之間的距離,一個較差的特徵是用城市的經緯度去標示其位置。

reference

What makes a good feature? - machine learning recipes # 3

histogram_demo_multihist.py - 做EDA時可以參考的程式碼