机器学习面试问题
深入貫徹“只要背得多 面試就能說”方針
1.SVM,LR,L1和L2正則化
SVM: https://blog.csdn.net/weixin_42462804/article/details/104674198
LR :https://blog.csdn.net/sinat_33231573/article/details/99709837
L1和L2:
https://blog.csdn.net/sinat_33231573/article/details/100003937?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase
2.樹模型
Q:rf , gbdt 的區別;gbdt , xgboost 的區別
https://zhuanlan.zhihu.com/p/148050748? 一篇文章搞定GBDT、Xgboost和LightGBM的面試
RF和GBDT區別:
相同點:都是由多棵樹組成,最終的結果都是由多棵樹一起決定
不同點:
- 集成學習:RF屬于bagging思想,每次的樣本從數據集形成的,而GBDT屬于boosting思想,每次使用全部樣本
 - 偏差-方差權衡:RF不斷降低模型的方差,而GBDT不斷降低模型的偏差
 - 并行性:RF的樹可以并行生成,而GBDT可以順序生成(需要等上一棵樹完成生成)
 - 最終結果:RF最終是由多棵樹進行多樹表決(回歸問題是取平均)而GBDT是加權融合
 - 數據敏感性:RF對異常值不敏感,GBDT對異常值敏感
 - 泛化能力:RF不易過擬合,GBDT容易過擬合
 
GBDT和XGBOOST區別:
- 基分類器:XGboost不僅支持CART決策樹,還支持線性分類器,此時XGboost相當于帶L1和L2正則化的logistic回歸或者線性回歸
 - 導數信息:XGboost對損失函數做了二階泰勒展開,GBDT只用了一階導數信息,并且XGboost還支持自定義損失函數,只要損失函數一階、二階可導
 - 正則項:XGBOOST相當于GBDT加了正則項,用于控制模型復雜度。正則項中,包含了葉子結點的個數,每個葉子結點輸出的score的L2模的平方和,正則項防止了過擬合,使得學習出來的模型更加簡單,這也是XGBOOST優于GBDT的一個特性。
 - 注意不是tree維度的并行,而是特征維度的并行。決策樹的學習最耗時的一個步驟就是對特征的值進行排序(因為要確定最佳分割點),xgboost在訓練之前,預先對數據進行了排序,然后保存為桶結構,后面的迭代中重復地使用這個結構,大大減小計算量。這個block結構也使得并行成為了可能,在進行節點的分裂時,需要計算每個特征的增益,最終選增益最大的那個特征去做分裂,那么各個特征的增益計算就可以開多線程進行。
 
關于XGBOOST的一些問答題:
https://mp.weixin.qq.com/s?__biz=Mzg2MjI5Mzk0MA==&mid=2247484181&idx=1&sn=8d0e51fb0cb974f042e66659e1daf447&chksm=ce0b59cef97cd0d8cf7f9ae1e91e41017ff6d4c4b43a4c19b476c0b6d37f15769f954c2965ef&scene=21#wechat_redirect
Q: 決策樹連續值處理,缺失值處理.
https://blog.csdn.net/u012328159/article/details/79396893
連續屬性離散化,常用的離散化策略是二分法,這個技術也是C4.5中采用的策略。CART采用的策略是遍歷所有輸入變量j 和切分點s,根據最小化平方誤差準則選取;
連續值處理:
c4.5:給定訓練集和連續屬性a,假設a在D上出現了n個連續不同的取值,先把這些值從大到小排序,選取相鄰結點中位數作為劃分節點,然后計算不同劃分節點的信息增益,計算出當分裂點等于某個值的時候的信息增益,選擇出信息增益最大的做為分裂特征;
CART決策樹:遍歷所有輸入變量j 和切分點s,根據最小化平方誤差準則選取;
缺失值處理:缺失值處理需要注意兩個問題:
- 1.如何在屬性值缺失的情況下進行劃分屬性的選擇?
 - 2.給定劃分屬性,若樣本在該屬性上的值是缺失的,那么該如何對這個樣本進行劃分?
 
