總結:常見算法工程師面試題目整理(二)

接著上回寫的《總結:常見算法工程師面試題目整理(1)》,繼續填接下來的坑。

11.boost算法的思路是什么樣的?講一下你對adaboost 和 gbdt的了解?

答:
boost的核心思想不同于bagging,它在基于樣本預測結果對照與真實值得差距,進行修正,再預測再修正,逐步靠近正確值。

我對adaboost和gbdt了解的也不算很全面:大概的梳理如下:
不足:
1.adaboost存在異常點敏感的問題
2.gbdt一定程度上優化了adaboost異常點敏感的問題,但是存在難以并行的缺點
3.兩者的目標都是優化bias,必然導致訓練出來的數據var的不穩定

亮點:
1.發現非線性的特征關系,網格化的切分feature
2.擬合的效果相較于其他分類器更加精準,且訓練參數較少

Adaboost:


adaboost初始數據權重都是1/M,然后通過訓練每一個弱分類器Classifier使得在每一次y_pred誤差最小,得到每一個弱Classifier的權重方法對:(αi,yi)然后提高錯分了的數據的權重,降低正確分類的數據權重,循環訓練,最后組合最后若干次的訓練弱Classifier對,得到強分類器。
其中,αi由誤差決定:

該弱分類器分類錯誤率em越大,則該若分類器作用越小。
1.剖析了原理之后,我們發現,這樣做對異常點非常敏感,異常點非常容易錯分,會影響后續若干個弱分類器

gbdt:

gbdt的核心在于下面這個公式:



L(y,y_pred):預測值與實際值間的誤差
F(x):前若干個弱分類器的組合
關鍵的在于當前預測結果=對前若干個弱分類器+當前弱分類器修正,所以對前若干個分類器組合求偏導的方向進行梯度處理,保證L(x)出來的值最小。
這邊結果在于你選取什么樣的誤差函數:


Loss即為損失函數,Derivative即為導數
除此之外,在每一步弱分類器構建的同時,它還考慮了正則化:
Ω=入T+μ*linalg.norm(f(xi))
T為子葉節點數目,同時也對預測結果得分的值進行了l1或者l2壓縮,避免過擬合。

我個人更喜歡用xgboost,在求解速度上,對異常值處理上面都要比gbdt要快,而且基于R、python版本都有package。

12.聽說你做過用戶關系,你用的什么方法?社群算法有了解,講講什么叫做Modularity Q?

1.我用的是Jaccard相關。
比如,用戶1一共收過150個紅包,發了100個紅包,其中20個被用戶2搶過
用戶2一共收過100個紅包,發了50個紅包,其中30個被用戶1搶過
similarity(user1=>user2)=(30+20)/(150+100)
similarity(user2=>user1)=(30+20)/(50+100)
similarity(user2=>user1)=(30+20+30+20)/(150+100+50+100)

2.社區算法主要是用來衡量用戶關系網中,不同用戶、鏈接、信息之間的相似程度。
本來這邊我準備講pagerank的,結果被打斷了,說需要講內部結構相關的,其實我覺得PageRank這邊來描述更加合適。不過,無所謂,我這邊談的是一個很基本的叫做:Kernighan-Lin算法(后面簡稱了KL算法)
KL算法中,先隨機切分原數據集群,得到不同社區集,隨機交換不同社區集內的不同點,觀察優化值得變化程度是否為正向,循環即可。


共需執行次數:循環次數x集群A內點的個數x集群B內點的個數

感覺這邊答的不行,被嫌棄了,有知道的大神可以自行去研究一下相關的社區算法,我這邊只了解PageRank和LK。

3.Q-modularity:


這個簡單,E:關系點連接線之間的個數,I:關系點連接線兩端都在社群內的數量,O:關系點連接線有至少一端在社群外的連接線的數量

這個指標是用來衡量社群劃分的穩定性的,講真我也沒用過,只是在周志華的算法的書上看過。

13.如果讓你設計一套推薦算法,請說出你的思路?


