網際網路公司面試中經常被問的問題
機器學習
1.(騰訊)SVM的原理是什麼?
參考答案: 支援向量機(SVM)第一種二類分類模型,它的基本模型是定義在特徵空間上的間隔最大的線性分類器,間隔最大使它有別於感知機;支援向量機還包括核技巧,這使它成為實質上的非線性分類器。硬幾何最大化解決線性可分問題,軟幾何間隔最大化解決線性不可分問題(摘自《統計學習方法》)。
2.(騰訊)LR的原理是什麼?
參考答案: 邏輯迴歸以一個二分類演算法,它的對數機率函式是一個線性函式
3.(騰訊)RF的優缺點是什麼?
原理: 隨機森林由LeoBreiman(2001)提出,它通過自助法(bootstrap)重取樣技術,從原始訓練樣本集
優點:
- 在當前的很多資料集上,相對其他演算法有著很大的優勢,表現良好。
- 它能夠處理很高維度(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的觀測比例為:
分裂準則常用下面三個“誤分類不純度”、“Gini不純度”、“熵不純度”:
- Misclassification error:
1Nm∑i∈RmI(yi≠k(m))=1−p^mk(m) - Gini index:
∑k≠k′p^mkp^mk′=∑Kk=1p^mk(1−p^mk) - Cross-entropy or deviance:
−∑Kk=1p^mklogp^mk
分裂時,找到使不純度下降最快的分裂變數和分裂點。不純度的下降落差可以直觀的定義為:
剪枝時,最常用的是“誤分類不純度”準則。另外,三個準則在2類分類時節點不純度的函式圖為:
從圖中可以看出“Gini不純度”、“熵不純度”可微,更適合數值優化。市場上流行的一種決策樹CHAID使用一種基於統計
13.(蘑菇街)對偶原理適合解決什麼問題?對偶原理有什麼條件?
參考答案: 高階問題,原始問題不好解,用對偶原理比較好解,如果滿足KKT條件,那麼原始問題和對偶問題的解相等。
14.(蘑菇街)梯度下降和隨機梯度下降有什麼優缺點?
參考答案: 線上性迴歸中,標準梯度下降法每次迭代中都要計算所有訓練樣本的誤差,因此每次引數更新都是所有訓練樣本誤差累加的結果。其演算法如下:
Repeat until convergence {
標準梯度下降法因為是在所有訓練樣本誤差的基礎上更新每次引數,因此每一步的比隨機梯度下降法走的大,因為它使用的是真正的梯度。其缺點是每一步的計算量會很大,很容是產生鋸齒現象,使得收斂速度慢,即一階逼近函式得到的模型比較粗糙。
隨機梯度下降法,每次引數更新只選取一個訓練樣本,雖不是嚴格意義上的梯度,但是大的整體方向是全域性最優的。演算法如下:
Loop {
for i=1 to n {