算法崗面試假裝會問到的非算法模型問題系列

假裝下面這些是我面華為網(wǎng)易騰訊百度阿里美團京東宇宙條商湯科大訊飛搜狐新浪時會遇到的問題,不要太難。

【參考文獻】

[1] 周志華. 機器學習.

[2] 李航. 統(tǒng)計學習方法.

[3] 若干博客.

一、數(shù)據(jù)標準化、歸一化

數(shù)據(jù)歸一化主要是使所有特征具有相同的權(quán)重,并能加快梯度下降速度,但不會提高模型的精度。有兩個圖體會一下

常用方法:

(1) 線性歸一化*

簡單公式表達:y = (x-min)/(max -min)

其中,x是歸一化之前的數(shù)據(jù),y是歸一化之后的數(shù)據(jù),max和 min分別對應(yīng)這一組數(shù)據(jù)中的最大值和最小值,y的范圍:[0,1]。

適用于:把原來數(shù)據(jù)等比例縮放限定在某一范圍內(nèi),在不涉及距離度量和協(xié)方差計算的時候使用。

(2) 標準差歸一化*

簡單公式表達:y = (x-μ)/σ

其中,x,y分別對應(yīng)歸一化前后數(shù)據(jù)。μ代表這組數(shù)據(jù)的均值,σ代表這組數(shù)據(jù)的方差。

適用于:原來數(shù)據(jù)近似高斯分布,同時是距離度量的。

(3) 對數(shù)歸一化

簡單公示表達:y= log10(x)

其中,x,y分別對應(yīng)歸一化前后數(shù)據(jù)。

(4) 反余切歸一化(原理類似對數(shù)歸一化)

簡單公示表達:y = atan(x)*2/pi

其中,x,y分別對應(yīng)歸一化前后數(shù)據(jù)。反余切函數(shù)的范圍在[0,π/2],因此對反余切得到的值乘2除π,把范圍控制在[0,1]。

二、 降維的好處

(1)減少所需的存儲空間。

(2)加快計算速度,更少的維數(shù)意味著更少的計算,并且更少的維數(shù)可以允許使用不適合大量維數(shù)的算法。

(3)去除冗余特征,例如在以平方米和平方英里存儲地形尺寸方面沒有意義

(4)將數(shù)據(jù)的維數(shù)降低到2D或3D可以允許我們繪制和可視化它,可能觀察模式,給我們提供直觀感受。

(5)太多的特征或太復(fù)雜的模型可能導(dǎo)致過擬合。

三、 特征選擇

1.過濾式選擇:即先對數(shù)據(jù)集進行特征選擇,再訓練學習器,特征選擇過程與學習過程無關(guān)。

以Relief方法為例,設(shè)計一個叫做相關(guān)統(tǒng)計量的向量,維度等于總特征數(shù),每個分量可以看作是特征的權(quán)重。學好之后,或者設(shè)定一個閾值,大于閾值的分量對應(yīng)的特征作為最終選擇的特征,或者設(shè)定一個數(shù)量k,前k個最大的分量對應(yīng)的特征作為最終選擇的特征。

確定相關(guān)統(tǒng)計量的方法是:

(1)對每個樣本x,找到同類中最近的樣本y,再找到異類中最近的樣本z。

(2)遍歷每個特征,在當前特征j上,若d(xj,yj),則增大j的統(tǒng)計量分量;否則,減小j的統(tǒng)計量分量。

2.包裹式選擇:把學習器的性能作為特征子集評價的標準,相當于是為學習器量身定做特征子集。

以LVW方法為例:先隨機產(chǎn)生特征子集,計算某學習器在當前特征子集的交叉驗證產(chǎn)生的分類誤差,若當前分類誤差小于上一次的分類誤差,或者分類誤差與上一次相等但特征數(shù)更少,則選用該特征子集,重復(fù)剛才的過程;否則,再重新隨機產(chǎn)生子集重復(fù)剛才的過程,直到達到最大次數(shù)。

