可能是全网写特征工程最通透的...
特征工程到底是什么?今天是包大人出租車原創日更,因為正在出差去機場的路上...
前言
現在這個知乎上的回答,包大人那個還是處于排序第一的位置,在知乎上有158萬 瀏覽, 2K+贊, 6K+收藏,2專業認可。
這在一個專業的問題上,這個數據其實還是不容易的。類比知乎上的一個問題,是明白了什么讓你編程水平突飛猛進的。從我個人來講的話,理解了特征工程的精髓,讓我機器學習水平突飛猛進。今天舊瓶裝新酒,再重答一下,用最白話的講最深刻的道理。
從一道題講起
當時很多回答的毛病在于側重于"術",而忽略了"道"。講了很多非常細節的操作方法,甚至把特征工程狹義理解成了數據的變換方法。
這里毛病很大的。
上來先出一道題目。
題目:請使用一個邏輯回歸的模型,建模一個身材分類器,身材分偏胖和偏瘦兩種,輸入的特征有身高和體重。
這時候你發現,這個問題不是那么好“線性“解決的,線性解決的意思就是我拍兩個系數加權,使用 sigmoid(ax+by+c)就搞定了。
事實上,我們很難單純地從身高和體重決策出一個人的身材,你說姚明體重280斤,他真的一定就胖嗎??別忘了他身高有226公分的。
這組數據可能超出了你的認知,只看數據不看照片,一下子不好說他是胖還是瘦。(其實挺胖的哈哈)
嗯,這個你看到那組數據,不好一下子說出來的感覺,就是機器學習里面非常關鍵的概念,“非線性”。
那么我們怎么解答這個問題呢?
方法有兩個:
1.升級模型,把線性的邏輯回歸加上kernel來增加非線性的能力。我們使用這個模型 ?sigmoid(ax+by+kx*y^(-2)+c),這個模型通過多項式核方法的升級,解決了低維空間線性模型不太好解決的問題。
2.特征工程,掏出體檢報告上的BMI指數,BMI=體重/(身高^2)。這樣,通過BMI指數,就能非常顯然地幫助我們,刻畫一個人身材如何。甚至,你可以拋棄原始的體重和身高數據。
好了,現在你大概對特征工程有點眉目了。
方式一在理論上對應的東西就是提升VC維,方式二就是讓你dirty hand的特征工程。
在機器學習流程中的視角
我們再回頭講一下這個東西的重要性,特征工程是機器學習,甚至是深度學習中最為重要的一部分,也是課本上最不愿意講的一部分,特征工程往往是打開數據密碼的鑰匙,是數據科學中最有創造力的一部分。因為往往和具體的數據相結合,很難優雅地系統地講好。所以課本上會講一下理論知識比較扎實的歸一化,降維等部分,而忽略一些很dirty hand的特征工程技巧,和case by case的數據理解。
不妨我們再講透一點,下面是一個經典的特征機器學習流程,輸入的原始數據經過一步clean and transformer轉化為建模的特征輸入,最終得到模型。
建模就是從數據中學習到insights(洞見)過程,這個過程其實是很曲折的,他要經過數據的表達,模型的學習兩步。
數據的表達就是原始數據經過clean and transformer得到features的過程,即為特征工程。
還是以具體的例子來講。
我們回到剛才的身材分類器的例子上,在方式一我們使用了核方法給邏輯回歸升維,方式二使用了特征方法。
要知道天下沒有免費的午餐,在你使用核方法升維的時候,實際很難精煉出恰好是x*y^(-2)這樣的多項式表達,你肯定是一股腦地把x*y,x^2*y, x*y^2 這些項都扔進去了。
這么暴力的操作,有兩個問題,一是共線性,二是噪聲。
第一、共線性的意思是幾個項表達的含義是趨同的,保持了很強的線性關系,對于邏輯回歸是致命的問題,因為他帶來了權重的不穩定,要知道邏輯回歸權重可是暗示了特征重要性的。
(要是你對這段話,不好理解的話,仔細學習下邏輯回歸模型和共線性的理論,此處不單獨展開)
第二、噪聲讓你的分類器學習到了一些不好的東西,對你的決策沒有產生泛化的貢獻,反而帶跑偏你的模型,學習到了一些不是知識的邊邊角角。
特征工程類似于煉丹術士的精煉過程。
他的作用就是把人的知識融入到數據表達中,減輕模型的負擔,讓模型更容易學習到本質的知識。
從NN與GBDT討論的視角
之間寫過一篇文章,為什么GBDT可以超越深度學習,有讀者說我是標題黨,我結合這篇推文,繼續把他翻出來。
那篇文檔里有個很重要的觀點是這張圖。
這個圖表達意思是,在人的認知可解的時候,乃至超越數據的非線性,就是y>x那根斜對角線的上方,是GBDT可以超越神經網絡的時候。
人的認知可解,對應著就是特征工程的難度和可行性。
還是不好理解,看下面這樣一個具體的例子。
如果你對speech稍有了解,或者做過說話人驗證/聲紋識別(SVR)任務,你會知道,有一種特征工程叫做MFCC 特征,現在解決說話人本身特性的問題,前端還是無法離開MFCC,而我認為MFCC是一種非常有代表性的飽含了專家知識的特征工程,感興趣的同學可以了解一下相關的知識。
如果你有了MFCC這樣的工具,你用不太復雜的淺層NN(TDNN),都能取得超越輸入原始語音采樣序列,放到復雜transformer中的效果。
另外,在某些類型的數據上,特種工程很難施展拳腳,類似于id序列,典型的任務如NLP,CTR等。
NLP是人類知識凝練的字節單元,CTR是大規模的稀疏id序列,這兩種數據上,雖然人的認知是到位了,但是不可解。特征工程施展不開。
而特征工程最能施展拳腳的地方就是工業界的異質表格(Tabulr)數據,同質數據是各列數據的單元要素接近,如文本對應字符,圖片對應像素,語音對應語音frame。
這個結論在Yandex團隊2021年論文 《Revisiting Deep Learning Models for Tabular Data》里印證了。這也是為什么早些年一票Kaggle比賽,清一色的XGB和LGB屠榜。
一言以蔽之的話,就是我之前文章的配圖,好風憑借力,助我上青云。(寫著寫著怎么越來越像炒冷飯)
好風:在知識學習上恰當的模型。既不太復雜引入過多噪聲和其他的問題,也沒有太簡單不足支撐,內在的機理有利于知識的學習。
借力:機器學習中使用特征工程的過程,人腦把數據經過處理,精煉,得到更接近結果的表達,更直白的可以得到預測目標。
特征工程的道與術
前面都在講特征工程的道,而特征工程具體的術的話,其實也沒有必要講的特別詳細了,但是我還是給你準備了一些關于術方面的資料的。
其實這部分真的沒必要展開講了,很多是熟能生巧,case by case,結合具體的業務的事情。
比如你們用的滑動驗證碼,這里面其實就有很多特征工程的東西,對鼠標的移動行為的各種角度的刻畫,比如速度,加速度,角度等。
這里引用了知乎JovialCai的回答里的一張圖。以風控場景為例,一些可能有用的數據如下(這里其實收集數據源的角度更大一些):
我幫他拍幾個很有用的特征
1.支付金額為整數的占比(刻畫支付金額是不是都是整數)
2.支付金額分布前10的占比(刻畫支付金額是不是集中在幾個數里)
3.支付商鋪的id占比(刻畫支付金額是不是集中在幾個店鋪里)
4.非運營時段夜間交易行為數量(高危支付行為數量)
其他如圖所示(引用了知乎JovialCai):
一些收集的術的資料
很多資料下載需要翻墻,整理的一些能下載下來的,公眾號里回復“特征工程”即可獲取。
附帶鏈接地址(知乎上不好放外鏈)
https://www.zhihu.com/question/29316149/answer/607394337
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載黃海廣老師《機器學習課程》視頻課黃海廣老師《機器學習課程》711頁完整版課件本站qq群955171419,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的可能是全网写特征工程最通透的...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NLP】让AI读懂法律文书:一种基于多
- 下一篇: Windows平台RTMP|RTSP播放