機器學習之良好特徵的特點

Lois發表於2020-06-16

我們探索了將原始資料對映到合適特徵向量的方法, 但這只是工作的一部分.現在,我們必須探索什麼樣的值才算這些特徵向量的良好特徵.

避免很少使用的離散特徵值

良好的特徵值應該在資料集中出現大約 5 次以上.這樣一來, 模型就可以學習該特徵值與標籤是如何關聯的.也就是說, 大量離散值相同的樣本可讓模型有機會了解不同設定中的特徵, 從而判斷何時可以對標籤很好地做出預測.例如, house_type 特徵可能包含大量樣本, 其中它的值為 victorian :

house_type: victorian

相反, 如果某個特徵的值僅出現一次或很少出現, 則模型就無法根據該特徵進行預測.例如, unique_house_id 就不適合作為特徵, 因為每個值只使用一次, 模型無法從中學習任何規律:

unique_house_id: 8SK982ZZ12427

最好具有清晰明確的含義

每個特徵對於專案中的任何人來說都應該具有清晰明確的含義.例如, 下面的房齡適合作為特徵, 可立即識別是以年為單位的房齡:

house_age:27

相反, 對於下方特徵值的含義, 除了建立它的工程師, 其他人恐怕辨識不出來:

house_age : 851472000

在某些情況下, 混亂的資料 ( 而不是糟糕的工程選擇 ) 會導致含義不清晰的值.例如, 以下 user_age 的來源沒有檢查值恰當與否:

user_age: 277

實際資料內不要摻入特殊的值

良好的浮點特徵不包含超出範圍的異常斷點或特殊的值.例如, 假設一個特徵具有 0 到 1 之間的浮點值.例如, 假設一個特徵具有 0 到 1 之間的浮點值.那麼, 如下值是可以接受的:

quality_rating: 0.82
quality_rating: 0.37

不過, 如果使用者沒有輸入 quality_rating , 則資料集可能使用如下特殊值來表示不存在該值:

quality_rating: - 1

為解決特殊值的問題, 需將該特徵轉換為兩個特徵:
1.一個特徵只儲存質量評分, 不含特殊值.
2.一個特徵儲存布林值, 表示是否提供了 quality_rating .為該布林值特徵指定一個名稱, 例如 is_quality_rating_defined .

考慮上游不穩定性

特徵的定義不隨時間發生變化.例如, 下列值是有用的, 因為城市名稱一般不會改變. (注意, 我們仍然需要將“br/sao_paulo”這樣的字串轉換為獨熱向量.)

city_id: "br/sao_paulo"

但收集由其他模型推理的值會產生額外成本.可能值“219”目前代表聖保羅, 但這種表示在未來執行其他模型時可能輕易發生變化:

inferred_city_cluster: "219"
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Hacking

相關文章