【演算法工程師】機器學習面試問題總結
我發現我的基礎真的很差勁 ?,I feel bad bad~
後期我發現還是需要把相關文章的連結放上來的,方便大家深入理解記憶,如果你沒時間就直接看文字,如果有時間記得把連結點開看看哦~都是大佬的精華~
一切為了暑期實習!!!
一切為了暑期實習!!!
一切為了暑期實習!!!
機器學習
SVM(重點)
1. SVM原理和推導
- 原理:SVM試圖尋找一個超平面使正負樣本分開,並使得幾何間隔最大。
⚠️(注意分清以下這三種情況)
當訓練樣本線性可分時,通過硬間隔最大化,學習一個線性分類器,即線性可分SVM
當訓練樣本近似線性可分時,引入鬆弛變數,通過軟間隔最大化,學習一個線性分類器,即線性SVM
當訓練樣本線性不可分時,通過核技巧和軟間隔最大化,學習一個非線性分類器,即非線性SVM
- 推導(十分重要)我自己寫的,字很隨意啦~
2. SVM 為什麼要引入拉格朗日的優化方法
將拉格朗日對偶性應用到求解原始問題上,通過求解對偶問題進而求得原始問題的最優解,原因有二:
- 對偶問題往往更容易求解;
- 自然引入核函式,繼而推廣到非線性分類問題。
3. 為什麼要選擇最大間隔分類器?
- 從數學上考慮:
誤分類次數和幾何間隔之間存在下列關係,幾何間隔越大,誤分類次數越少。
- 感知機利用誤分類最小策略,求得分離超平面,不過此時解有無數個;而線性可分SVM利用間隔最大求得最優分離超平面,求得唯一解,而且此時的模型魯棒性好,對未知樣本泛化能力最強。
4. 樣本失衡會對SVM的結果產生影響嗎?如何解決SVM樣本失衡問題?樣本比例失衡時,使用什麼指標評價分類器的好壞?
- 樣本失衡會對結果產生影響,分類超平面會靠近樣本少的類別。原因:因為使用軟間隔最大化,假設對所有類別使用相同的懲罰因子,而優化目標是最小化懲罰量,所以靠近樣本少的類別懲罰量少。
- 解決SVM樣本失衡問題方法:
- 對不同的類別賦予不同的懲罰因子(C),訓練樣本越少,C越大。缺點:偏離原始樣本的概率分佈。
- 對樣本的少的類別,基於某種策略進行取樣。
- 基於核函式解決問題。
- 當樣本比例不均衡時,使用ROC曲線。
5. SVM如何解決多分類問題
- 直接法:直接修改目標函式,將多個分類面的引數求解合併到一個目標函式上,一次性進行求解。
- 間接法:
- One VS One:任意兩個樣本之間訓練一個分類模型,假設有k類,則需要k(k-1)/2個模型。對未知樣本進行分類時,得票最多的類別即為未知樣本的類別。libsvm使用這個方法。
- One VS Rest:訓練時依次將某類化為類,將其他所有類別劃分為另外一類,共需要訓練k個模型。訓練時具有最大分類函式值的類別是未知樣本的類別。
6. SVM適合處理什麼樣的資料?
高維、稀疏、樣本少的資料。
7. SVM為什麼對缺失資料敏感?(資料缺失某些特徵)
- SVM沒有缺失值的處理策略;
- SVM希望樣本在特徵空間中線性可分,特徵空間的好壞影響SVM效能;
- 缺失特徵資料影響訓練結果。
8. sklearn.svm引數
- 栗子:
class sklearn.svm.SVC(
C=1.0,
kernel='rbf',
degree=3,
gamma='auto',
coef0=0.0,
shrinking=True,
probability=False,
tol=0.001,
cache_size=200,
class_weight=None,
verbose=False,
max_iter=-1,
decision_function_shape='ovr',
random_state=None
)
- 重要引數:(理解含義和對模型的影響)
-
C : float, optional (default=1.0)
誤差項的懲罰引數,一般取值為10的n次冪,如10的-5次冪,10的-4次冪…10的0次冪,10,1000,1000,在python中可以使用pow(10,n) n=-5~inf
C越大,相當於懲罰鬆弛變數,希望鬆弛變數接近0,即對誤分類的懲罰增大,趨向於對訓練集全分對的情況,這樣會出現訓練集測試時準確率很高,但泛化能力弱。
C值小,對誤分類的懲罰減小,容錯能力增強,泛化能力較強。 -
kernel : string, optional (default=’rbf’)
svc中指定的kernel型別。
可以是: ‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’ 或者自己指定。 預設使用‘rbf’ 。 -
degree : int, optional (default=3)
當指定kernel為 ‘poly’時,表示選擇的多項式的最高次數,預設為三次多項式。
若指定kernel不是‘poly’,則忽略,即該引數只對‘poly’有作用。 -
gamma : float, optional (default=’auto’)
當kernel為‘rbf’, ‘poly’或‘sigmoid’時的kernel係數。
如果不設定,預設為 ‘auto’ ,此時,kernel係數設定為:1/n_features -
coef0 : float, optional (default=0.0)
kernel函式的常數項。
只有在 kernel為‘poly’或‘sigmoid’時有效,預設為0。
-
9. libSVM都使用的是哪些引數?怎麼調參的?
10. SMO演算法實現SVM(思想、步驟、常見問題)(我這個還不熟悉,mark)
- 思想:將大的優化問題分解為多個小的優化問題,求解小的優化問題往往更簡單,同時順序求解小問題得出的結果和將他們作為整體求得的結果一致。
- 步驟:1. 選取一對需要更新的變數ai和aj(阿爾法)2. 固定除ai和aj以外的所有變數,求解對偶問題獲得更新ai、aj、b。
- 常見問題—如何選取ai和aj和b?
- 選取違反KKT條件最嚴重的ai,在針對這個ai選擇最有可能獲得較大修正步長的aj;
- b一般選取支援向量求解的平均值。
11. SVM如何解決非線性問題?你所知道的核函式?
- 當樣本在原始空間線性不可分時,可將樣本從原始空間對映到一個更高維的特徵空間,使得樣本在這個特徵空間內線性可分。
- 常用核函式(重點sigmoid、RBF(名字一定要記住啦:高斯徑向基核函式)、要會寫核函式的公式哦~)
12. 線性核與RBF核的區別?
- 訓練速度:線性核只有懲罰因子一個引數,訓練速度快,RBF還需要調節gamma;
- 訓練結果:線性核得到的權重w能反映出特徵的重要性,由此進行特徵選擇,RBF無法解釋;
- 訓練資料:線性核適合樣本特徵>>樣本數量的,RBF核相反。
13. SVM和LR的聯絡和區別
- 聯絡:
- 都是判別式模型
- 都是有監督的分類演算法
- 如果不考慮核函式,都是線性分類演算法
- 區別:
- LR可以輸出概率,SVM不可以
- 損失函式不同,即分類機制不同
- SVM通過引入核函式解決非線性問題,LR則不是
原因:LR裡每個樣本點都要參與核計算,計算複雜度太高,故LR通常不用核函式。
- SVM計算複雜,效果比LR好,適用於小資料集;LR計算快,適用於大資料集,用於線上學習
- SVM分類只與分類超平面附近的點有關,LR與所有點都有關係
- SVM是結構風險最小化,LR則是經驗風險最小化
結構風險最小化就是在訓練誤差和模型複雜度之間尋求平衡,防止過擬合,減小泛化誤差。為了達到結構風險最小化的目的,最常用的方法就是新增正則項。
14. SVM如何防止過擬合?
通過引入鬆弛變數,鬆弛變數可以容忍異常點的存在。
15. KKT(Karysh-Kuhn-Tucker)條件有哪些,完整描述?
16. SVM的損失函式—Hinge Loss(合頁損失函式)
- hinge loss影像
- 表示式
整合學習(重點)
1. 決策樹和隨機森林的區別
決策樹 + Bagging + 隨機選擇特徵 = 隨機森林,隨機森林可以有效防止過擬合。
2. 隨機森林裡面用的哪種決策樹
CART 決策樹或其他
3. 隨機森林的原理?如何進行調參?樹的深度一般如何確定,一般為多少?
- 原理:RF是一種整合演算法,屬於bagging類,它通過整合多個決策樹模型,通過對基模型的結果採用投票法或者取平均來獲得最終結果,使得最終模型有較高的準確度和泛化效能。
- 調參:
還是看劉建平老師的這篇:https://www.cnblogs.com/pinard/p/6160412.html
RF和GBDT調參過程類似,可以對比記憶:
無引數擬合–>n_estimators調參–>max_depth, min_sample_split–>min_sample_split, min_samples_leaf–>max_features
- 如何確定樹的深度:當訓練樣本多,資料特徵維度多的時候需要限制這個引數,具體取決於資料分佈,一般在10-100之間。
3. Bagging 和 Boosting的區別
- 樣本選擇:Bagging有放回的選取訓練集,並且從原始資料集中選取的各輪訓練集之間相互獨立;Boosting每次都使用全部資料,只是每個樣例的權重不同。
- 樣例權重:Bagging採用均勻取樣,每個樣例的權重相同;Boosting每輪訓練都依據上一輪訓練結果更新樣例權重,錯誤率越大的樣例,權重越大。
- 預測函式:Bagging每個基函式的預測結果權重相同;Boosting中預測誤差越小的基模型有更大的權重。
- 偏差和方差:Bagging得出的結果低方差,Boosting低偏差。
- 平行計算:Bagging可以並行生成基模型,Boosting各個預測函式只能順序生成,後一輪模型的引數需要前一輪的預測結果。
4. GBDT調參
我覺得啊,一般面試官如果問我們這種題目,一定是要求我們使用過這個演算法,如果使用過就要理解記住,沒使用過就坦誠的說沒用過,大家可以跟著下面這個連結的劉建平老師學習一遍。
- 引數分類:
- Boosting框架引數:n_estimators, learning_rate, subsample
- CART迴歸樹引數(與決策樹類似):max_features, max_depth, min_sample_split, min_samples_leaf
- 大致步驟:
無引數擬合–>固定learning_rate,estimators調參–>max_depth, min_sample_split–>min_sample_split, min_samples_leaf–>擬合檢視–>max_features–>subsample–>不斷減小learning_rate,加倍estimators來擬合
5. RF、GBDT之間的區別(重要)
此問題充分理解,你需要這些:
https://blog.csdn.net/data_scientist/article/details/79022025
https://blog.csdn.net/xwd18280820053/article/details/68927422
https://blog.csdn.net/m510756230/article/details/82051807
- 相同點:都是由多棵樹組成,結果由多棵樹共同決定。
- 不同點:
- GBDT是迴歸樹,RF可以是迴歸樹也可以是分類樹;
- GBDT對異常值特別敏感,RF則沒有;
- GBDT只能序列生成多個模型,RF可以並行;
- GBDT的結果有多個結果求和或者加權求和,RF是由投票選出結果;
- GBDT是通過減少偏差來提高模型效能,RF是通過減少方差;
- RF對所有訓練集一視同仁,GBDT是基於權值的弱分類器。
6. 隨機森林的優缺點
- 優點:
- 相比於其他演算法,在訓練速度和預測準確度上有很大的優勢;
- 能夠處理很高維的資料,不用選擇特徵,在模型訓練完成後,能夠給出特徵的重要性;
- 可以寫成並行化方法;
- 缺點:在噪聲較大的分類迴歸問題上,容易過擬合。
7. GBDT的關鍵?GBDT中的樹是什麼樹?
- 關鍵:利用損失函式的負梯度方向作為殘差的近似值來擬合新的CART迴歸樹。
- CART迴歸樹。
8. GBDT和XGB的區別
以下主語均為XGB:
- 自動利用CPU多執行緒;
- 支援線性分類器,此時XGB相當於正則化的邏輯斯特迴歸(分類)和線性迴歸(迴歸);
- 損失函式加入正則化,控制模型複雜度,使模型簡單,防止過擬合;
- 自動處理缺失值;
如何處理的缺失值:
Xgboost 在處理帶缺失值的特徵時,先對非缺失的樣本進行排序,對該特徵缺失的樣本先不處理,然後在遍歷每個分裂點時,將這些缺失樣本分別劃入左子樹和右子樹來計算損失然後求最優。如果訓練樣本中沒有缺失值,而預測過程中出現了缺失值,那麼樣本會被預設分到右子樹。
- 利用二階導數進行優化;
- 支援“特徵”粒度上的並行。
請解釋xgboost是如何進行並行加速的。
XGBoost 的並行不是 tree 粒度的並行,XGBoost 也是一次迭代完才能進行下一次迭代的(第 t 次迭代的代價函式裡包含了前面t-1次迭代的預測值)。
XGBoost 的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因為要確定最佳分割點),XGBoost 在訓練之前,預先對資料進行了排序,然後儲存為 block 結構,後面的迭代中重複地使用這個結構,大大減小計算量。這個 block 結構也使得並行成為了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多執行緒進行。
9. LGB和XGB的區別(抓住主要區別,理解要有深度)
lgb官方文件:http://lightgbm.apachecn.org/#/docs/4
https://www.cnblogs.com/infaraway/p/7890558.html
-
樹的切分策略不同:
- xgb基於level-wise,對每一層節點進行無差別分裂,造成不必要的開銷;
- lgb基於leaf-wise,在當前所有葉子節點中選擇分裂增益最大的節點進行分裂;
-
實現並行方式不同:
- xgb使用基於 pre-sorted 決策樹演算法;
- lgb使用基於histogram決策樹演算法,對離散特徵進行分裂時,特徵的每個取值為一個桶;
-
lgb支援直接輸入categorical feature,對類別特徵無須進行one-hot處理;
-
優化通訊代價不同:lgb支援特徵並行、資料並行。
10. GBDT的演算法步驟(我沒找到推導呢)
10. 隨機森林生成過程
- 樣本集選擇:從原始樣本中有放回的抽取N個訓練集,各個訓練集之間相互獨立,共進行k輪抽取;
- 決策樹生成:假設特徵空間共有D個特徵,隨機選擇d個特徵,構成新的特徵空間,用於訓練單棵決策樹,共k輪,生成k棵決策樹;
- 模型合成:生成的k棵決策樹相互獨立,各個基模型之間權重相同,如果是分類問題,則使用投票法決定最終結果,如果是迴歸問題,則使用平均法;
- 模型驗證:模型驗證本身需要驗證集,但在此處我們無須額外設定驗證集,只需使用原始樣本中沒有使用過的即可。
11. xgboost如何確定特徵和分裂點的?
XGBoost使用了和CART迴歸樹一樣的想法,利用貪婪演算法。基於目標函式,遍歷所有特徵的所有特徵劃分點,具體做法就是分裂後的目標函式值大於分裂之前的就進行分裂。
12. XGB是如何給出特徵重要性評分的?
建議多看下以下連結:
https://blog.csdn.net/waitingzby/article/details/81610495
https://blog.csdn.net/sujinhehehe/article/details/84201415
https://www.cnblogs.com/haobang008/p/5929378.html
- 特徵權重(weight):指的是在所有樹中,某特徵被用來分裂節點的次數;
- 如何計算:一個特徵對分裂點效能度量(gini或者其他)的提升越大(越靠近根節點)其權重越大,該特徵被越多提升樹選擇來進行分裂,該特徵越重要,最終將一個特徵在所有提升樹中的結果進行加權求和然後求平均即可。
- 原始碼片段(加深理解):
主要是對每個特徵進行計數操作:if importance_type == 'weight': # do a simpler tree dump to save time trees = self.get_dump(fmap, with_stats=False) fmap = {} for tree in trees: for line in tree.split('\n'): # look for the opening square bracket arr = line.split('[') # if no opening bracket (leaf node), ignore this line if len(arr) == 1: continue # extract feature name from string between [] fid = arr[1].split(']')[0].split('<')[0] if fid not in fmap: # if the feature hasn't been seen yet fmap[fid] = 1 else: fmap[fid] += 1 return fmap
13. 請解釋一下LGB或者XGB的原理
14. XGB如何消除殘差的,目標函式是什麼?
EM演算法
1. 採用EM演算法求解的模型有哪些?為什麼不用牛頓法或者梯度下降法?(感覺第二個問題有點錯誤,mark)
- 高斯混合模型、協同過濾、KMeans
- 求和的項隨著隱變數的數量隨指數上升,梯度計算帶來麻煩,而EM是非梯度優化演算法。
2. 用EM演算法推導解釋KMeans
KMeans中,每個聚類簇的中心就是隱含變數。
E步:隨機初始化k個聚類中心
M步:計算每個樣本點最近的質心,並將他聚類到這個質心
重複以上兩步,直到聚類中心不發生變化為止。
決策樹
1. ID3和C4.5的優缺點
ID3 | C4.5 | |
---|---|---|
優點 | 實現簡單 | 1. 可以處理連續型特徵 2. 易於理解,準確率高 |
缺點 | 1. 只能處理離散特徵 2. 傾向於選擇取值較多的特徵 | 1. 在構造樹的過程中,對資料多次掃描排序,低效 2. 只能夠用於駐留在記憶體中的資料,當資料大到無法在記憶體容納時,程式無法執行 |
2. 決策樹處理連續值的方法
連續屬性離散化,常用的離散化策略是二分法(C4.5):
3. 決策樹的剪枝策略
- 目的:簡化決策樹模型,提高模型泛化能力;
- 基本思想:減去某些子樹和葉節點,將其根節點作為新的葉子節點,實現簡化模型。
- 損失函式:
- 剪枝策略:
- 預剪枝:在構造決策樹的過程中,在對節點劃分之前進行估計,若劃分後不能帶來決策樹效能和泛化能力的提升,則不進行劃分,並將此節點作為葉節點。
- 後剪枝:構造完決策樹之後,自底向上搜尋,對每個非葉節點進行考察,若將該子樹去除變為葉節點能帶來決策樹泛化效能的提升,則將該節點作為葉節點。
- 對比:後剪枝的分支比預剪枝的分支要多一些,不容易欠擬合,泛化能力強,但是由於後剪枝在構造完成決策樹之後,而且還需要自底向上進行搜尋故時間開銷大。
決策樹的構造過程
- 特徵選擇:在所有特徵中選擇一個特徵,作為當前節點的劃分標準:ID3(資訊增益)、C4.5(資訊增益比)、CART(gini係數);
- 決策樹生成:依據特徵評估標準,從上到下的遞迴的生成子節點,直到資料集不可分時,停止生長;
- 剪枝:決策時容易過擬合,通過剪枝,簡化模型,降低過擬合。
基於樹的模型有必要做標準化嗎?
不必要;概率模型(樹模型)只關心變數的分佈和變數之間的條件概率。
CART迴歸樹和CART決策樹的構造過程
特徵選擇+決策樹構造+決策樹剪枝
- cart迴歸樹
cart迴歸樹對某個特徵的每個分量,將資料集劃分為大於該分量和小於該分量兩部分,同時計算對應y的均值,並計算均方誤差函式的值,選擇具有最小誤差值的分量,並將其作為劃分標準,重複該流程知道資料集為空或者前後均方誤差下降值小於給定閾值則停止。 - cart分類樹
選擇具有最小的GINI係數的屬性和屬性值,作為最優分裂屬性和最優分裂屬性值。
樸素貝葉斯
1. 樸素貝葉斯的公式
“樸素”的含義:假設各個特徵之間相互獨立。
2. NB原理及其分類
- 原理:根據貝葉斯公式,通過某物件的先驗概率,計算其後驗概率,並選擇後驗概率最大的類作為該物件所屬於的類;
- 分類:(根據變數的分佈不同)
- NB的伯努利模型,特徵是布林變數,符合0/1分佈,在文字分類中,特徵就是詞是否出現;
- NB的多項式模型,特徵是離散值,符合多項式分佈,在文字分類中,特徵就是詞出現的次數;
- NB的高斯模型,特徵是連續值,符合高斯分佈(高斯分佈又名正態分佈),在文字分類中,特徵就是詞的TF-IDF值。
3. NB的優缺點
- 優點:
- 演算法原理簡單;
- 所估計的引數少;
- 假設條件概率計算是彼此獨立的,因此可以用於分散式計算;
- 屬於生成式模型,收斂速度比判別式模型要快;
- 對缺失資料不太敏感;
- 天然可以處理多分類問題。
- 缺點:
- 假設各個特徵之間相互獨立這一條件在實際應用中往往是不能成立的;
- 不能學習到特徵之間的相互作用;
- 對輸入資料的表達形式敏感。
4. LR和樸素貝葉斯(NB)之間的區別
5. 適用場景
- 支援大規模資料,並且支援分散式實現;
- 特徵維度可以很高;
- 可以處理數值型特徵和類別型特徵;
線性迴歸與邏輯迴歸
1. LR推導(重要)
幾個小問題:
- 極大似然的概念:找到引數θ的一個估計值,使得當前樣本出現的可能性最大。
- 為什麼極大似然的時候可以相乘:特徵之間是獨立同分布。
- LR的引數計算方法:梯度下降。
2. 邏輯迴歸和線性迴歸的區別
線性迴歸 | 邏輯迴歸 |
---|---|
對連續值預測 | 分類 |
最小二乘法 | 最大似然估計 |
擬合函式 | 預測函式 |
3. 最小二乘法和最大似然法的區別(沒太明白,mark)
4. 為什麼用最小二乘而不是最小四乘(沒太明白,mark)
5. 介紹一下邏輯迴歸?它的損失函式是什麼?
- 一句話介紹邏輯迴歸:邏輯迴歸假設資料服從伯努利分佈,通過極大化似然函式,利用梯度下降演算法來求得引數,實現資料的二分類。
- 它的損失函式是它的極大似然函式:
6. LR 損失函式為什麼用極大似然函式?
https://blog.csdn.net/aliceyangxi1987/article/details/80532586
- LR的目標是使每個樣本的預測都有最大概率,即將所有樣本預測後的概率相乘概率最大,這就是極大似然函式;
- 極大似然函式取對數即為對數損失函式,對數損失函式的訓練求解引數比較快,更新速度也穩定;
- 為什麼不用平方損失函式呢?因為平方損失函式的梯度更新速度和sigmoid的梯度有關,而在定義域範圍內sigmoid的梯度值<=2.5,訓練速度非常慢;而且平方損失函式會導致損失函式是非凸的,不易求解。
7. LR的引數計算方法:梯度下降法,請介紹三種GD的區別
- 批梯度下降:可以得到全域性最優解,缺點是更新每個引數都需要遍歷所有資料,計算量大,還有很多冗餘計算,在資料非常大的時候,每個引數的更新都是非常慢的;
- SGD:以高方差頻繁更新,使SGD跳到新的或潛在更優的區域性解,但是也使得收斂到區域性最優解的過程更加複雜;
- mini-batch SGD:結合了二者的優點,每次選取N個樣本,減少了引數更新的次數,可以達到更加穩定的收斂結果。
8. LR的優缺點
-
優點:
- 形式簡單,模型可解釋性非常好,特徵權重可以看出不同特徵最後結果的影響;
- 效果不錯,可以作為baseline;
- 佔用資源少,特別是記憶體;
- 方便輸出結果調整;
- 訓練速度快。
-
缺點:
- 準確率不高;
- 對樣本不均衡問題無法很好的解決;
- 對非線性分類問題也是;
- 本身無法篩選特徵,可以和GBDT結合使用。
9. 邏輯斯特迴歸為什麼要對特徵進行離散化
- 稀疏向量做內積乘法運算速度快,計算結果方便儲存,易於擴充套件
- 離散化後的特徵對異常資料有更強的魯棒性
- 特徵離散化後模型更穩定
- LR屬於廣義線性模型,表達能力有限,特徵離散化為N個後,每個變數有自己的權重,相當於引入非線性,表達能力增強,加大擬合
- 特徵離散化後還可以做特徵交叉,由M+N個變為M*N個,進一步引入非線性
10. LR為什麼用sigmod函式,這個函式有什麼優點和缺點?
11. LR在特徵較多時可以進行怎樣的優化
PCA
1. PCA原理
具體推導看這裡: https://blog.csdn.net/u012421852/article/details/80458340
- 用於:特徵降維,去除冗餘和可分性不強的特徵;
- 目標:降維後的各個特徵不相關,即特徵之間的協方差為0;
- 原理:基於訓練資料X的協方差矩陣的特徵向量組成的k階矩陣U,通過XU得到降維後的k階矩陣Z;
- 演算法步驟
- 計算訓練樣本的協方差矩陣C;
- 計算C的特徵值和特徵向量;
- 將C的特徵值降序排列,特徵值對應特徵向量也依次排列;
- 假如要得到X的k階降維矩陣,選取C的前k個特徵{u1,u2…uk},組成降維轉換矩陣U;
- Z = XU,Z即為降維後的矩陣;
KMeans
1. K-means 的原理,時間複雜度,優缺點以及改進
- 原理:對於給定樣本集,按照樣本之間的距離大小,將樣本劃分為若干個簇,使簇內距離儘可能小,簇間距離儘可能大;
- 時間複雜度:O(knd*t) | k:類別,n:樣本數,d:計算樣本之間距離的時間複雜度,t:迭代次數;
- 優缺點:
- 優點:1. 原理易懂、實現簡單、收斂速度快、效果好 2. 可解釋性強 3. 可調引數只有少,只有k;
- 缺點:1. 聚類效果受k值影響大 2. 非凸資料集難以收斂 3. 隱含類別不均衡時,效果差 4. 迭代演算法,得到的只是區域性最優 5. 對噪音和異常資料敏感。
- 改進:隨機初始化K值影響效果 + 計算樣本點到質心的距離耗時這兩方面優化
KMeans++演算法
KMeans隨機選取k個點作為聚類中心,而KMeans++採用如下方法:
假設已經選取好n個聚類中心後,再選取第n+1個聚類中心時,距離這n個聚類中心越遠的點有越大的概率被選中;選取第一個聚類中心(n=1)時也是需要像KMeans一樣隨機選取的。
其他
1. 機器學習效能評價指標
- Precision (精確率)和Recall(召回率)
P = TP / (TP + FP)
R = TP / (TP + FN) - F1值
F1 = 2PR / (P + R) - ROC 和 AUC
2. 奧卡姆剃刀(Occam’s Razor)
如無需要,勿增實體。
簡單有效原理。
具體到機器學習上,能夠擬合資料的簡單模型才是我們需要的。
3. L1範數與L2的作用,區別
在機器學習中,通常損失函式會加上一個額外項,可看作損失函式的懲罰項,是為了限制模型引數,防止過擬合。
(自己注意下圖!)
L1範數 | L2範數 |
---|---|
各個引數的絕對值之和 | 各個引數的平方和的開方 |
先驗分佈是拉氏分佈 | 高斯(正態)分佈 |
使引數稀疏化,有特徵選擇的功能 | 使引數接近於0,防止過擬合 (模型越簡單,越不容易過擬合) |
Lasso迴歸 | Ridge迴歸 |
4. L1正則為什麼可以把係數壓縮成0?
5. 正則化為什麼能防止過擬合?新增正則項後依舊過擬合如何調節引數lambda?
4. 過擬合的原因和防止過擬合的方法
- 原因:1. 資料有噪聲; 2. 訓練資料不足,有限的訓練資料; 3. 過度訓練導致模型複雜。
- 防止過擬合的方法:
- 早停止:在模型對訓練資料迭代收斂之前停止迭代。
具體做法:在每一個Epoch結束時,計算validation_data的accuracy,當accuracy不再提高時,就停止訓練。(注意多次觀察,多次精度未提升時則停止迭代)
- dropout:在訓練時,以一定的概率忽略隱層中的某些節點。
插播:為什麼dropout能有效防止過擬合,請解釋原因?
詳細解答看這個:https://www.cnblogs.com/wuxiangli/p/7309501.html- 取平均的作用;
- 減少神經元之間複雜的共適應關係:因為dropout程式導致兩個神經元,不一定每次都在一個網路中出現,避免了有些特徵只有在特定特徵條件下才有效的情況,迫使網路去學習更加魯棒的特徵。
- 正則化
- 資料集擴充:1. 從源頭上獲取更多資料;2. 資料增強(通過一定規則擴充資料);3. 根據當前資料估計分佈引數,利用該分佈獲得更多資料。
- 整合學習
- 早停止:在模型對訓練資料迭代收斂之前停止迭代。
5. 特徵選擇的方法
什麼樣的特徵是好特徵:特徵覆蓋率高,特徵之間相關性小,不能改變原始特徵分佈
- wrapper(根據目標函式,每次選擇若干特徵,活著排除若干特徵)
遞迴特徵消除法:使用基模型進行多輪訓練,每輪訓練結束後,消除若干權值係數的特徵,再使用新的特徵進行下一輪訓練。 - embedded(先使用某些機器學習演算法訓練模型,得到各個特徵的權值係數,再有大到小進行特徵選擇)
- 基於懲罰項的特徵選擇法
- 基於樹的特徵選擇法
- filter(根據發散性活著相關性對各個特徵進行評分,設定閾值或者特徵個數,選擇特徵)
- 卡方檢驗
- 互資訊
- 方差選擇法:計算每個特徵的方差,根據閾值,選擇方差大於閾值的特徵進行訓練;
- 相關係數
6. 說一說你知道的損失函式
- 0-1損失函式(感知機)
- 平方損失函式(線性迴歸)
- 絕對值損失函式
- 指數損失函式(adaBoost)
- Hinge Loss(SVM)
- 對數損失函式(邏輯迴歸)
7. 資料預處理的方法
- 資料清洗:異常值和缺失值;
- 資料整合:實體識別,冗餘屬性識別;
- 資料轉換:簡單函式轉換,連續特徵離散化,規範化,構造屬性
- 資料規約:數值規約,屬性規約
8. 偏差和方差是什麼,高偏差和高方差說明了什麼
- 偏差:是指預測值和真實值之間的差,偏差越大,預測和真實值之間的差別越大,衡量模型的預測能力。
- 方差:描述預測值的變化範圍和離散程度,方差越大,表示預測值的分佈越零散,物件是多個模型,使用不同的訓練資料訓練出的模型差別有多大。
- 當訓練誤差和交叉驗證誤差或測試誤差都很大,且值差不多時,處於高偏差,低方差,欠擬合狀態;當訓練誤差和交叉驗證誤差差別很大,且測試集誤差小,驗證集誤差大時,處於高方差,低偏差,過擬合狀態。
9. 優化演算法有那些?
具體演算法原理、優缺點看這個:https://www.cnblogs.com/xinbaby829/p/7289431.html
梯度下降法、牛頓法和擬牛頓法、共軛梯度法、
啟發式方法、解決約束優化問題的拉格朗日乘數法
10. 梯度下降演算法和牛頓法的區別
- 牛頓法:
- 通過求解目標函式一階導數為0的引數來求解目標函式最小值時的引數;
- 收斂速度快;
- 迭代過程中,海森矩陣的逆不斷減小,相當於逐步減小步長;
- 海森矩陣的逆,計算複雜,代價較高,因此有了擬牛頓法。
- 梯度下降演算法:
- 通過梯度方向和步長,直接求得目標函式最小值的引數;
- 越靠近最優值,步長應該逐漸減小,否則會在最優值附近震盪。
11. 如何解決類別不均衡問題?
https://blog.csdn.net/program_developer/article/details/80287033
https://www.cnblogs.com/zhaokui/p/5101301.html
- 取樣:其中取樣又分為上取樣(將數量少的類別的資料複製多次),和下采樣(將數量多的類別的資料剔除一部分)。
https://www.jianshu.com/p/9a68934d1f56
smote演算法:
- 用途:合成新的少數樣本;
- 基本思路:對每一個少數樣本a,從a的k個最近鄰中隨機挑選一個樣本b,從a、b連線上隨機選擇一個點,作為新合成的少數樣本。
- 步驟:
1)對每一個少數樣本a,基於歐式距離,計算它到其他少數樣本的距離,找到他的k個最近鄰;
2)根據樣本不平衡比例設定一個取樣比例進而得到取樣倍率N,對於每一個少數樣本a,從他的最近鄰中選擇若干樣本,假設選擇的樣本為b;
3)基於以下公式得到新合成的少數樣本 c = a * random(0,1)*|b-a|。
- 資料合成:利用現有的資料的規律生成新的資料。
- 一分類:當資料樣本極不平衡時,將它看作一分類,這樣我們的重點就在於將它看成對某種類別進行建模。
- 對不同的類別給予不同的分錯代價。
12. 梯度下降演算法的過程
首先我們有一個可微分的函式,這個函式就好像一個山,我們的目標是找到函式的最小值(即山底)。根據經驗可知,我們從最陡峭的地方走,可以儘快到達山底。對應到函式就是找到給定點的梯度,並且沿著梯度相反的方向就能讓函式值下降最快(因為梯度方向就是函式值變化最快的方向)。重複利用這個方法,反覆求取梯度,最後就能到達區域性最小值。
13. 為什麼我們還是會在訓練的過程當中將高度相關的特徵去掉?
- 使得模型的解釋性更強;
- 大大提高訓練速度。
14. 最大似然估計與貝葉斯估計的區別
15. 判別式和生成式的演算法各有哪些,區別是什麼?
https://blog.csdn.net/amblue/article/details/17023485
https://blog.csdn.net/qq_41853758/article/details/80864072
- 區別:二者最本質的區別是建模物件的不同。
判別式模型的評估物件是最大化條件概率P(Y|X)
並對此進行建模;
生成式模型的評估物件是最大化聯合概率P(X,Y)
並對此進行建模。 - 判別式模型:線性迴歸、決策樹、支援向量機SVM、k近鄰、神經網路等;
- 生成式模型:隱馬爾可夫模型HMM、樸素貝葉斯模型、高斯混合模型GMM、LDA。
16. 最大似然估計
- 條件:假設樣本獨立同分布;
- 目標:估計出這個分佈中的引數theta;
- 方法:這一組樣本的概率最大時就對應了該模型的引數值。
17. 請用一句話說明AUC的本質和計算規則?AUC高可以理解為精確率高嗎?
- 本質:一個正例,一個負例,預測為正例的概率值大於預測為負的概率值的可能性;
計算規則:ROC曲線下的面積:
- 不可以,精確率是基於某個閾值進行計算的,AUC是基於所有可能的閾值進行計算的,具有更高的健壯性。AUC不關注某個閾值下的表現如何,綜合所有閾值的預測效能,所以精確率高,AUC不一定大,反之亦然。
參考:https://blog.csdn.net/legendavid/article/details/79063044
18. 二分類時,為什麼AUC比accuracy更常用?為什麼AUC對樣本類別比例不敏感?
19. 如何繪製ROC曲線?
20. 梯度下降的改進演算法有哪些?梯度消失的概念?
相關文章
- 【演算法工程師】Python面試問題總結演算法工程師Python面試
- 【機器學習】【深度學習】【人工智慧】【演算法工程師】面試問題彙總(持續更新)機器學習深度學習人工智慧演算法工程師面試
- 面試問題總結(Java工程師 20190301)面試Java工程師
- 機器學習面試問題彙總機器學習面試
- 機器學習問題方法總結機器學習
- 如何準備機器學習工程師的面試?機器學習工程師面試
- 面試過了,總結測試工程師面試題(含答案)工程師面試題
- 測試工程師的面試總結工程師面試
- 機器學習及深度學習的知識點及面試題總結機器學習深度學習面試題
- 轉:測試工程師的面試總結工程師面試
- c++工程師面試問題C++工程師面試
- 9 大主題!機器學習演算法理論面試題大彙總機器學習演算法面試題
- 面試總結——Java高階工程師面試Java工程師
- 面試問題總結面試
- 資料科學和機器學習面試問題資料科學機器學習面試
- 應聘機器學習工程師?這是你需要知道的12個基礎面試問題機器學習工程師面試
- 前端工程師面試題彙總(轉)前端工程師面試題
- 百面機器學習總結--第一章特徵工程機器學習特徵工程
- Python-爬蟲工程師-面試總結Python爬蟲工程師面試
- 最近Java高階工程師面試總結Java工程師面試
- RabbitMq面試問題總結MQ面試
- PHP面試問題總結PHP面試
- REDIS面試問題總結Redis面試
- 【Java問題面試總結】Java面試
- 面試數十家Linux運維工程師,總結了這些面試題Linux運維工程師面試題
- 經典機器學習演算法總結機器學習演算法
- python工程師面試題Python工程師面試題
- 面試題-測試工程師常見的基礎問題面試題工程師
- 資料結構和演算法面試題系列—揹包問題總結資料結構演算法面試題
- PHP開發工程師面試問題集錦PHP工程師面試
- 一個兩年Java工程師的面試總結Java工程師面試
- 面試題總結-演算法部分面試題演算法
- 面試問題總結2018/05/16面試
- 資料結構和演算法面試題系列—隨機演算法總結資料結構演算法面試題隨機
- 10道機器學習、深度學習必會面試題機器學習深度學習面試題
- 前端工程師系列,TCP複習及濃縮總結(全乾貨,支援面試)前端工程師TCP面試
- AI工程師的機遇在哪?機器學習工程師最急缺AI工程師機器學習
- Python工程師必看的面試問題與解答(中)Python工程師面試