在機器學習的項目中,特徵是如何被找出來的?

在我所接觸過的特徵學習的項目中(學校,工作),特徵都是由人提取出來的。比如我們要預測天氣,那麼就直觀的去想像什麼因素可能與之後的天氣有關,濕度,溫度,是否有雲,etc.。

但是,這樣的提取特徵不僅僅需要很專業的知識,而且有些時候人的思維是有局限的,很難做到特徵的準確性,高覆蓋性。那麼在工業中,是否有演算法用來確定特徵,而非「手工特徵工程」。


深度學習。

特徵工程的意義是找一個更好的空間去重構表達,把原始的數據對象映射到這個空間去表達,更便於你的應用。比如分類應用,最好是找到線性可分的空間嘛。

不止是神經網路可以代替人工找特徵,理論上越是複雜的模型本身就是在代替人工找特徵,只不過複雜模型的有效訓練又成了難題。

深層神經網路(就是層數特別多)就是一種通用的複雜的模型,而深度學習很大程度上解決了它的訓練問題。

當你用一個N層的網路去學習人臉分類時,看上圖最左邊,最下面的就是接近輸入端的層學到的特徵,長相是不是很像Gabor濾波~~這部分的表達粒度比較小,主要是邊緣信息。看中間的圖片,眼睛、耳朵之類的部件。再上面就組成了人臉了。這就是網路的不同層學到的不同的特徵表達。

在機器學的特徵面前,人工特徵是不是弱爆了?

以前做模式識別,特徵方面正是題主所說那樣,既要積累專業領域的知識又要消耗大量時間去嘗試,而且對工作人員來說也是有一定的智力門檻的,所以那會兒做模式識別的成本高。現在有了深度學習,扔給機器跑幾天基本上就趕上了以前人工花幾個月甚至幾年的工作成果,而且門檻上更低了,調參黨生活滋潤得不要不要的。

深度學習是不是完爆人工?是不是沒有人工特徵存在的必要了?

我認為不是,起碼現階段還遠沒到人工特徵完全沒必要存在的程度。

這個跟應用場景有很大的關係。

像語音、圖像這些,原始特徵空間與目標應用所需的良好表達空間,有著遙遠距離的情況下,深度學習無與爭鋒。

而很多相對簡單的應用並不必要去用深度學習,稍微使用一下我們的洞察力就找到了非常有效的特徵,配上簡單的模型(比如LR)就解決了問題。開發、部署的成本更低,運行成本也低(模型簡單),用戶體驗更好(比如網上應用的延時更小)。尤其是一些追求解釋性的場景,更加是傾向於人工特徵。


補充一下找出預測性更好的特徵的具體方法。

某種意義上說特徵是機器學習的核心,線性可分的特徵空間只需要最簡單的感知機就夠了,而複雜的演算法有可以看做是特徵提取的過程,包括————核技巧、集成學習、降維和深度學習等。

下面進入正題:

  • 依據先驗經驗人工挑選。如題目描述中的天氣預測問題,可以預先確定濕度、溫度、是否有雲、風向、風速、近幾日天氣狀況等明顯較為相關的特徵。

  • 線性特徵選擇。假設特徵之間相互獨立,不存在交互,那麼可以使用卡方檢驗、信息增益、互信息等方法逐個檢驗特徵與結果之間的相關程度。更為簡便的方法是使用LR等線性模型,先做一次預訓練,根據特徵對應的線性模型權值的絕對值大小來對特徵的重要程度進行排序。
  • 非線性特徵選擇。如果考慮特徵之間的交互,可以使用隨機森林來進行特徵選擇,具體方法不贅述,概括來說就是將想要檢驗重要性的特徵在樣本上進行permutation,然後觀察OOB錯誤的上升程度,上升越大,說明這個特徵越重要。
  • 自動特徵提取。如第一段所述,核技巧、集成學習、深度學習等較為複雜的演算法都可以看做是特徵提取的過程,雖然簡單省力,但是模型的解釋性也會下降,尤其像深度學習這種黑盒子。