Q:GBDT的boosting體現在哪里?
Q:GBTD的分裂規則以及如何停止分裂
構建CARTA回歸樹的時候,,采用使得均方誤差最小的特征進行分裂,如果這棵樹不能擬合好,就通過負梯度計算出新的殘差來擬合新的回歸樹;
停止分裂的條件:1,節點分裂的最小樣本數 2.樹的最大深度 3.樹的最大葉子節點數 4.loss滿足約束條件
Q:RF是如何進行分裂的
1.從N個樣本中有放回的隨機選擇N個樣本,作為訓練一顆決策樹的樣本
2.當每個樣本有m個屬性的時候,在決策樹的每個節點進行分裂時,隨機從這M個屬性中選擇m個屬性,滿足條件m<<M,然后從這m個屬性中基于某種策略選擇最優屬性作為分裂節點
3.K-means
Q:k-means 聚類的原理以及缺點及對應的改進;kmeans 算法的優缺點
無監督的聚類算法。對于給定的數據集,根據樣本之間的舉距離大小,將樣本集劃分為k個簇,簇內的點盡量近,簇間的距離盡量遠
相應的改進:
初始化優化:k-meas++
距離優化:elkan K-means算法?
大數據情況下的 mni batch k-means算法
傳統k-means的流程:
- 輸入:樣本? 聚類的k? 最大迭代次數N
 - 輸出:簇劃分
 - 1) 從數據集D中隨機選擇N個樣本作為初始聚類中心
 - 2)計算每個樣本到聚類中心的距離來劃分
 - 3)再次計算每個聚類中心
 - 4)計算標準測度函數,達到最大迭代次數,則停止,否則,繼續操作
 
初始優化k-means++:
- 1)樣本中隨機選擇一個點當做初始點
 - 2)對每一個樣本點計算,計算它與已選擇的聚類中心中最近聚類中心的距離
 - 3)選擇一個大的數據點作為新的聚類中心,選擇的原則是:較大的點,被選取成為聚類中心的概率較大
 - 4)重復12直到選取出k個聚類中心
 - 5)利用這k個執行去運行標準的k-means優化算法
 
距離優化k-means算法:
傳統的k-means算法中,每輪迭代要計算所有的點到達質心的距離,這樣比較耗時,elkan是從這塊入手,目的是減少不必要的距離計算
elkan K-Means利用了兩邊之和大于等于第三邊,以及兩邊之差小于第三邊的三角形性質,來減少距離的計算。
- 第一種規律是對于一個樣本點x和兩個質心μj1,μj2。如果我們預先計算出了這兩個質心之間的距離D(j1,j2),則如果計算發現2D(x,j1)≤D(j1,j2),就可以知道D(x,j1)≤D(x,j2)。此時我們不需要再計算D(x,j2)。
 - 第二種規律是對于一個樣本點x和兩個質心μj1,μj2。我們可以得到D(x,j2)≥max{0,D(x,j1)?D(j1,j2)}。
 
- 利用上邊的兩個規律,elkan K-Means比起傳統的K-Means迭代速度有很大的提高。但是如果樣本的特征是稀疏的,有缺失值的話,這個方法就不適用了,此時某些距離無法計算,則不能使用該算法。
 
大樣本優化:大樣本優化Mini Batch K-Means
- Mini Batch,也就是用樣本集中的一部分的樣本來做傳統的K-Means,這樣可以避免樣本量太大時的計算難題,算法收斂速度大大加快。當然此時的代價就是我們的聚類的精確度也會有一些降低。一般來說這個降低的幅度在可以接受的范圍之內。
 -  
在Mini Batch K-Means中,我們會選擇一個合適的批樣本大小batch size,我們僅僅用batch size個樣本來做K-Means聚類。那么這batch size個樣本怎么來的?一般是通過無放回的隨機采樣得到的。
 -  
為了增加算法的準確性,我們一般會多跑幾次Mini Batch K-Means算法,用得到不同的隨機采樣集來得到聚類簇,選擇其中最優的聚類簇
 
優缺點:
優點:
- 1)原理比較簡單,實現也是很容易,收斂速度快。
 - 2)聚類效果較優。
 - 3)算法的可解釋度比較強。
 - 4)主要需要調參的參數僅僅是簇數k
 
缺點:
- 1)k值的選取一般需要一定的先驗知識
 - 2)收斂慢,算法復雜度高
 - 3)噪聲和離群點敏感
 - 4)結果不一定是全局最優,只能保證局部最優
 
