連續特徵的離散化:在什麼情況下將連續的特徵離散化之後可以獲得更好的效果?
題主機器學習大白一個。。最近剛接觸CTR預估,發現CTR預估一般都是用LR,而且特徵都是離散的。為什麼一定要用離散特徵呢?這樣做的好處在哪裡?求大拿們解答~
謝邀!
以下內容來源於跟幾位大牛交流的結果並加入了一定自己的理解。
在工業界,很少直接將連續值作為邏輯回歸模型的特徵輸入,而是將連續特徵離散化為一系列0、1特徵交給邏輯回歸模型,這樣做的優勢有以下幾點:
0. 離散特徵的增加和減少都很容易,易於模型的快速迭代;
1. 稀疏向量內積乘法運算速度快,計算結果方便存儲,容易擴展;
2. 離散化後的特徵對異常數據有很強的魯棒性:比如一個特徵是年齡&>30是1,否則0。如果特徵沒有離散化,一個異常數據「年齡300歲」會給模型造成很大的干擾;
3. 邏輯回歸屬於廣義線性模型,表達能力受限;單變數離散化為N個後,每個變數有單獨的權重,相當於為模型引入了非線性,能夠提升模型表達能力,加大擬合;
4. 離散化後可以進行特徵交叉,由M+N個變數變為M*N個變數,進一步引入非線性,提升表達能力;
5. 特徵離散化後,模型會更穩定,比如如果對用戶年齡離散化,20-30作為一個區間,不會因為一個用戶年齡長了一歲就變成一個完全不同的人。當然處於區間相鄰處的樣本會剛好相反,所以怎麼劃分區間是門學問;
6. 特徵離散化以後,起到了簡化了邏輯回歸模型的作用,降低了模型過擬合的風險。
李沐曾經說過:模型是使用離散特徵還是連續特徵,其實是一個「海量離散特徵+簡單模型」 同 「少量連續特徵+複雜模型」的權衡。既可以離散化用線性模型,也可以用連續特徵加深度學習。就看是喜歡折騰特徵還是折騰模型了。通常來說,前者容易,而且可以n個人一起並行做,有成功經驗;後者目前看很贊,能走多遠還須拭目以待。
首先,海量離散特徵+LR是業內常見的一個做法,但並不是Holy Grail,事實上這一般而言僅僅是因為LR的優化演算法更加成熟,而且可以在計算中利用稀疏特性進行更好的優化—可謂不得已而為之。事實證明GBDT和深度學習特徵的加入對於CTR預測是有正面幫助的。
如果這個問題思考地更深一點,其實當前深度學習網路的最後一層,如果是binary classification,其實等同於LR。所以說,通過人工/半人工的方式產生的features,跟深度神經網路(無論之前用了怎樣的結構)最後學出來的representation,其實是異曲同工,區別在於深度學習一般而言會學出一個dense representation,而特徵工程做出來的是一堆sparse representation。某些時候,人工特徵其實跟神經網路經過幾層非線性之後的結果是高度相似的。
在暴力提取高階/非線性特徵的本事上,機器肯定勝過人類。但是,就算最牛的機器智能,有時候都敵不過一些「人類常識」。尤其是業務的一些邏輯,可以認為是人腦在更大的一個數據集上pre-train出來的一些特徵,其包含的信息量一定是大於你用於預測的dataset的。在這種情況下,往往厲害的人工features會outperform暴力的機器方法。
所以,特徵離散化,從數學角度來說可以認為是增加robustness,但是更重要的,make sense of the data,將數據轉變成人類可以理解、可以validate的格式。
人類的業務邏輯,當然也不是完美的。在當前機器智能還未征服「常識」這個領域之前,人類的business insights還是一個有力的補充(在很多case,甚至是最重要的部分)。在機器能夠完全掌握的範圍內,譬如圍棋,人類引以為傲的intuition已經無法抵抗機器的暴力計算了——所以在未來,我們一定會看到越來越多的機器智能開始侵入一些傳統上認為必須要依靠人類的「感覺」的一些領域。
廣告領域當然也不能躲過這個大的趨勢。
本回答來自Emotibot機器學習科學家馬永寧。
主要目的是獲得指數級的表示能力。假如一個n維的連續向量,即使採用最簡單的每一個維2值化,也會得到2^n種特徵組合。
這種表示方法對LR這種線性分類器是十分關鍵的。在超高維的特徵空間中,很多問題就變為線性可分問題,而從可以極大地提高分類器的能力。
但對於像神經網路的深度非線性模型則意義不大。因為神經網路中的每個神經元都可以看作是一個近似的離散特徵生成器,輸出為兩種狀態:興奮和抑制。本身就可以進行表示學習,所以就不再需要特徵工程了。
神經元採樣的非線性激活函數,比如logistic sigmoid函數,可以看作是近似的特徵離散化操作。
謝帥哥 @Tianshu Ren 邀。
偏個題,說個跟quantization有關,很簡單但有意思的東西:dithering。
假設我們要估計X的值,我們知道X在0,1之間,但我們只能觀察到0或1:X離0近我們觀測到0,反之觀測到1。注意到比如X = 0.3, 那我們只能一直觀測到0。
dithering是說主動給X加一些noise, 比如Unif[-0.5,0.5], 那麼這時X~Unif[-0.2,0.8]. 我們有0.7的概率觀察到0,0.3的概率觀察到1:我們觀測到的期望是0.3。可以證明(比如Hoeffding之類的bound)如果觀測到的數據足夠多,這些數據的average很接近0.3。
這只是dithering的一個應用,在quantization里dithering還可以decorrelation.
用線性模型,就得通過離散化將非線性特徵轉化為線性的,這就是所謂特徵工程。用非線性模型,比如Tree, DNN就不需要。
LR需要這麼做是因為,模型本身是線性參數模型,參數模型對特徵都有個分布的假設,而特徵有些分布是奇形怪狀,這也是有時候為什麼你要在特徵上加個log/sqrt。線性換轉線性是一方面,更多原因是因為參數模型,想想為什麼TREE可以不用這麼是因為這個模型是非參的, DNN顯然是參數模型,做離散化效果會變優。
擬合非線性
把連續離散化本身就是一個特徵抽取的過程,如果對於業務熟悉,對於業務能夠恰到好處的提取到的特徵,肯定比機器強
雜訊很大的環境中,離散化可以降低特徵中包含的雜訊,提升特徵的表達能力。但是如何離散化是一個非常重要的步驟。不同的離散化方法會帶來非常大的性能差異
沒做過CTR.
很多答案都說實現非線性,直接用xgb不就行了么?難道是預測時間太長?還是玩可解釋性?推薦閱讀:
※參加kaggle競賽是怎樣一種體驗?
※怎麼在 Excel 上做數據地圖?
※數據挖掘入門基礎知識疑惑?
※AI領域的灌水之風如何破局?
※怎麼培養數據分析的能力?