1. 程式人生 > >網際網路公司面試中經常被問的問題

網際網路公司面試中經常被問的問題

機器學習

1.(騰訊)SVM的原理是什麼?
參考答案: 支援向量機(SVM)第一種二類分類模型,它的基本模型是定義在特徵空間上的間隔最大的線性分類器,間隔最大使它有別於感知機;支援向量機還包括核技巧,這使它成為實質上的非線性分類器。硬幾何最大化解決線性可分問題,軟幾何間隔最大化解決線性不可分問題(摘自《統計學習方法》)。

2.(騰訊)LR的原理是什麼?
參考答案: 邏輯迴歸以一個二分類演算法,它的對數機率函式是一個線性函式wTx,我們用sigmoid函式近似P(Y=1|X)=exp(wTx+b)1+exp(wTx+b),那麼P(Y=0|X)=11+exp(wTx+b)。當線性函式的值接近於無窮是,概率值接近於1;反之,概率值接近於0。它本質上是一個線性模型,屬於判別方法。

3.(騰訊)RF的優缺點是什麼?
原理: 隨機森林由LeoBreiman(2001)提出,它通過自助法(bootstrap)重取樣技術,從原始訓練樣本集N中有放回地重複隨機抽取N個樣本生成新的訓練樣本集合,然後根據自助樣本集生成k個分類樹組成隨機森林,在構造第i棵決策是時,在每個節點隨機選擇m(通常log2d+1d是特徵數)個特徵作為該點劃分的候選特徵。新資料的分類結果按分類樹投票多少形成的分數而定。其實質是對決策樹演算法的一種改進,將多個決策樹合併在一起,每棵樹的建立依賴於一個獨立抽取的樣品。單棵樹的分類能力可能很小,每棵樹都會完整成長而不會剪枝(Pruning)(這有可能在建完一棵正常樹狀分類器後會被採用),但在隨機產生大量的決策樹後,一個測試樣品可以通過每一棵樹的分類結果經統計後選擇最可能的分類。
優點:

  • 在當前的很多資料集上,相對其他演算法有著很大的優勢,表現良好。
  • 它能夠處理很高維度(feature很多)的資料,並且不用做特徵選擇。
  • 在訓練完後,它能夠給出哪些feature比較重要。
  • 在建立隨機森林的時候,對generlization error使用的是無偏估計,模型泛化能力強。
  • 訓練速度快,容易做成並行化方法。
  • 在訓練過程中,能夠檢測到feature間的互相影響。
  • 對於不平衡的資料集來說,它可以平衡誤差。
  • 如果有很大一部分的特徵遺失,仍可以維持準確度。

缺點:

  • 隨機森林已經被證明在某些噪音較大的分類或迴歸問題上會過擬合。
  • 對於有不同取值的屬性的資料,取值劃分較多的屬性會對隨機森林產生更大的影響,所以隨機森林在這種資料上產出的屬性權值是不可信的。

4.(騰訊)資料建模的過程是什麼?
參考答案: 資料預處理->構建訓練集和測試集->提取特徵->選擇學習演算法->評估模型的有效性。

5.(騰訊)如何評估一個特徵的有效性?
參考答案: 用特徵之間的相關係數來評估特徵之間的相關性,去掉相關性很大的一些特徵;用決策樹自動對特徵重要性排序,越靠近根部的特徵越重要。

6.(蘑菇街)說一下在參加阿里的比賽中,用到什麼演算法,怎麼做的資料預處理,遇到什麼困難。
參考答案:

  • 用到LR,SVM,GBDT和RF。
  • 去掉爬蟲使用者(點選量很大,購買量為零或者很小),去掉只有購買行為的使用者(應為其他行為資料缺失),去掉只在雙12有購買的使用者和被購買的商品(因為是打折促銷)。
  • a. 平臺不熟悉,一開始python,sql和mapreduce都沒用過,御膳房的文件也不夠友好,導致前期花了很多時間來熟悉比賽的平臺,好在慢慢研究官方的文件,慢慢對平臺熟悉起來。b. 特徵選擇問題,一次性加入的特徵太多,效果並不好,最後特徵選擇遇到困難,用具有單棵樹的隨機森林來選特徵。c. 時間問題,實驗室並不允許我們做其他的事情,我們只能在早上和晚上做比賽,往往是一邊要完成實驗室的科研工作,另外一方面也要每天在比賽上有新的突破,平衡時間很重要。

7.(蘑菇街)特徵有做哪些處理?怎麼篩選特徵?
參考答案: 歸一化,平滑處理。用特徵之間的相關係數來評估特徵之間的相關性,去掉相關性很大的一些特徵;用決策樹自動對特徵重要性排序,越靠近根部的特徵越重要。

