機器學習面試200題!(1-20)

數據分析那些事
11 min readJan 20, 2021

來源:CSDN

本篇是機器學習面試200題第一篇,由於篇幅太長,本篇介紹1-20題,感興趣的話請持續關注唷XD

刷題,是面試前的必備環節。本文作者總結了往年BAT機器學習面試題,乾貨滿滿,值得收藏!

1.請簡要介紹下SVM。

SVM,全稱是support vector machine,中文名叫支援向量機。SVM是一個面向資料的分類演算法,它的目標是為確定一個分類超平面,從而將不同的資料分隔開。

擴充套件:

支援向量機學習方法包括構建由簡至繁的模型:線性可分支援向量機、線性支援向量機及非線性支援向量機。當訓練資料線性可分時,通過硬間隔最大化,學習一個線性的分類器,即線性可分支援向量機,又稱為硬間隔支援向量機;當訓練資料近似線性可分時,通過軟間隔最大化,也學習一個線性的分類器,即線性支援向量機,又稱為軟間隔支援向量機;當訓練資料線性不可分時,通過使用核技巧及軟間隔最大化,學習非線性支援向量機。

支援向量機通俗導論(理解SVM的三層境界)
https://www.cnblogs.com/v-July-v/archive/2012/06/01/2539022.html
機器學習之深入理解SVM
http://blog.csdn.net/sinat_35512245/article/details/54984251

2.請簡要介紹下Tensorflow的計算圖。

@寒小陽:Tensorflow是一個通過計算圖的形式來表述計算的程式設計系統,計算圖也叫資料流圖,可以把計算圖看做是一種有向圖,Tensorflow中的每一個計算都是計算圖上的一個節點,而節點之間的邊描述了計算之間的依賴關係。

3.請問GBDT和XGBoost的區別是什麼?

@Xijun LI:XGBoost類似於GBDT的優化版,不論是精度還是效率上都有了提升。與GBDT相比,具體的優點有:

  • 損失函式是用泰勒展式二項逼近,而不是像GBDT裡的就是一階導數
  • 對樹的結構進行了正則化約束,防止模型過度複雜,降低了過擬合的可能性;
  • 節點分裂的方式不同,GBDT是用的基尼係數,XGBoost是經過優化推導後的。

知識點連結:整合學習的總結
https://xijunlee.github.io/2017/06/03/%E9%9B%86%E6%88%90%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/

4.在k-means或kNN,我們是用歐氏距離來計算最近的鄰居之間的距離。為什麼不用曼哈頓距離?

曼哈頓距離只計算水平或垂直距離,有維度的限制。另一方面,歐氏距離可用於任何空間的距離計算問題。因為,資料點可以存在於任何空間,歐氏距離是更可行的選擇。例如:想象一下國際象棋棋盤,象或車所做的移動是由曼哈頓距離計算的,因為它們是在各自的水平和垂直方向做的運動。

5.百度2015校招機器學習筆試題。

知識點連結:百度2015校招機器學習筆試題
http://www.itmian4.com/thread-7042-1-1.html

6.簡單說說特徵工程。

7.關於LR。

@rickjin:把LR從頭到腳都給講一遍。建模,現場數學推導,每種解法的原理,正則化,LR和maxent模型啥關係,LR為啥比線性迴歸好。有不少會背答案的人,問邏輯細節就糊塗了。原理都會? 那就問工程,並行化怎麼做,有幾種並行化方式,讀過哪些開源的實現。還會,那就準備收了吧,順便逼問LR模型發展歷史。

知識點連結:機器學習之Logistic迴歸(邏輯蒂斯迴歸)
http://blog.csdn.net/sinat_35512245/article/details/54881672

8.overfitting怎麼解決?

dropout、regularization、batch normalizatin

9.LR和SVM的聯絡與區別?

@朝陽在望