3.嵌入式選擇:特征選擇與學習器的訓練過程融為一體,兩者在同一個優(yōu)化過程中完成,即在學習器訓練過程中就自動進行特征選擇了。

嶺回歸和Lasso回歸就屬于嵌入式選擇。

四、 數(shù)據(jù)增強

1.為什么要對數(shù)據(jù)進行增強?

增加數(shù)據(jù)量,防止過擬合,提高模型的泛化能力。

2.分類:離線增強和在線增強

(1)離線增強:預(yù)先進行所有必要的變換,從根本上增加數(shù)據(jù)集的規(guī)模。這個方法常被用于相對較小的數(shù)據(jù)集。因為你最終會通過一個與執(zhí)行的轉(zhuǎn)換數(shù)量相等的因子來增加數(shù)據(jù)集的大?。ɡ?,通過翻轉(zhuǎn)所有圖像,數(shù)據(jù)集數(shù)量會增加2倍)。

(2)在線增強(動態(tài)增強):小批量執(zhí)行變換,僅僅在輸入機器學習模型之前。主要應(yīng)用于規(guī)模較大的數(shù)據(jù)集,因為你無法負擔數(shù)據(jù)量爆炸性增長。反而,你可以通過對即將輸入模型的小批量數(shù)據(jù)的執(zhí)行相應(yīng)的變化。很多機器學習架構(gòu)已經(jīng)支持在線增強,并可以利用GPU進行加速。

3.常用方法:

(1)低級的:翻轉(zhuǎn)、旋轉(zhuǎn)、放縮、裁剪、平移、加入擾動(如高斯噪聲)

(2)高級的:用GAN生成更多樣本、插值方法(即填充未知空間)

五、 處理缺失數(shù)據(jù)

1. 丟棄

如果數(shù)據(jù)量很大,或丟失的值所在的特征不是那么重要,可以丟棄數(shù)據(jù)。

2. 補齊

(1)人工填寫:很費時,不推薦。

(2)特殊值補充:比如用unknow填充,但會導(dǎo)致數(shù)據(jù)偏離,不推薦。

(3)平均值填充:當缺失值為數(shù)值屬性,用平均值填充;當缺失值為非數(shù)據(jù)屬性,用眾數(shù)填充。

(4)K近鄰填充:先根據(jù)歐式距離或相關(guān)分析來確定距離具有缺失數(shù)據(jù)樣本最近的K個樣本,將這K個值加權(quán)平均來估計該樣本的缺失數(shù)據(jù)。

(5)熱卡填充(就近補齊):在完整數(shù)據(jù)中找到一個與它最相似的對象,然后用這個相似對象的值來進行填充。

(6)回歸填充:基于完整的數(shù)據(jù)集,建立回歸方程。對于包含空值的對象,將已知屬性值代入方程來估計未知屬性值,以此估計值來進行填充。當變量不是線性相關(guān)時會導(dǎo)致有偏差的估計。

還有幾個更復(fù)雜的,不想寫了,詳見:https://blog.csdn.net/lujiandong1/article/details/52654703

六、 模型評估方法

1.留出法

將數(shù)據(jù)集隨機劃分為兩部分(注意分層采樣),一部分作訓練,另一部分作測試。多次劃分并評估,取平均值。

2.交叉驗證法

將數(shù)據(jù)集分層抽樣劃分k個互斥子集,遍歷這k個子集,每次都用k-1個作訓練,1個作測試,得到k個結(jié)果,取平均,即k折交叉驗證。也可以重復(fù)劃分n次,取平均,即n次k折交叉驗證。

3.留一法

假設(shè)數(shù)據(jù)量為N,遍歷N個樣本,每次都用N-1個樣本作訓練,1個樣本作測試,取平均。但計算開銷太大。

4.自助法

假設(shè)數(shù)據(jù)量為N,每次從數(shù)據(jù)集中有放回地取一個樣本,重復(fù)N次,得到樣本量為N的新數(shù)據(jù)集,用這個數(shù)據(jù)集作訓練,沒用取到的樣本作測試。實際上,初始數(shù)據(jù)集中約有36.8%的樣本沒有被抽到。