其實你可以任意yy一個特徵,然後看一下他是不是indicative,足夠好就留下

我不能評論 所以只能加答案

這麼說把,大部分的特徵工程都是我說的這樣做的,工業推廣中非常通用,特徵不需要有什麼覆蓋率,只需要work就可以,正確率是通過測試保障的,各種validation就可以了。


現今最熱的CNN的特徵就不是人工的


特徵工程的目標就是對特徵優劣的評價了。高贊回答們說的夠多。

不過我想題主除了想問從現有的特徵中篩選和組合更好的特徵以及提取更高的特徵外,應該還想問確定了任務或目標後,應該選擇什麼樣的特徵作為輸入吧?比如提出一個我想預測未來天氣,除了一股腦把所有能想到的因素都利用特徵工程篩選一遍外,有沒有什麼能從任務反向生成指導特徵選取的規則和標準?

目前的主要方法還是靠的專業領域的先驗知識選擇,也可以盲目選擇相關信息後通過相關係數、資訊理論等方法簡單過濾。

個人覺得遷移學習可以算是一個答案吧,如果相似任務有了現有的模型,可以通過遷移學習尋找特徵。

還是想反對一下特徵不需要覆蓋率的言論,大概工業、工程上從效率無需糾結,但是對覆蓋率的研究還是有價值的。

希望有大佬能從這方面補全答案,或者哪天我能來補全吧。


1. 人工:根據業務知識人工建立feature

2. 自動:在1的基礎上自動生成新的feature, 用kernel trick或神經網路自動生成。如果是推薦,利用矩陣分解也可以生成特徵,cf based on latent factor,facebook有篇論文用gbdt的結果送進lr,也可看成是自動學習特徵。

人工特徵容易解釋,自動生成的特徵很難解釋。

自動生成特徵,模型訓練,預測都變複雜,計算成本高,帶來的好處是模型效果會提升。

對於圖片語音,適合自動,本身包含了完整的信息,而其他比如用戶行為數據,目前是少不了人工的過程的。

如果哪一天硬體夠牛,可能人工工程就不需要了,我等就要換個地方挖坑謀生了。


從梯度提升決策樹的角度研究特徵組合,分析哪些特徵組合有用,目前只是一個思路,正在研究中,我認為這個方法可行!


構造特徵確實要深入了解問題(業務),舉個栗子,假設你正在做一個房價預估模型,你自己經過思考並列舉許多特徵,如面積,層高,朝向等,然後對其中某些特徵做了離散化,對id類特徵做了embeding,嘗試了簡單模型lr和複雜模型gbdt,dnn等,假設最後發現還是underfiting,為什麼呢,很多時候因為對問題的認識不夠,誰對這個問題最了解,中介!然後你請教了中介同學,發現小區歷史成交,區域等也很重要,把這些特徵加入模型,指標狂漲,達到人生巔峰

都說做特徵更像是藝術而不是技術,通過對業務了解,換位思考,數據分析,挖掘有效特徵,其實特別有意思,是一個演算法工程師的硬實力


特徵學習一般是要找到針對目標的特徵,而這些特徵一般都是比較高級的特徵,如同CNN訓練得到的特徵一樣,先從低級特徵(邊緣等)開始,組合到高級特徵(眼睛、鼻子等)。

如果數據量比較小,不足以使用CNN,或者有比較專業的知識,對目標有很深的理解,也可以自行設計特徵,比如什麼因素和天氣有關,濕度、溫度用什麼特徵更好些,以及如何把這些特徵組合成與天氣有關的高級特徵。

特徵確實也有局限性,所以需要調參,防止訓練數據的過擬合。


啟發式規則,我瞎說的。


推薦閱讀:

像微博這種短文本的分析,用什麼方法提取特徵比較好呢?
有哪些利用高維空間及特性解決低維空間的問題的方法和例子?

TAG:數據挖掘 | 機器學習 | 特徵提取 |