從損失函數的角度解釋為什麼lr做點擊率預測不如GBDT好???

最近看到一個機器學習演算法工程師的面試題,始終想不到答案,求演算法大牛解釋一下!!


logistic regression 是線性模型,如果不對特徵做比較多的變換的話,特徵維度很低表達能力自然就差。GBDTt裡面非線性的變換很多,表達能力就強很多。

Facebook的 CTR prediction 使用過以GBDT的輸出作為feature的 LR Model, 效果相對於單獨的GBDT和LR是要更好一些的。參見 『Practical Lessons from Predicting Clicks on Ads at Facebook』。這篇論文里把GBDT的每個leaf都用binary encoding來表示,實際上使得LR能夠學習到GBDT所能表達的任何結果。

事實上很多feature extraction能力強大的model稍作改造都是可以拿來作為LR的輸入的。方法得當的話,LR還是很強大的。


@Stark Einstein的回答應該言簡意賅,LR是model線性預測,而GBDT是model非線性預測。也有人用ReinforcementLearning作CTR工作的,也更說明了CTR的數據內在模型更趨向於一個非線性狀態。


「從損失函數的角度」,這個問法不太理解出題者的真實意圖。

從表示的角度來說,邏輯回歸假設了目標和特徵是線性相關的,如果不滿足這個假設就不會有好的效果;而gbdt實際上是泰勒展開去逼近目標函數,這裡面是有非線性變換的,所以可以擬合更加複雜的函數。


謝邀。

常規下,lr使用的是log loss,gbdt使用的是平方誤差,即squared loss,這兩個損失函數各有什麼缺點我不是很清楚,我想應該是,前者使用最大似然概率來優化,後則是使用歐式距離來優化,還請高人回答。

但是,我覺得,這些演算法,各自損失函數都可以用吧,只是默認下,每個演算法使用公式最優美,推導最方便的損失函數。

但是這兩個回歸演算法各自損失函數都結合了各自演算法的特點(比如方便,公式優美等)。

不過我想gbdt效果比lr好,更多的是因為gbdt採用了boosting的思想,即三個臭皮匠賽過一個諸葛亮,但是lr的最大優點就是簡單,複雜度相對低,能夠處理大量的樣本,因為廣告系統包含大量的樣本,因此大都使用lr來做點擊率預測,並且效果也不錯。


這個題目就是錯的,和損失函數沒關係,lr和gbdt可以有相同的損失函數。而且點擊率預估也不一定是lr就不gbdt要差。lr能夠處理稀疏的大量id類型特徵,這種特徵在廣告點擊率預估中佔了很重要的地位,gbdt並不適合處理稀疏的id類型,特徵維度高的話,gbdt訓練速度會很慢,因此要對輸入的id特徵做處理,比如用點擊率和展現做特徵。從這個角度來看的話,id類型的特徵,推廣性比較差,但是精度其實會更高,因此如果數據充分,對舊廣告來說,用lr預估並不會比gbdt要差


天下沒有免費的午餐,沒有絕對好壞。 而且即使是廣告,每個公司廣告場景多少有些差異,比如百度可以把ID類特徵用的很好,因為平均每個用戶積累數據多。 而一些平均用戶行為數據就一兩條的公司同樣做CTR預測完全不一樣。 可能面試你的人剛好碰到GBDT比LR好場景或者實驗不充分。不過現在機器學習已然有點老中醫的味道了, 實驗某個演算法加上特定場景的trick,效果好就各種吹,其實原理和理論都沒搞清楚。


這個問題就沒明白,做分類兩個損失函數都是logloss, 不同的是gradient boosting 這種框架,是一個非線性模型,表達能力自然比線性模型好。


推薦閱讀:

你同意「數據比演算法重要」這個說法嗎?
進行數據挖掘時演算法需要學習到什麼樣的程度?
如何構造 n 個數使其最小公倍數(LCM)=其和?( n 個數互不相等)
std::unique為什麼不用一個hash table實現,而是要先std::sort?
如何優雅地證明這道卡片排序問題?

TAG:演算法 | 數據挖掘 | 數據分析 | 機器學習 |