聯絡:
1、LR和SVM都可以處理分類問題,且一般都用於處理線性二分類問題(在改進的情況下可以處理多分類問題)
2、兩個方法都可以增加不同的正則化項,如L1、L2等等。所以在很多實驗中,兩種演算法的結果是很接近的。
區別:
1、LR是引數模型,SVM是非引數模型。
2、從目標函式來看,區別在於邏輯迴歸採用的是Logistical Loss,SVM採用的是hinge loss.這兩個損失函式的目的都是增加對分類影響較大的資料點的權重,減少與分類關係較小的資料點的權重。
3、SVM的處理方法是隻考慮Support Vectors,也就是和分類最相關的少數點,去學習分類器。而邏輯迴歸通過非線性對映,大大減小了離分類平面較遠的點的權重,相對提升了與分類最相關的資料點的權重。
4、邏輯迴歸相對來說模型更簡單,好理解,特別是大規模線性分類時比較方便。而SVM的理解和優化相對來說複雜一些,SVM轉化為對偶問題後,分類只需要計算與少數幾個支援向量的距離,這個在進行復雜核函式計算時優勢很明顯,能夠大大簡化模型和計算。
5、Logic 能做的 SVM能做,但可能在準確率上有問題,SVM能做的Logic有的做不了。

答案來源:機器學習常見面試問題(一)
http://blog.csdn.net/timcompp/article/details/62237986

10.LR與線性迴歸的區別與聯絡?

@nishizhen
個人感覺邏輯迴歸和線性迴歸首先都是廣義的線性迴歸,
其次經典線性模型的優化目標函式是最小二乘,而邏輯迴歸則是似然函式,
另外線性迴歸在整個實數域範圍內進行預測,敏感度一致,而分類範圍,需要在[0,1]。邏輯迴歸就是一種減小預測範圍,將預測值限定為[0,1]間的一種迴歸模型,因而對於這類問題來說,邏輯迴歸的魯棒性比線性迴歸的要好。
@乖乖癩皮狗:邏輯迴歸的模型本質上是一個線性迴歸模型,邏輯迴歸都是以線性迴歸為理論支援的。但線性迴歸模型無法做到sigmoid的非線性形式,sigmoid可以輕鬆處理0/1分類問題。

11.為什麼XGBoost要用泰勒展開,優勢在哪裡?

@AntZ:XGBoost使用了一階和二階偏導, 二階導數有利於梯度下降的更快更準. 使用泰勒展開取得二階倒數形式, 可以在不選定損失函式具體形式的情況下用於演算法優化分析.本質上也就把損失函式的選取和模型演算法優化/引數選擇分開了. 這種去耦合增加了XGBoost的適用性。

12.XGBoost如何尋找最優特徵?是又放回還是無放回的呢?

@AntZ:XGBoost在訓練的過程中給出各個特徵的評分,從而表明每個特徵對模型訓練的重要性.。XGBoost利用梯度優化模型演算法, 樣本是不放回的(想象一個樣本連續重複抽出,梯度來回踏步會不會高興)。但XGBoost支援子取樣, 也就是每輪計算可以不使用全部樣本。

13.談談判別式模型和生成式模型?

判別方法:由資料直接學習決策函式 Y = f(X),或者由條件分佈概率 P(Y|X)作為預測模型,即判別模型。

生成方法:由資料學習聯合概率密度分佈函式 P(X,Y),然後求出條件概率分佈P(Y|X)作為預測的模型,即生成模型。

由生成模型可以得到判別模型,但由判別模型得不到生成模型。

常見的判別模型有:K近鄰、SVM、決策樹、感知機、線性判別分析(LDA)、線性迴歸、傳統的神經網路、邏輯斯蒂迴歸、boosting、條件隨機場

常見的生成模型有:樸素貝葉斯、隱馬爾可夫模型、高斯混合模型、文件主題生成模型(LDA)、限制玻爾茲曼機

14.L1和L2的區別。

L1範數(L1 norm)是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則運算元”(Lasso regularization)。
比如 向量A=[1,-1,3], 那麼A的L1範數為 |1|+|-1|+|3|.
簡單總結一下就是:
L1範數: 為x向量各個元素絕對值之和。
L2範數: 為x向量各個元素平方和的1/2次方,L2範數又稱Euclidean範數或Frobenius範數

Lp範數: 為x向量各個元素絕對值p次方和的1/p次方.
在支援向量機學習過程中,L1範數實際是一種對於成本函式求解最優的過程,因此,L1範數正則化通過向成本函式中新增L1範數,使得學習得到的結果滿足稀疏化,從而方便人類提取特徵。
L1範數可以使權值稀疏,方便特徵提取。
L2範數可以防止過擬合,提升模型的泛化能力。