Q:em和k-means的關系
https://www.cnblogs.com/rong86/p/3517573.html
4.貝葉斯
Q:樸素貝葉斯分類器原理以及公式,出現估計概率值為 0 怎么處理(拉普拉斯平滑)
樸素貝葉斯是基于貝葉斯定理和特征條件獨立假設的分類方法.對于給定的數據集,基于特征條件獨立假設學習輸入和輸出的聯合概率分布,然后基于此模型,對于給定的輸入x,利用貝葉斯定理求出后驗概率最大化的輸出y;
公式推導
5.神經網絡
Q:介紹下CNN (筆記)
Q:為什么CNN要用權值共享?
權值共享的概念:給定一張輸入圖片,我用一個濾波器去掃,濾波器的數叫權重,途中的每個位置都被相同的濾波器掃的,所以叫權值共享,
局部連接可以保證獲取局部信息;
權值共享保證高效-每個卷積核相當于一個特征提取器,它的任務是匹配局部圖像中的特征,權值共享后,匹配的特征方式都是一樣的,提取若干特征后就知道學習的是啥了
每一個卷積核只能提取到到一個特征。所以,卷積層會有多個卷積核,來提取不同種類的特征
Q:dropout
關于dropout:https://blog.csdn.net/program_developer/article/details/80737724
1.簡介:
在每個訓練批次中,讓某些神經元以一定的概率停止工作,這樣使得模型泛化性,更強,不會依賴于某些特定的局部特征。或者說,即使我去掉了某些節點,模型也可以從其他的特征中學習到一個共同的模式。
.
2.dropout流程
正常的神經網絡是首先把x通過網絡前向傳播,然后將誤差反向傳播決定如何更新參數讓網路進行學習。添加dropout之后,過程變成以下:
- 1.隨機刪除一些節點,輸入輸出神經元保持不變
 - 2.輸入x前向傳播,然后把得到的損失結果通過修改的網絡反向傳播,沒有刪除的結點上按照梯度下降法則更新(w,b)
 - 3.恢復刪除掉的神經元
 - 4.重復1~3步
 
3.dropout的實現
- 1.訓練模型的時候,每個單元添加一道概率流程
 - 2.測試模型的時候,每個神經元的權重參數要乘以p
 
4.為什么能減少過擬合
- dropout導致兩個神經元不一定在同一個網絡中出現,這樣模型不再依賴于固定節點的共同作用,迫使模型在缺失一些節點的情況下從其他的特征中學習到共性的特征,從而降低過擬合,這個角度看dropout就有點像L1,L2正則,減少權重使得網絡對丟失特定神經元連接的魯棒性提高。
 
Q:CNN DNN RNN
全連接DNN的結構里下層神經元和所有上層神經元都能夠形成連接,從而導致參數數量膨脹。假設輸入的是一幅像素為1K*1K的圖像,隱含層有1M個節點,光這一層就有10^12個權重需要訓練,這不僅容易過擬合,而且極容易陷入局部最優
?由于圖像中存在固有的局部模式(如人臉中的眼睛、鼻子、嘴巴等),所以將圖像處理和神將網絡結合引出卷積神經網絡CNN。CNN是通過卷積核將上下層進行鏈接,同一個卷積核在所有圖像中是共享的,圖像通過卷積操作后仍然保留原先的位置關系。
DNN無法對時間序列上的變化進行建模。然而,樣本出現的時間順序對于自然語言處理、語音識別、手寫體識別等應用非常重要。為了適應這種需求,就出現了大家所說的另一種神經網絡結構——循環神經網絡RNN。
Q:梯度消失?
概念:權重更新時,靠近輸出層的權重更新相對正常,靠近輸入層的權值幾乎不變,這時dnn的學習相當于只有后幾層的網絡在學習。
原因:網絡中使用sigmodi函數的時,sigmiod的導數取值范圍在(0,1)之間,反向傳播時,逐層偏導相乘,當網絡的層數很深的時候,最后幾層偏導相乘的梯度幾乎為0,從而導致很淺的權重沒有更新。
CNN和RNN的梯度消失一樣嗎‘?’CNN因為網絡層數太多導致,RNN因為時間迭代次數導致,都是因為鏈式求導次數太多。
給定一個輸入,算輸出的feature map大小?
卷積有啥用,padding有啥用?https://www.cnblogs.com/wj-1314/p/9593364.html
- 輸入層:預處理操作,去均值,歸一化,SVD/PCA降維
 - 卷積層:提取特征
 - pooling:
 - ? ? ? 降維,縮減模型大小,提高計算速度
 - ? ? ? 降低過擬合概率,提升特征抽取魯棒性
 - ? ? ? 對平移和旋轉不敏感
 
Q:梯度爆炸?
初始的權重過大,靠近輸入層的權值變化相對于靠近輸出層的變化要快,就會引起梯度爆炸的問題。在DNN中,誤差梯度在更新中累計,造成很大的梯度,導致網絡權重的大幅度更新,極端情況下,權重的值會非常大,以至于溢出,網絡層之間的梯度(值大于?1.0)重復相乘導致的指數級增長會產生梯度爆炸。
Q:BN層的優點
https://blog.csdn.net/malefactor/article/details/51476961?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase
https://blog.csdn.net/hjimce/article/details/50866313?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
Q:全連接
全連接層則起到將學到的“分布式特征表示”映射到樣本標記空間的作用
6.聚類算法
?
總結
                            
                        - 上一篇: php中文分词nlp,几种常见的PHP中
 - 下一篇: IDEA云行项目提示Error: jav