表示法--良好的特征特點
我們探索了將原始數據映射到合適特征矢量的方法,但這只是工作的一部分。現在,我們必須探索什麽樣的值才算這些特征矢量中良好的特征。
避免很是使用的離散特征值
良好的特征值應該在數據集中出現大約 5 次以上。這樣一來,模型就可以學習該特征值與標簽是如何關聯的。也就是說,大量離散值相同的樣本可讓模型有機會了解不同設置中的特征,從而判斷何時可以對標簽很好地做出預測。例如,house_type 特征可能包含大量樣本,其中它的值為 victorian:
house_type: victorian
相反,如果某個特征的值僅出現一次或者很少出現,則模型就無法根據該特征進行預測。例如,unique_house_id 就不適合作為特征,因為每個值只使用一次,模型無法從中學習任何規律:
unique_house_id: 8SK982ZZ1242Z
最好具有清晰明確的含義
每個特征對於項目中的任何人來說都應該具有清晰明確的含義。例如,下面的房齡適合作為特征,可立即識別為年齡:
house_age: 27
相反,對於下方特征值的含義,除了創建它的工程師,其他人恐怕辨識不出:
avoidedhouse_age: 851472000
在某些情況下,混亂的數據(而不是糟糕的工程選擇)會導致含義不清晰的值。例如,以下 user_age 的來源沒有檢查值恰當與否:
user_age: 277
不要將“神奇”的值與實際數據混為一談
良好的浮點特征不包含超出範圍的異常斷點或“神奇”的值。例如,假設一個特征具有 0 到 1 之間的浮點值。那麽,如下值是可以接受的:
quality_rating: 0.82
quality_rating: 0.37
不過,如果用戶沒有輸入 quality_rating,則數據集可能使用如下神奇值來表示不存在該值:
quality_rating: -1
為解決神奇值的問題,需將該特征轉換為兩個特征:
- 一個特征只存儲質量評分,不含神奇值。
- 一個特征存儲布爾值,表示是否提供了 quality_rating。為該布爾值特征指定一個名稱,例如 is_quality_rating_defined。
考慮上遊不穩定性
特征的定義不應隨時間發生變化。例如,下列值是有用的,因為城市名稱一般不會改變。(註意,我們仍然需要將“br/sao_paulo”這樣的字符串轉換為獨熱矢量。)
city_id: "br/sao_paulo"
但收集由其他模型推理的值會產生額外成本。可能值“219”目前代表聖保羅,但這種表示在未來運行其他模型時可能輕易發生變化:
inferred_city_cluster: "219"
引用:
表示 (Representation):良好特征的特點
表示法--良好的特征特點