15.L1和L2正則先驗分別服從什麼分佈 ?

@齊同學:面試中遇到的,L1和L2正則先驗分別服從什麼分佈,L1是拉普拉斯分佈,L2是高斯分佈。

16.CNN最成功的應用是在CV,那為什麼NLP和Speech的很多問題也可以用CNN解出來?為什麼AlphaGo裡也用了CNN?這幾個不相關的問題的相似性在哪裡?CNN通過什麼手段抓住了這個共性?

@許韓

知識點連結(答案解析):深度學習崗位面試問題整理筆記
https://zhuanlan.zhihu.com/p/25005808

17.說一下Adaboost,權值更新公式。當弱分類器是Gm時,每個樣本的的權重是w1,w2…,請寫出最終的決策公式。

答案解析
http://www.360doc.com/content/14/1109/12/20290918_423780183.shtml

18.LSTM結構推導,為什麼比RNN好?

推導forget gate,input gate,cell state, hidden information等的變化;因為LSTM有進有出且當前的cell informaton是通過input gate控制之後疊加的,RNN是疊乘,因此LSTM可以防止梯度消失或者爆炸。

19.經常在網上搜索東西的朋友知道,當你不小心輸入一個不存在的單詞時,搜尋引擎會提示你是不是要輸入某一個正確的單詞,比如當你在Google中輸入“Julw”時,系統會猜測你的意圖:是不是要搜尋“July”,如下圖所示:

這叫做拼寫檢查。根據谷歌一員工寫的文章How to Write a Spelling Corrector顯示,Google的拼寫檢查基於貝葉斯方法。請說說的你的理解,具體Google是怎麼利用貝葉斯方法,實現”拼寫檢查”的功能。

使用者輸入一個單詞時,可能拼寫正確,也可能拼寫錯誤。如果把拼寫正確的情況記做c(代表correct),拼寫錯誤的情況記做w(代表wrong),那麼”拼寫檢查”要做的事情就是:在發生w的情況下,試圖推斷出c。換言之:已知w,然後在若干個備選方案中,找出可能性最大的那個c,也就是求P(c|w)P(c|w)的最大值。而根據貝葉斯定理,有:

由於對於所有備選的c來說,對應的都是同一個w,所以它們的P(w)是相同的,因此我們只要最大化P(w|c)P(c)即可。其中:

P(c)表示某個正確的詞的出現”概率”,它可以用”頻率”代替。如果我們有一個足夠大的文字庫,那麼這個文字庫中每個單詞的出現頻率,就相當於它的發生概率。某個詞的出現頻率越高,P(c)就越大。比如在你輸入一個錯誤的詞“Julw”時,系統更傾向於去猜測你可能想輸入的詞是“July”,而不是“Jult”,因為“July”更常見。

P(w|c)表示在試圖拼寫c的情況下,出現拼寫錯誤w的概率。為了簡化問題,假定兩個單詞在字形上越接近,就有越可能拼錯,P(w|c)就越大。舉例來說,相差一個字母的拼法,就比相差兩個字母的拼法,發生概率更高。你想拼寫單詞July,那麼錯誤拼成Julw(相差一個字母)的可能性,就比拼成Jullw高(相差兩個字母)。值得一提的是,一般把這種問題稱為“編輯距離”,參見程式設計師程式設計藝術第二十八~二十九章:最大連續乘積子串、字串編輯距離。
http://blog.csdn.net/v_july_v/article/details/8701148#t4

所以,我們比較所有拼寫相近的詞在文字庫中的出現頻率,再從中挑出出現頻率最高的一個,即是使用者最想輸入的那個詞。具體的計算過程及此方法的缺陷請參見How to Write a Spelling Corrector。
http://norvig.com/spell-correct.html

20.為什麼樸素貝葉斯如此“樸素”?

因為它假定所有的特徵在資料集中的作用是同樣重要和獨立的。正如我們所知,這個假設在現實世界中是很不真實的,因此,說樸素貝葉斯真的很“樸素”。

--

--

數據分析那些事

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/