機器學習面試問題集(2018-3-13更新)
1 基礎概念
1.1 熵、聯合熵、條件熵、交叉熵與相對熵的意義?
1.2 歸一化方法?
1、線性函式歸一化(Min-Max scaling)
線性函式將原始資料線性化的方法轉換到[0 1]的範圍,歸一化公式如下:
2、0均值標準化(Z-score standardization)
均值歸一化方法將原始資料集歸一化為均值為0、方差1的資料集,歸一化公式如下:
1.3 準確率,召回率,F值,ROC,AUC?
準確率
理解為你預測對的正例數佔你預測正例總量的比率
召回率
理解為你預測對的正例數佔真正的正例數的比率
F值
為準確率和召回率的調和平均值
ROC和AUC
1.4 過擬合與正則化
1.4.1 為什麼過擬合不好?
訓練集中的資料有噪音,過擬合會學習到這些噪音,導致泛化效能變差。
1.4.2 正則化
缺點:L1,不好求導。 L2,本質上是在對原來的w根據一定比例縮小,然而原來w中大權重縮小後還是比原來小的權重大。解決方法—— 權消去正則化:
1.5 優化方法
描述梯度下降?
牛頓法 擬牛頓法?
牛頓法
擬牛頓法
DFP
BFGS
1.6 各演算法的優缺點
演算法 | 優點 | 缺點 |
---|---|---|
KNN | 1.簡單、有效。2.重新訓練的代價較低(類別體系的變化和訓練集的變化,在Web環境和電子商務應用中是很常見的)3.計算時間和空間線性於訓練集的規模(在一些場合不算太大)4.由於KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合。5.該演算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種演算法比較容易產生誤分。 | 1.KNN演算法是懶散學習方法(lazy learning,基本上不學習),一些積極學習的演算法要快很多。2.類別評分不是規格化的(不像概率評分)。3.輸出的可解釋性不強,例如決策樹的可解釋性較強。4.該演算法在分類時有個主要的不足是,當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。該演算法只計算“最近的”鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響執行結果。可以採用權值的方法(和該樣本距離小的鄰居權值大)來改進。5.計算量較大。目前常用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本。 |
樸素貝葉斯 | 1.樸素貝葉斯模型發源於古典數學理論,有著堅實的數學基礎,以及穩定的分類效率。2.NBC模型所需估計的引數很少,對缺失資料不太敏感,演算法也比較簡單,常用於文字分類。3.對小規模的資料表現很好,能個處理多分類任務,適合增量式訓練,尤其是資料量超出記憶體時,我們可以一批批的去增量訓練。 | 1.理論上,NBC模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因為NBC模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的(可以考慮用聚類演算法先將相關性較大的屬性聚類),這給NBC模型的正確分類帶來了一定影響。在屬性個數比較多或者屬性之間相關性較大時,NBC模型的分類效率比不上決策樹模型。而在屬性相關性較小時,NBC模型的效能最為良好。2.需要知道先驗概率,且先驗概率很多時候取決於假設,假設的模型可以有很多種,因此在某些時候會由於假設的先驗模型的原因導致預測效果不佳。3.由於我們是通過先驗和資料來決定後驗的概率從而決定分類,所以分類決策存在一定的錯誤率。4.對輸入資料的表達形式很敏感。 |
決策樹 | 1.決策樹易於理解和解釋.人們在通過解釋後都有能力去理解決策樹所表達的意義。2.對於決策樹,資料的準備往往是簡單或者是不必要的.其他的技術往往要求先把資料一般化,比如去掉多餘的或者空白的屬性。3.能夠同時處理資料型和常規型屬性。其他的技術往往要求資料屬性的單一。4.決策樹是一個白盒模型。如果給定一個觀察的模型,那麼根據所產生的決策樹很容易推出相應的邏輯表示式。5.易於通過靜態測試來對模型進行評測。表示有可能測量該模型的可信度。6.在相對短的時間內能夠對大型資料來源做出可行且效果良好的結果。7.可以對有許多屬性的資料集構造決策樹。8.決策樹可很好地擴充套件到大型資料庫中,同時它的大小獨立於資料庫的大小。 | 1.對於那些各類別樣本數量不一致的資料,在決策樹當中,資訊增益的結果偏向於那些具有更多數值的特徵。2.決策樹處理缺失資料時的困難。3.過度擬合問題的出現。4. 忽略資料集中屬性之間的相關性。 |
支援向量機 | 1.可以解決小樣本情況下的機器學習問題。2.可以提高泛化效能。3.可以解決高維問題。4.可以解決非線性問題。5.可以避免神經網路結構選擇和區域性極小點問題。 | 1.對缺失資料敏感。2.對非線性問題沒有通用解決方案,必須謹慎選擇Kernel function來處理。 |
Adaboosting | 1.adaboost是一種有很高精度的分類器。2.可以使用各種方法構建子分類器,Adaboost演算法提供的是框架。3.當使用簡單分類器時,計算出的結果是可以理解的。而且弱分類器構造極其簡單。4.簡單,不用做特徵篩選。5.不用擔心overfitting。 | |
神經網路 | 1.分類的準確度高2.並行分佈處理能力強,分佈儲存及學習能力強3.對噪聲神經有較強的魯棒性和容錯能力4.能充分逼近複雜的非線性關係5.具備聯想記憶的功能等。 | 1.神經網路需要大量的引數,如網路拓撲結構、權值和閾值的初始值2.不能觀察之間的學習過程,輸出結果難以解釋,會影響到結果的可信度和可接受程度3.學習時間過長,甚至可能達不到學習的目的。 |
1.7 機器學習專案流程?
- 理解實際問題。抽象為機器學習能處理的數學問題 理解實際業務場景問題是機器學習的第一步,機器學習中特徵工程和模型訓練都是非常費時的,深入理解要處理的問題,能避免走很多彎路。
- 獲取資料。“ 資料決定機器學習結果的上限,而演算法只是儘可能的逼近這個上限”。總的來說資料要有具有“代表性”,對於分類問題,資料偏斜不能過於嚴重,不同類別的資料數量不要有數個數量級的差距。不僅如此還要對評估資料的量級,樣本數量、特徵數量,估算訓練模型對記憶體的消耗。如果資料量太大可以考慮減少訓練樣本、降維或者使用分散式機器學習系統。
- 特徵工程
特徵工程包括從原始資料中特徵構建、特徵提取、特徵選擇,非常有講究。深入理解實際業務場景下的問題,豐富的機器學習經驗能幫助我們更好的處理特徵工程。特徵工程做的好能發揮原始資料的最大效力,往往能夠使得演算法的效果和效能得到顯著的提升,有時能使簡單的模型的效果比複雜的模型效果好。資料探勘的大部分時間就花在特徵工程上面,是機器學習非常基礎而又必備的步驟。資料預處理、資料清洗、篩選顯著特徵、摒棄非顯著特徵等等都非常重要。 - 模型訓練、診斷、調優
模型診斷中至關重要的是判斷過擬合、欠擬合,常見的方法是繪製學習曲線,交叉驗證。通過增加訓練的資料量、降低模型複雜度來降低過擬合的風險,提高特徵的數量和質量、增加模型複雜來防止欠擬合。診斷後的模型需要進行進一步調優,調優後的新模型需要重新診斷,這是一個反覆迭代不斷逼近的過程,需要不斷的嘗試,進而達到最優的狀態。 - 模型驗證、誤差分析
通過測試資料,驗證模型的有效性,觀察誤差樣本,分析誤差產生的原因,往往能使得我們找到提升演算法效能的突破點。誤差分析主要是分析出誤差來源與資料、特徵、演算法。 - 模型融合
提升演算法的準確度主要方法是模型的前端(特徵工程、清洗、預處理、取樣)和後端的模型融合。
1.8 樣本不均衡問題
主要三個方面,資料,模型和評估方法。
資料上重取樣和欠取樣,使之均衡;
模型上選對樣本不均衡問題不敏感的模型,如決策樹;
評估方法,想之前所說查全率,查準率之類。
1.9 損失函式
- 0-1損失
- 感知損失
- Hinge損失
- log損失、交叉熵
- 平方損失
- 指數損失
- 絕對值損失
2 監督學習
2.1 樸素貝葉斯
描述樸素貝葉斯?
樸素貝葉斯對輸入的資料有何要求?
樸素貝葉斯對輸入資料的表達形式敏感。NBC模型假設屬性之間相互獨立。
極大似然估計與EM演算法的區別?
極大似然估計
上式可以理解為,右邊為在向量c條件下得到資料集的概率,那麼它便等於左邊的向量c條件下得到資料集中各條資料的概率的乘積。
EM演算法
屬性之間不完全相互獨立,如何優化?
2.2 決策樹
2.2.1 如何劃分節點?
- p(x):分類結果x的概率,即分類結果為x的資料量/總資料量
- 資訊:l(x) = -log2(p(x))
- 資訊熵:資訊的期望值 p(x1)l(x1) + p(x2)l(x2) + …… ,可以評價一組不同類別的劃分結果的混沌度。
計算資訊增益,選擇資訊增益最大的特徵:
2.2.2 如何做剪枝?
2.2.3 資訊增益缺點?
2.2.4 基尼係數?
2.2.5 決策樹 有哪些類?哪些適合做gbdt ?
決策樹有ID3演算法,2.2.1 所描述的就是ID3演算法。除了ID3演算法外,還有C4.5演算法,C4.5和ID3的不同是使用了資訊增益率,解決了2.2.3 所講的資訊增益的缺點。但是,GBDT使用的樹是迴歸樹。迴歸樹演算法有CART的最小二乘迴歸樹:
CART的分類樹思想與迴歸樹類似,不同的是 需要優化的是 2.2.4 所示的基尼係數。
2.3 SVM
2.3.1 推導svm?
2.3.2 支撐向量是什麼?
那些在間隔區邊緣的訓練樣本點
2.3.3 svm的損失函式?
2.3.4 如何解決線性不可分的情況?
- 少數點不可分,加入鬆弛變數。
- 整體都不可分的話,核函式對映到高維空間使得線性可分
2.3.5 SVM與邏輯迴歸的聯絡與區別?
軟間隔SVM與邏輯迴歸的聯絡?
損失函式
軟間隔SVM表示樣本資料不必要求全部正確分類,允許少量的資料點犯錯。於是將硬間隔SVM的優化目標由:
在上面的優化目標中加上了懲罰項,C越大懲罰越大允許的錯誤越小。但是直接使用0/1損失函式的話其非凸、非連續,數學性質不好優化起來比較複雜,因此需要使用其他的數學效能較好的函式進行替換,替代損失函式一般有較好的數學性質。常用的三種替代函式:
一般的軟間隔SVM採用的是hinge損失函式(合頁損失函式)進行替代,可以得到常見的軟體的SVM的優化目標函式。如果採用的是對數損失函式進行替代那麼就和邏輯迴歸的優化目標幾乎相同,這就得到了軟間隔SVM與邏輯迴歸的數學上的聯絡,因此一般來說SVM的效能和邏輯迴歸的效能差不多。
軟間隔SVM與邏輯迴歸的區別
- 邏輯迴歸通過輸出預測概率後根據閾值進行判斷類別,SVM則直接輸出分割超平面,然後使用0/1函式對距離進行分類,不能直接輸出概率值,如果需要SVM輸出概率值則需要進行特殊處理,可以根據距離的大小進行歸一化概率輸出。
- 邏輯迴歸可以使用多閾值然後進行多分類,SVM則需要進行推廣。
- SVM在訓練過程只需要支援向量的,依賴的訓練樣本數較小,而邏輯迴歸則是需要全部的訓練樣本資料,在訓練時開銷更大。
2.3.6 核函式有哪些?
2.4 整合學習
2.4.1 gbdt
2.4.1.1 gbdt、rf的區別?
3 無監督學習
3.1 k-means
3.1.1 k-means 是時間、空間複雜度?
時間複雜度:O(T * n * k * m)
空間複雜度:O(( n + k ) * m)
n:元素個數,k:聚類中心數,m:每個元素的特徵項個數,T:迭代的次數
4 深度學習
4.1 神經網路
4.1.1 描述神經網路?推導反向傳播?
4.1.2 對比啟用函式(注意優缺點)?
4.1.3 描述dropout?
4.1.4 什麼情況下,淺層神經網路更好?什麼情況下,深層神經網路更好?
淺層神經網路 | 深層神經網路 |
---|---|
更加有效的訓練 | 難以訓練 |
更簡單的結構選擇 | 複雜的結構選擇 |
更具有理論依據,但可能難以提取特徵 | 更加武斷的依據,簡化特徵提取 |
適合多項式組合比較明確的情況下 | 適合多項式組合複雜未知的情況下 |
4.1.5 梯度消失產生的原因?
反向傳播,前一層的梯度是由後一層梯度的乘積計算得到。假如每一層上的梯度小於1,越乘越小,到最前面的層就會梯度消失。
S型神經元,在01附近梯度很小,而w和b的梯度是有S函式的梯度因式,從而導致梯度變小。
4.2 CNN
4.2.1 feature map 計算?
(n+2p-f)/s + 1
- n:上一層長
- p:填充數
- f:過濾器長
- s:步長
4.2.2 池化層
常見的池化方式有哪些?
最大池,平均池,l2池
檢測影象的紋理,用什麼池化層?
max-pooling,可以進行資訊壓縮,不關心紋理的具體位置,而是否出現,大概在哪。
池化層作用
- invariance(不變性),這種不變性包括translation(平移),rotation(旋轉),scale(尺度)
- 保留主要的特徵同時減少引數(降維,效果類似PCA)和計算量,防止過擬合,提高模型泛化能力
4.3 LSTM
- 遺忘門限
- 輸入門限
- 輸出門限
5 平臺架構
5.1 Spark
5.1.1 spark 為什麼不適合做神經網路?
(待~)
5.2 Tensorflow
5.2.1 描述下 Tensorflow 的基本架構?
6 業務場景題
問題一
資料格式: (使用者特徵,商品特徵),預測使用者是否會購買該商品?
這裡給出之前在導師公司做的一個解決方法:
1.根據使用者特徵,按照一定規則給使用者打上基礎標籤。
2.根據基礎標籤,做聚類,得到K個聚類中心。
3.各個聚類中心下的各個使用者的所有(商品特徵,是否購買)作為訓練集,訓練出K個二分類模型。
4.測試資料根據其使用者特徵與各中心的距離,將其歸為最近的聚類重心C下。根據商品特徵,使用對應的二分類模型,進行預測。
問題二
打車軟體從定價到下單,預測轉化率,可以做哪些特徵?