8.(蘑菇街)怎麼平滑的,在(購買量/點選量)上平滑,如果點選量為0可能存在問題?
參考答案: 使用者有四種行為,並不會出現只有購買行為而無其他行為的情況。

9.(蘑菇街)介紹一下GBDT演算法。
**參考答案:**Gradient Boost其實是一個框架,裡面可以套入很多不同的演算法。Boost是”提升”的意思,一般Boosting演算法都是一個迭代的過程,每一次新的訓練都是為了改進上一次的結果。

原始的Boost演算法是在演算法開始的時候,為每一個樣本賦上一個權重值,初始的時候,大家都是一樣重要的。在每一步訓練中得到的模型,會使得資料點的估計有對有錯,我們就在每一步結束後,增加分錯的點的權重,減少分對的點的權重,這樣使得某些點如果老是被分錯,那麼就會被“嚴重關注”,也就被賦上一個很高的權重。然後等進行了N次迭代(由使用者指定),將會得到N個簡單的分類器(basic learner),然後我們將它們組合起來(比如說可以對它們進行加權、或者讓它們進行投票等),得到一個最終的模型。

而Gradient Boost與傳統的Boost的區別是,每一次的計算是為了減少上一次的殘差(residual),而為了消除殘差,我們可以在殘差減少的梯度(Gradient)方向上建立一個新的模型。所以說,在Gradient Boost中,每個新的模型的建立是為了使得之前模型的殘差往梯度方向減少,與傳統Boost對正確、錯誤的樣本進行加權有著很大的區別。

10.(蘑菇街)優化方法,梯度下降和擬牛頓法有什麼優缺點?
11.(蘑菇街)梯度下降法中的中的學習率怎麼自適應得到?根據什麼資訊可以確定自適應率。因為你是做控制的,你們控制裡面怎麼自適應得到學習率?
12.(蘑菇街)在樹模型中,除了熵,基尼指數,資訊增益以外,還可以用來什麼衡量不確定性?(比如方差?)
參考答案:分類樹(classification tree)跟迴歸樹相比,主要是分裂節點和修剪樹的準則不同。首先定義節點m中類k的觀測比例為:

p^mk=1NmxiRmI(yi=k)
分裂準則常用下面三個“誤分類不純度”、“Gini不純度”、“熵不純度”:
  • Misclassification error:1NmiRmI(yik(m))=1p^mk(m)
  • Gini index:kkp^mkp^mk=Kk=1p^mk(1p^mk)
  • Cross-entropy or deviance:Kk=1p^mklogp^mk

分裂時,找到使不純度下降最快的分裂變數和分裂點。不純度的下降落差可以直觀的定義為:

Δi(N)=i(N)PLi(NL)(1PL)i(NR)
剪枝時,最常用的是“誤分類不純度”準則。另外,三個準則在2類分類時節點不純度的函式圖為:
不純度
從圖中可以看出“Gini不純度”、“熵不純度”可微,更適合數值優化。市場上流行的一種決策樹CHAID使用一種基於統計χ2檢驗的屬性選擇度量。其他不純度度量包括C-SEP(在某些情況下,他比資訊增益和基尼指數的效能好)和G-統計量(一種資訊理論度量,非常近似於χ2分佈)(摘自《資料探勘:概念與技術》P222)。

13.(蘑菇街)對偶原理適合解決什麼問題?對偶原理有什麼條件?
參考答案: 高階問題,原始問題不好解,用對偶原理比較好解,如果滿足KKT條件,那麼原始問題和對偶問題的解相等。

14.(蘑菇街)梯度下降和隨機梯度下降有什麼優缺點?
參考答案: 線上性迴歸中,標準梯度下降法每次迭代中都要計算所有訓練樣本的誤差,因此每次引數更新都是所有訓練樣本誤差累加的結果。其演算法如下:

Repeat until convergence {

θj:=θj+αi=1n(y(i)hθ(x(i)))x(i)j(j=1,2,,m)}

標準梯度下降法因為是在所有訓練樣本誤差的基礎上更新每次引數,因此每一步的比隨機梯度下降法走的大,因為它使用的是真正的梯度。其缺點是每一步的計算量會很大,很容是產生鋸齒現象,使得收斂速度慢,即一階逼近函式得到的模型比較粗糙。

隨機梯度下降法,每次引數更新只選取一個訓練樣本,雖不是嚴格意義上的梯度,但是大的整體方向是全域性最優的。演算法如下:

Loop {

for i=1 to n {

θj:=θj+α(y(i)