特徵工程的實用性:為什麼要基於現有特徵創建新特徵?
我經常看到人們根據機器學習問題的現有特徵創建新特徵。例如,這裡:https ://triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/人們認為一個人的家庭規模是一個新特徵,基於關於兄弟姐妹和父母的數量,這是現有的特徵。
但這有什麼意義呢?我不明白為什麼創建相關的新功能很有用。算法的工作不是自己做嗎?
用於說明這一點的最簡單示例是 XOR 問題(見下圖)。想像一下,給你的數據包含 $ x $ 和 $ y $ 協調和二元類預測。您可以期望您的機器學習算法自行找出正確的決策邊界,但如果您生成了附加特徵 $ z=xy $ ,那麼問題就變得微不足道了 $ z>0 $ 為您提供近乎完美的分類決策標準,而您只使用了簡單的算術!
因此,在許多情況下,您可以期望從算法中找到解決方案,或者通過特徵工程,您可以簡化問題。簡單的問題更容易和更快地解決,並且需要不太複雜的算法。簡單的算法通常更健壯,結果通常更易於解釋,它們更具可擴展性(更少的計算資源、訓練時間等)和可移植性。您可以在倫敦 PyData 會議上的 Vincent D. Warmerdam 精彩演講中找到更多示例和解釋。
此外,不要相信機器學習營銷人員告訴你的一切。在大多數情況下,算法不會“自行學習”。您通常只有有限的時間、資源、計算能力,而且數據通常大小有限且嘈雜,這些都無濟於事。
將這一點發揮到極致,您可以將數據作為實驗結果的手寫筆記照片提供,並將它們傳遞給複雜的神經網絡。它會首先學會識別圖片上的數據,然後學會理解它,並做出預測。為此,您需要一台功能強大的計算機和大量時間來訓練和調整模型,並且由於使用了複雜的神經網絡,因此需要大量數據。以計算機可讀格式(如數字表)提供數據,極大地簡化了問題,因為您不需要所有的字符識別。您可以將特徵工程視為下一步,您可以在其中轉換數據以創建有意義的功能,以便您的算法自行解決的問題更少。打個比方,就像你想讀一本書的外語,所以你需要先學習語言,而不是閱讀翻譯成你理解的語言的書。
在泰坦尼克號數據示例中,您的算法需要弄清楚對家庭成員求和是有意義的,以獲得“家庭規模”特徵(是的,我在這裡對其進行了個性化)。這對人類來說是一個明顯的特徵,但如果您將數據僅視為數字的一些列,則並不明顯。如果您不知道哪些列與其他列一起考慮時是有意義的,那麼算法可以通過嘗試這些列的每種可能組合來找出答案。當然,我們有聰明的方法來做到這一點,但如果立即將信息提供給算法,它仍然容易得多。