自助法改變了初始數(shù)據(jù)集的分布,會引入估計偏差。留出法和交叉驗證法更常用。

七、 模型性能度量

1.錯誤率與精度

錯誤率:分類錯誤的樣本數(shù)占樣本總數(shù)的比例;

精度:分類正確的樣本數(shù)占樣本總數(shù)的比例;

不適用于不平衡數(shù)據(jù)集。

2.查準率、查全率與F1

a)查準率(準確率)P:挑出的西瓜中,好瓜的比例。

b)查全率(召回率)R:所有好瓜中,挑出來的好瓜的比例。

c)P-R曲線

若一個學習器的P-R曲線被另一個學習器完全包住,則后者的性能優(yōu)于前者。當存在交叉時,可以計算曲線圍住面積,但比較麻煩,常用平衡點(查準率=查全率,BEP)度量,越大越好。

d)F1度量:2PR/(P+R),

更一般的形式:(1+a^2)PR/(a^2+R)

a>1希望查全率更重要,a<1希望查準率更重要。

在商品推薦系統(tǒng)中,希望查準率高一些,即在推薦的商品中,用戶真正感興趣的越多越好,而不是用戶所有感興趣的都要推薦出來。

在追查逃犯時,希望查全率高一些,即所有的逃犯中,實際追查到的越多越好,而不是在追查到的人中,逃犯越多越好。

當有多個二分類混淆矩陣時,希望估計算法的全局性能,即宏P(guān)/R/f1和微P/R/F1。

e)宏查準率、宏查全率、宏F1

以宏查準率為例:先計算每個混淆矩陣的查準率,再得到平均查準率,即宏查準率。

f)微查準率、微查全率、微F1

以微查準率為例:先計算平均混淆矩陣,再計算查準率,即微查準率。

3.ROC與AUC

a)真正例率(TPR):正例中預(yù)測為正例的比例

b)假正例率(FPR):反例中預(yù)測為正例的比例

ROC的橫軸為真正例率,縱軸為假正例率。若一個模型的ROC曲線被另一個包住,則另一個更好。ROC曲線下的面積叫做AUC,AUC越大,模型越好。

4.代價敏感錯誤率與代價曲線

在現(xiàn)實中,不同錯誤所造成的后果不同,例如,把健康人診斷為患者,只是增加了干凈診斷開銷,而把患者診斷為病人,則會推行最佳治療時機。有如下的二分類代價矩陣


一般情況下,cost10和cost01是不同的,此時的代價敏感錯誤率為

E=([0類中誤分類點]*cost01+[1類中誤分類點]*cost10)/m

(代價曲線暫時看不懂-_-|)

八、 偏差-方差分解

先看4個圖,直觀感受一下偏差和方差


九、 多分類學習

本身可以進行多分類的模型有:k近鄰算法、樸素貝葉斯、決策樹、隨機森林、邏輯回歸、神經(jīng)網(wǎng)絡(luò)等,但更多時候是通過一些策略,利用二分類問題來解決多分類問題的。

基本思想是先對問題進行拆分,然后為拆分的每個二分類任務(wù)訓練一個分類器;在測試時,對這些分類器的結(jié)果進行集成以獲得最終的分類結(jié)果。

1.一對一

假設(shè)一共有N個類別,這些類別兩兩組合,共N(N-1)/2種組合,對每種組合都訓練一個分類器并進行分類,最后把預(yù)測結(jié)果最多的類別作為最終類別。

2.一對多

假設(shè)一共有N個類別,遍歷這N個類別,每次把當前類別作為正例,其他類別作為反例,訓練N個分類器,并進行分類。在測試時若只有一個分類器預(yù)測為正例,則對應(yīng)的類別就是最終結(jié)果;若有多個分類器預(yù)測為正例,取置信度最大的那個類(比如邏輯回歸中輸出的概率)。

3.多對多

以糾錯輸出碼(ECOC)為例,主要分兩步:

編碼:如圖,對N個類別進行M次劃分,每次劃分都劃分為正例和反例,然后訓練M個分類器。

解碼:用這些分類器對測試樣本分別預(yù)測,得到M個結(jié)果,組成一個編碼,用這個編碼和每個類別對應(yīng)的編碼算距離,取最近的那個類別作為最終類別。

十、 梯度彌散與梯度爆炸

1.直接原因有兩個:

(1)深度學習的網(wǎng)絡(luò)層數(shù)太多,在進行反向傳播時根據(jù)鏈式法則,要連乘每一層梯度值。

(2)每一層的梯度值是由,非線性函數(shù)的導(dǎo)數(shù)以及本層的權(quán)重相乘得到的,這樣非線性的導(dǎo)數(shù)的大小和初始化權(quán)重的大小會直接影響是否發(fā)生梯度彌散或者梯度爆炸。

比如激活函數(shù)用sigmoid函數(shù)時,由于其導(dǎo)數(shù)最大也才0。25,所以反向一層層乘回去時,梯度會越來越小。

再比如當初始化權(quán)重過大時,從輸出層一層一層乘回來時,梯度會越來越大。

2.解決方法:

(1)梯度剪切:設(shè)置一個梯度剪切閾值,當更新梯度的時候,如果梯度超過這個閾值,那么就將其強制限制在這個范圍之內(nèi),這可以防止梯度爆炸。

(2)權(quán)重正則化:有L1正則和L2正則,以L2正則為例:Loss=(y?W*x)2+alpha*||W||^2,如果發(fā)生梯度爆炸,權(quán)值的范數(shù)就會變的非常大,通過正則化項,可以部分限制梯度爆炸的發(fā)生。

(3)使用Relu、LeakRelu、Elu等激活函數(shù),可有效防止梯度彌散。

Relu的x負半軸是0,LeakRelu的x負半軸是kx,Elu的x負半軸是a(e^x-1),彎的。

Relu緩解了梯度彌散,計算速度快,但由于負數(shù)部分恒為0,會導(dǎo)致一些神經(jīng)元無法激活,而LeakRelu和Elu很好地解決了這個問題,但Elu比LeakRelu計算慢一些。

(4)Batch Normalization(BN)

傳統(tǒng)的神經(jīng)網(wǎng)絡(luò),只是在將樣本x輸入輸入層之前對x進行標準化處理(減均值,除以標準差),以降低樣本間的差異性。BN是在此基礎(chǔ)上,不僅僅只對輸入層的輸入數(shù)據(jù)x進行標準化,還對每個隱藏層的輸入進行標準化。消除了權(quán)重帶來的放大、縮小的影響,同時也能夠加速收斂。

(5)殘差網(wǎng)絡(luò)

殘差網(wǎng)絡(luò)中,因為有shortcut的存在,反向傳播時能無損地傳播梯度。既能增加網(wǎng)絡(luò)深度,又能避免梯度彌散和退化問題。

(6)LSTM

LSTM全稱是長短期記憶網(wǎng)絡(luò)(long-short term memory networks),是不那么容易發(fā)生梯度消失的,主要原因在于LSTM內(nèi)部復(fù)雜的“門”(gates)。LSTM通過它內(nèi)部的“門”可以接下來更新的時候“記住”前幾次訓練的”殘留記憶“,因此,經(jīng)常用于生成文本中。

十一、 處理不平衡數(shù)據(jù)

大體可分為數(shù)據(jù)層面和算法層面

1.數(shù)據(jù)層面

(1)重采樣:

a)上采樣:復(fù)制稀有類的樣本 , 但是這樣做容易導(dǎo)致過擬合。

b)下采樣:舍棄部分大類樣本 , 降低不平衡程度。

(2)訓練集劃分方法:

首先根據(jù)代價敏感學習的需要,學習一個合理的類別樣本分布比例。然后將大類樣本隨機劃分成一系列不相交子集。這些子集的大小由稀有類樣本集的數(shù)量和預(yù)先學習的樣本分布比例決定。接下來分別將這些不相交子集跟稀有類樣本結(jié)合, 組成一系列平衡的分類子問題,單獨訓練成子分類器,最后通過元學習將這些子分類器的輸出進一步學習成組合分類器,這種方法在信用卡非法使用檢測問題上大大降低了總代價。