講真,這個點,我起碼說了有25分種,對面的面試管也很耐心的聽完了,并且還給予了很多點的反饋,個人覺得非常受到尊重,我下面細節梳理一下。
首先,我個人非常贊同阿里現在的推薦算法這邊的設計思路:
推薦=人+場景+物
其中,
人=新用戶+老用戶+綜合特征+...
場景=屬性偏好+周期屬性+黏度偏好+...
物=相關性+物品價值+特殊屬性+...
接下來,我簡單的剖析三個最常見也最重要的問題:

  • 冷啟動
    很多人有一種錯覺,只要業務上線時間長了就不存在所謂的冷啟動問題,實則不是,新用戶是持續進入的、流失用戶也是在增長的、很多盲目用戶(沒有有價值行為)等等都可以歸納為冷啟動問題,這類問題的核心在于你可用的數據很少,甚至沒有,我這邊采取的是熱門推薦的方法。
    然而在熱門推薦的算法中,我這邊推薦一些方法:
    威爾遜區間法:綜合考慮總的行為用戶中,支持率與支持總數的平衡
    hacker new排序:綜合考慮時間對支持率的影響
    pagerank排序:考慮用戶流向下的頁面權重排序
    梯度效率排序:考慮商品增速下的支持率的影響
    ...
    方法很多,但是核心的一點是熱門推薦是冷啟動及實時推薦必不可少的一環,優化好實時推薦的算法是占到一個好的推薦算法的30%以上的權重的,切忌0推薦
  • 不同種算法產生的推薦內容互不沖突


    這個是蘇寧易購的首頁推薦位,1、2、3分別是三個推薦位,我們在做算法的時候常常會特別注意,不能用太多相關性比較高的變量,會產生共線性,但在推薦內容上,“58同城”的算法推薦團隊之前有一份研究證明,同一個頁面上由不同算法產出的推薦結果不存在相互影響。
    所以,我非常贊同不同的算法產出不同的結果同時展示,因為我們不知道對目標用戶是概率模型、距離模型、線性模型等不同模型中哪個產出的結果更加合適。
    關于常用的推薦算法,我之前梳理過,這邊也不再多加重復,需要仔細研究的可看我上面的圖,或者看我之前的文章:《深度學習下的電商商品推薦》、《偏RSVD及擴展的矩陣分解方法》等等

  • 你的對象是用戶,不是冰冷的數字
    我在蘇寧呆的時間不長,但是我有個感覺,身邊算法工程師很容易把自己陷入數字陷阱,近乎瘋狂去用各種算法去擬合當前的用戶數據,以求得得到高的ctr或者轉化率。
    不同的推薦場景需要使用不同的用戶行為。舉例假設存在經典的關系:買了炸雞和番茄醬的用戶,接下來的一周有35%的用戶會來買汽水。所以,很多工程師會選擇只要買了炸雞和番茄醬的用戶,就彈窗汽水,因為就35%的百分比而言,是非常高的支持度了。其實只要有用戶畫像的支持就會發現,這35%的用戶中,80%的都是年齡在青少年,如果在推送之前做一個簡單的邏輯判斷只針對所有青少年進行推送汽水的話,35%輕而易舉的上升到了70%,這是任何算都無法比擬的。


最上方的橙黃色的橫條中,橙色代表原始的目標用戶,黃色代表非目標用戶,假設我們知道黑色方框所框選的用戶的轉化率達到最小置信度的時候,我們可以通過特征映射、非線性分解、用戶畫像刻畫等不同方法得到左右完全不同的新的用戶分布,在同樣的用戶框選占比下,效果也是完全不同的。
真實推薦中,比如針對用戶冬裝推薦,我不僅僅以用戶近期的搜索、瀏覽、購買商品等行為判斷用戶的偏好,我也根據他夏天的購買風格款式、他的年齡、生理性別、瀏覽性別等綜合判斷他可能會買什么。推薦算法才不會是冷漠的。

至于想要了解具體實現算法及創新的一些想法可以看上方的腦圖,但是我覺得那并不是最重要。

14.什么是P、NP、NP-Hard、NP-Complete問題?

P:很快可以得出解的問題
NP:一定有解,但可很快速驗證答案的問題

后面兩個我沒答出來,網上搜了下,分享下:
NP-Hard:比所有的NP問題都難的問題
NP-Complete:滿足兩點:

  1. 是NP-Hard的問題
  2. 是NP問題

個人不喜歡這種問題。

15.常見的防止過擬合的方法是什么?為什么l1、l2正則會防止過擬合?

當被問了第一個問題的時候,我愣了下,因為我覺得挺簡單的,為什么要問這個,我感覺接下來有坑。
我回答的是:
先甩出了下面的圖解釋了一波欠擬合、正常、過擬合:



然后舉了幾個例子:

  • 針對error遞歸的問題,l1,l2正則化
  • 擴充數據量,使得數據更加符合真實分布
  • bagging等算法技巧

當問到為什么的時候,我覺得自己回答的不好,有點蛋疼:
我說的是,l1以:


l2以:

l1中函數與約束點偏向相切于四個端點,端點處壓縮了某個特征=0;l2中函數與約束點偏向相切于圓,會造成某些特征值壓縮的接近于0;
根據奧卡姆剃刀原理,當兩個假說具有完全相同的解釋力和預測力時,我們以那個較為簡單的假說作為討論依據,而通常過擬合的模型的特征維度過高過多,所以一定程度可以緩解過擬合。

面試管以一種奇怪的眼神看著我,然后表示他其實想讓我通過先驗概率解釋,不過我這樣說仿佛也有道理。我回來之后就研究了一下,比如l2,大致如下:
首先,我們確定兩點:
l2,其實就給了系數w一個期望是0,協方差矩陣是 1/alpha的先驗分布。l1對應的是Laplace先驗。

我們相當于是給模型參數w設置一個協方差為1/alpha 的零均值高斯分布先驗。



根據貝葉斯定律:


這一步我沒看懂,我計算了半天也沒由最大似然估計算出下面這個式子,有會的朋友可以私信我一下。

有了上面的式子就很簡單了,alpha在0-正無窮之間,如果a接近0的話,左側及為正常的MSE也就是沒有做任何的懲罰。如果alpha越大的話,說明預測值越接近真實值的同時,協方差也控制的很小,模型越平穩,Var也越小,所以整體的模型更加有效,避免了過擬合導致訓練數據擬合效果很差的問題。

到這里,我覺得常見的算法題目都講完了,很多簡單的知識點我沒有提,上面這些算是比較經典的,我沒答出來的,希望對大家有所幫助,最后謝謝大家的閱讀。


歡迎大家關注我的個人bolg,更多代碼內容歡迎follow我的個人Github,如果有任何算法、代碼疑問都歡迎通過公眾號發消息給我哦。

少年,掃一下嘛

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容