2.算法層面

(1)分類器集成方法

平衡隨機森林的方法,該方法對正類和反類分別進行重采樣,重采樣多次后采用多數(shù)投票的方法進行集成學習。

(2)代價敏感方法

在大部分不平衡分類問題中,稀有類是分類的重點。在這種情況下,正確識別出稀有類的樣本比識別大類的樣本更有價值。反過來說,錯分稀有類的樣本需要付出更大的代價。代價敏感學習賦予各個類別不同的錯分代價 ,它能很好地解決不平衡分類問題。以兩類問題為例,假設(shè)正類是稀有類,并具有更高的錯分代價,則分類器在訓練時,會對錯分正類樣本做更大的懲罰,迫使最終分類器對正類樣本有更高的識別率。

代價敏感學習能有效地提高稀有類的識別率。但問題是,一方面,在多數(shù)情況下,真實的錯分代價很難被準確地估計。另一方面,雖然許多分類器 可以直接引入代價敏感學習機制,如支持向量機和決策樹,但是也有一些分類器不能直接使用代價敏感學習,只能通過調(diào)整正負樣本比例或者決策閾值間接的實現(xiàn)代價敏感學習,這樣不能保證代價敏感學習的效果。

(3)特征選擇方法

當樣本數(shù)量分布很不平衡時,特征的分布同樣會不平衡。尤其在文本分類問題中,在大類中經(jīng)常出現(xiàn)的特征,也許在稀有類中根本不出現(xiàn)。因此,根據(jù)不平衡分類問題的特點,選取最具有區(qū)分能力的特征,有利于提高稀有類的識別率。

十二、 矩陣計算順序

假設(shè)有3個稠密矩陣A,B,C的尺寸分別為m*n,n*p,p*q,且m

規(guī)律:先算小的,再算大的。

十三、 為什么對圖像使用卷積而不僅僅是FC層

(1)卷積保存、編碼和實際使用來自圖像的空間信息。如果我們只使用FC層,我們將沒有相對的空間信息。

(2)卷積神經(jīng)網(wǎng)絡(luò)( CNNs )具有部分內(nèi)建的平移不變性,因為每個卷積核充當其自身的濾波器/特征檢測器。

十四、 什么使CNNs具有平移不變性

如上所述,每個卷積核充當它自己的濾波器/特征檢測器。假設(shè)您正在進行目標檢測,目標在圖像中的位置并不重要,因為無論如何,我們將在整個圖像中以滑動窗口的方式應(yīng)用卷積。

十五、 為什么分類CNNs模型中需要max-pooling

CNN中的最大池化允許您減少計算量,因為池化后feature maps變小了,不會丟失太多的語義信息,因為您正在進行最大程度的激活。還有一種理論認為,最大池化對CNNs的平移不變性有一定的貢獻??傊?,池化可以加快計算速度,防止過擬合。

十六、 為什么在圖像分割中CNNs通常具有編碼器-解碼器結(jié)構(gòu)

編碼器CNN基本上可以被認為是特征提取網(wǎng)絡(luò),而解碼器使用該信息通過“解碼”特征并放大到原始圖像大小來預(yù)測圖像分割區(qū)域。

十七、 如何有效避免過擬合

(1)L2正則化:通過減小w的值來防止過擬合(可參考曲線擬合來理解)

(2)Dropout:每次迭代都隨機刪除一部分隱藏單元。

(3)數(shù)據(jù)集擴增:可通過數(shù)據(jù)增強來擴增。

(4)Early stopping:迭代早點停。

十八、 L0/L1/L2范數(shù)的區(qū)別

L0/L1可以實現(xiàn)稀疏,產(chǎn)生少量的特征,從而進行特征選擇。

L2可以產(chǎn)生很小的特征,避免模型過擬合,提高模型的泛化能力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容