簡書公式支持不太好,歡迎跳轉(zhuǎn)到機器學(xué)習(xí)深度學(xué)習(xí)面試題總結(jié)GitHub看完整的總結(jié)令花,GitHub總結(jié)比較全,大多數(shù)是參考網(wǎng)上比較好的面試經(jīng)驗和文章翔烁,計劃持續(xù)更新中。喜歡的可以
Star
或者Fork
棱烂。
一租漂、機器學(xué)習(xí)
1. 方差與偏差
-
偏差與方差分別是用于衡量一個模型泛化誤差的兩個方面;
- 模型的偏差,指的是模型預(yù)測的期望值與真實值之間的差哩治;
- 模型的方差秃踩,指的是模型預(yù)測的期望值與預(yù)測值之間的差平方和;
-
在監(jiān)督學(xué)習(xí)中业筏,模型的泛化誤差可分解為偏差憔杨、方差與噪聲之和。
<div align="center"><a target="_blank"><img src="https://latex.codecogs.com/gif.latex?Err(x)&space;=&space;Bias^2&space;+&space;Variance&space;+&space;Noise" title="Err(x) = Bias^2 + Variance + Noise" /></a></div>
偏差用于描述模型的擬合能力
方差用于描述模型的穩(wěn)定性
<img src="_asset/Bias_Variance.png">
- 偏差:
Bias
反映的是模型在樣本上的輸出與真實值之間的誤差蒜胖,即模型本身的精準(zhǔn)度消别,即算法本身的擬合能力 - 方差:
Variance
反映的是模型每一次輸出結(jié)果與模型輸出期望之間的誤差,即模型的穩(wěn)定性台谢。反應(yīng)預(yù)測的波動情況寻狂。 - 誤差:
Err(x)
也叫泛化誤差 - 欠擬合會出現(xiàn)高偏差問題
- 過擬合會出現(xiàn)高方差問題
1.1 導(dǎo)致偏差和方差的原因
- 偏差通常是由于我們對學(xué)習(xí)算法做了錯誤的假設(shè),或者模型的復(fù)雜度不夠朋沮;
- 比如真實模型是一個二次函數(shù)蛇券,而我們假設(shè)模型為一次函數(shù),這就會導(dǎo)致偏差的增大(欠擬合)樊拓;
- 由偏差引起的誤差通常在訓(xùn)練誤差上就能體現(xiàn)纠亚,或者說訓(xùn)練誤差主要是由偏差造成的
- 方差通常是由于模型的復(fù)雜度相對于訓(xùn)練集過高導(dǎo)致的;
- 比如真實模型是一個簡單的二次函數(shù)筋夏,而我們假設(shè)模型是一個高次函數(shù)蒂胞,這就會導(dǎo)致方差的增大(過擬合);
- 由方差引起的誤差通常體現(xiàn)在測試誤差相對訓(xùn)練誤差的增量上条篷。
1.2 深度學(xué)習(xí)中的偏差與方差
- 神經(jīng)網(wǎng)絡(luò)的擬合能力非常強骗随,因此它的訓(xùn)練誤差(偏差)通常較小拥娄;
- 但是過強的擬合能力會導(dǎo)致較大的方差蚊锹,使模型的測試誤差(泛化誤差)增大;
- 因此深度學(xué)習(xí)的核心工作之一就是研究如何降低模型的泛化誤差稚瘾,這類方法統(tǒng)稱為正則化方法。
1.3 偏差與方差的計算公式
-
記在訓(xùn)練集 D 上學(xué)得的模型為
<div align="center"><a target="_blank"><img src="https://latex.codecogs.com/gif.latex?f(x;D)" title="f(x;D)" /></a></div>
模型的期望預(yù)測為
<div align="center"><a href="https://www.codecogs.com/eqnedit.php?latex=\hat&space;f(x)&space;=&space;\Bbb&space;E_{D}[f(x;&space;D)]" target="blank"><img src="https://latex.codecogs.com/gif.latex?\hat&space;f(x)&space;=&space;\Bbb&space;E{D}[f(x;&space;D)]" title="\hat f(x) = \Bbb E_{D}[f(x; D)]" /></a></div>
-
偏差(Bias)
<div align="center"><a href="https://www.codecogs.com/eqnedit.php?latex=bias2(x)&space;=&space;(\hat&space;f(x)&space;-&space;y)2" target="_blank"><img src="https://latex.codecogs.com/gif.latex?bias2(x)&space;=&space;(\hat&space;f(x)&space;-&space;y)2" title="bias^2(x) = (\hat f(x) - y)^2" /></a></div>
偏差度量了學(xué)習(xí)算法的期望預(yù)測與真實結(jié)果的偏離程度姚炕,即刻畫了學(xué)習(xí)算法本身的擬合能力摊欠;
-
方差(Variance)
<div align="center"><a href="https://www.codecogs.com/eqnedit.php?latex=var(x)&space;=&space;\Bbb&space;E_{D}[(f(x;&space;D)&space;-&space;\hat&space;f(x))^2]" target="blank"><img src="https://latex.codecogs.com/gif.latex?var(x)&space;=&space;\Bbb&space;E{D}[(f(x;&space;D)&space;-&space;\hat&space;f(x))^2]" title="var(x) = \Bbb E_{D}[(f(x; D) - \hat f(x))^2]" /></a></div>
方差度量了同樣大小的訓(xùn)練集的變動所導(dǎo)致的學(xué)習(xí)性能的變化,即刻畫了數(shù)據(jù)擾動所造成的影響(模型的穩(wěn)定性)柱宦;
噪聲則表達了在當(dāng)前任務(wù)上任何學(xué)習(xí)算法所能達到的期望泛化誤差的下界些椒,即刻畫了學(xué)習(xí)問題本身的難度。
“偏差-方差分解”表明模型的泛化能力是由算法的能力掸刊、數(shù)據(jù)的充分性免糕、任務(wù)本身的難度共同決定的。
1.4 避免過擬合和欠擬合
避免欠擬合(刻畫不夠)
- 尋找更好的特征-----具有代表性的
- 用更多的特征-----增大輸入向量的維度
避免過擬合(刻畫太細,泛化太差)
- 增大數(shù)據(jù)集合-----使用更多的數(shù)據(jù)石窑,噪聲點比重減少
- 減少數(shù)據(jù)特征-----減小數(shù)據(jù)維度牌芋,高維空間密度小
- 正則化方法-----即在對模型的目標(biāo)函數(shù)(objective function)或代價函數(shù)(cost function)加上正則項
- 交叉驗證方法
1.5 偏差與方差的權(quán)衡(過擬合與模型復(fù)雜度的權(quán)衡)
-
給定學(xué)習(xí)任務(wù),
- 當(dāng)訓(xùn)練不足時松逊,模型的擬合能力不夠(數(shù)據(jù)的擾動不足以使模型產(chǎn)生顯著的變化)躺屁,此時偏差主導(dǎo)模型的泛化誤差;
- 隨著訓(xùn)練的進行经宏,模型的擬合能力增強(模型能夠?qū)W習(xí)數(shù)據(jù)發(fā)生的擾動)犀暑,此時方差逐漸主導(dǎo)模型的泛化誤差;
- 當(dāng)訓(xùn)練充足后烁兰,模型的擬合能力過強(數(shù)據(jù)的輕微擾動都會導(dǎo)致模型產(chǎn)生顯著的變化)耐亏,此時即發(fā)生過擬合(訓(xùn)練數(shù)據(jù)自身的、非全局的特征也被模型學(xué)習(xí)了)
-
偏差和方差的關(guān)系和模型容量(模型復(fù)雜度)沪斟、欠擬合和過擬合的概念緊密相聯(lián)
<img src="_asset/Bias_Variance_1.png">
- 當(dāng)模型的容量增大(x 軸)時广辰, 偏差(用點表示)隨之減小,而方差(虛線)隨之增大
- 沿著 x 軸存在最佳容量币喧,小于最佳容量會呈現(xiàn)欠擬合轨域,大于最佳容量會導(dǎo)致過擬合。
《深度學(xué)習(xí)》 5.4.4 權(quán)衡偏差和方差以最小化均方誤差
2. 生成模型與判別模型
監(jiān)督學(xué)習(xí)的任務(wù)是學(xué)習(xí)一個模型杀餐,對給定的輸入預(yù)測相應(yīng)的輸出
-
這個模型的一般形式為一個決策函數(shù)或一個條件概率分布(后驗概率):
<div align="center"><a target="_blank"><img src="https://latex.codecogs.com/gif.latex?Y&space;=&space;f(X)&space;or&space;P(Y|X)" title="Y = f(X) or P(Y|X)" /></a></div>
- 決策函數(shù):輸入 X 返回 Y干发;其中 Y 與一個閾值比較,然后根據(jù)比較結(jié)果判定 X 的類別
- 條件概率分布:輸入 X 返回 X 屬于每個類別的概率史翘;將其中概率最大的作為 X 所屬的類別
-
監(jiān)督學(xué)習(xí)模型可分為生成模型與判別模型
-
判別模型直接學(xué)習(xí)決策函數(shù)或者條件概率分布
- 直觀來說枉长,判別模型學(xué)習(xí)的是類別之間的最優(yōu)分隔面,反映的是不同類數(shù)據(jù)之間的差異
-
生成模型學(xué)習(xí)的是聯(lián)合概率分布
P(X,Y)
琼讽,然后根據(jù)條件概率公式計算P(Y|X)
<div align="center"><a target="_blank"><img src="https://latex.codecogs.com/gif.latex?P(Y|X)&space;=&space;\frac{P(X,Y)}{P(X)}" title="P(Y|X) = \frac{P(X,Y)}{P(X)}" /></a></div>
-
兩者之間的聯(lián)系
由生成模型可以得到判別模型必峰,但由判別模型得不到生成模型。
-
當(dāng)存在“隱變量”時钻蹬,只能使用生成模型
隱變量:當(dāng)我們找不到引起某一現(xiàn)象的原因時吼蚁,就把這個在起作用,但無法確定的因素问欠,叫“隱變量”
優(yōu)缺點
- 判別模型
- 優(yōu)點
- 直接面對預(yù)測肝匆,往往學(xué)習(xí)的準(zhǔn)確率更高
- 由于直接學(xué)習(xí)
P(Y|X)
或f(X)
,可以對數(shù)據(jù)進行各種程度的抽象顺献,定義特征并使用特征旗国,以簡化學(xué)習(xí)過程
- 缺點
- 不能反映訓(xùn)練數(shù)據(jù)本身的特性
- ...
- 優(yōu)點
- 生成模型
- 優(yōu)點
- 可以還原出聯(lián)合概率分布
P(X,Y)
,判別方法不能 - 學(xué)習(xí)收斂速度更快——即當(dāng)樣本容量增加時注整,學(xué)到的模型可以更快地收斂到真實模型
- 當(dāng)存在“隱變量”時能曾,只能使用生成模型
- 可以還原出聯(lián)合概率分布
- 缺點
- 學(xué)習(xí)和計算過程比較復(fù)雜
- 優(yōu)點
常見模型
- 判別模型
- K 近鄰度硝、感知機(神經(jīng)網(wǎng)絡(luò))、決策樹寿冕、邏輯斯蒂回歸蕊程、最大熵模型、SVM蚂斤、提升方法存捺、條件隨機場
- 生成模型
- 樸素貝葉斯、隱馬爾可夫模型曙蒸、混合高斯模型捌治、貝葉斯網(wǎng)絡(luò)、馬爾可夫隨機場
3. 先驗概率與后驗概率
先驗概率纽窟,后驗概率肖油,似然概率,條件概率臂港,貝葉斯森枪,最大似然 - CSDN博客
條件概率(似然概率)
- 一個事件發(fā)生后另一個事件發(fā)生的概率。
- 一般的形式為
P(X|Y)
审孽,表示 y 發(fā)生的條件下 x 發(fā)生的概率县袱。 - 有時為了區(qū)分一般意義上的條件概率,也稱似然概率
先驗概率
- 事件發(fā)生前的預(yù)判概率
- 可以是基于歷史數(shù)據(jù)的統(tǒng)計佑力,可以由背景常識得出式散,也可以是人的主觀觀點給出。
- 一般都是單獨事件發(fā)生的概率打颤,如
P(A)
暴拄、P(B)
。
后驗概率
- 基于先驗概率求得的反向條件概率编饺,形式上與條件概率相同(若
P(X|Y)
為正向乖篷,則P(Y|X)
為反向)
貝葉斯公式
<div align="center"><a href="https://www.codecogs.com/eqnedit.php?latex=P(Y|X)&space;=&space;\frac{P(X|Y)&space;&space;P(Y)}{P(X)}" target="_blank"><img src="https://latex.codecogs.com/gif.latex?P(Y|X)&space;=&space;\frac{P(X|Y)&space;&space;P(Y)}{P(X)}" title="P(Y|X) = \frac{P(X|Y) * P(Y)}{P(X)}" /></a></div>
最大似然理論:
認為P(x|y)
最大的類別y
,就是當(dāng)前文檔所屬類別透且。即Max P(x|y) = Max p(x1|y)*p(x2|y)*...p(xn|y), for all y
貝葉斯理論:
認為需要增加先驗概率p(y)
撕蔼,因為有可能某個y
是很稀有的類別幾千年才看見一次,即使P(x|y)
很高秽誊,也很可能不是它罕邀。
所以y = Max P(x|y) * P(y)
,其中p(y)
一般是數(shù)據(jù)集里統(tǒng)計出來的。
4. 超參數(shù)選擇
超參數(shù)的選擇與交叉驗證 - CSDN博客
Grid Search
- 網(wǎng)格搜索
- 在高維空間中對一定區(qū)域進行遍歷
Random Search
- 在高維空間中隨機選擇若干超參數(shù)
4.1 超參數(shù)有哪些
與超參數(shù)對應(yīng)的是參數(shù)。參數(shù)是可以在模型中通過BP(反向傳播)進行更新學(xué)習(xí)的參數(shù)日熬,例如各種權(quán)值矩陣棍厌,偏移量等等。超參數(shù)是需要進行程序員自己選擇的參數(shù),無法學(xué)習(xí)獲得耘纱。
常見的超參數(shù)有模型(SVM敬肚,Softmax,Multi-layer Neural Network,…)束析,迭代算法(Adam,SGD,…)艳馒,學(xué)習(xí)率(learning rate)(不同的迭代算法還有各種不同的超參數(shù),如beta1,beta2等等员寇,但常見的做法是使用默認值弄慰,不進行調(diào)參),正則化方程的選擇(L0,L1,L2),正則化系數(shù)蝶锋,dropout的概率等等陆爽。
4.2 確定調(diào)節(jié)范圍
超參數(shù)的種類多,調(diào)節(jié)范圍大扳缕,需要先進行簡單的測試確定調(diào)參范圍慌闭。
4.2.1 模型
模型的選擇很大程度上取決于具體的實際問題,但必須通過幾項基本測試躯舔。
首先驴剔,模型必須可以正常運行,即代碼編寫正確粥庄∩ナВ可以通過第一個epoch的loss估計,即估算第一個epoch的loss飒赃,并與實際結(jié)果比較利花。注意此過程需要設(shè)置正則項系數(shù)為0,因為正則項引入的loss難以估算载佳。
其次炒事,模型必須可以對于小數(shù)據(jù)集過擬合,即得到loss接近于0蔫慧,accuracy接近于1的模型挠乳。否則應(yīng)該嘗試其他或者更復(fù)雜的模型。
最后姑躲,如果 val_acc 與 acc 相差很小睡扬,可能是因為模型復(fù)雜度不夠,需要嘗試更為復(fù)雜的模型黍析。
4.2.2 學(xué)習(xí)率
loss 基本不變:學(xué)習(xí)率過低
loss 震動明顯或者溢出:學(xué)習(xí)率過高
根據(jù)以上兩條原則卖怜,可以得到學(xué)習(xí)率的大致范圍。
4.2.3 正則項系數(shù)
- val_acc 與 acc 相差較大:正則項系數(shù)過小
- loss 逐漸增大:正則項系數(shù)過大
根據(jù)以上兩條原則阐枣,可以得到正則項系數(shù)的大致范圍马靠。
4.3 交叉驗證
對于訓(xùn)練集再次進行切分奄抽,得到訓(xùn)練集以及驗證集。通過訓(xùn)練集訓(xùn)練得到的模型甩鳄,在驗證集驗證逞度,從而確定超參數(shù)。(選取在驗證集結(jié)果最好的超參數(shù))
交叉驗證的具體實例詳見CS231n作業(yè)筆記1.7:基于特征的圖像分類之調(diào)參和CS231n作業(yè)筆記1.2: KNN的交叉驗證妙啃。
4.3.1 先粗調(diào)档泽,再細調(diào)
先通過數(shù)量少,間距大的粗調(diào)確定細調(diào)的大致范圍揖赴。然后在小范圍內(nèi)部進行間距小馆匿,數(shù)量大的細調(diào)。
4.3.2 嘗試在對數(shù)空間內(nèi)進行調(diào)節(jié)
即在對數(shù)空間內(nèi)部隨機生成測試參數(shù)储笑,而不是在原空間生成甜熔,通常用于學(xué)習(xí)率以及正則項系數(shù)等的調(diào)節(jié)。出發(fā)點是該超參數(shù)的指數(shù)項對于模型的結(jié)果影響更顯著突倍;而同階的數(shù)據(jù)之間即便原域相差較大腔稀,對于模型結(jié)果的影響反而不如不同階的數(shù)據(jù)差距大。
4.3.3. 隨機搜索參數(shù)值羽历,而不是格點搜索
<img src="_asset/RandomSearchVSGridSearch.png">
通過隨機搜索焊虏,可以更好的發(fā)現(xiàn)趨勢。圖中所示的是通過隨機搜索可以發(fā)現(xiàn)數(shù)據(jù)在某一維上的變化更加明顯秕磷,得到明顯的趨勢诵闭。
4.4 神經(jīng)網(wǎng)路中的超參數(shù)
- 學(xué)習(xí)率
η
- 正則化參數(shù)
λ
- 神經(jīng)網(wǎng)絡(luò)的層數(shù)
L
- 每一個隱層中神經(jīng)元的個數(shù)
j
- 學(xué)習(xí)的回合數(shù)
Epoch
- 小批量數(shù)據(jù)
minibatch
的大小 - 輸出神經(jīng)元的編碼方式
- 代價函數(shù)的選擇
- 權(quán)重初始化的方法
- 神經(jīng)元激活函數(shù)的種類
- 參加訓(xùn)練模型數(shù)據(jù)的規(guī)模
5. 余弦相似度(Cos距離)與歐氏距離的區(qū)別和聯(lián)系
- 歐式距離和余弦相似度都能度量 2 個向量之間的相似度
- 放到向量空間中看澎嚣,歐式距離衡量兩點之間的直線距離疏尿,而余弦相似度計算的是兩個向量之間的夾角
-
沒有歸一化時,歐式距離的范圍是
(0, +∞]
易桃,而余弦相似度的范圍是(0, 1]
褥琐;余弦距離是計算相似程度,而歐氏距離計算的是相同程度(對應(yīng)值的相同程度) - 歸一化的情況下晤郑,可以將空間想象成一個超球面(三維)敌呈,歐氏距離就是球面上兩點的直線距離,而向量余弦值等價于兩點的球面距離造寝,本質(zhì)是一樣磕洪。
6. 混淆矩陣、模型度量指標(biāo):準(zhǔn)確率诫龙、精確率析显、召回率、F1 值签赃、ROC叫榕、AUC等
<img src="_asset/機器學(xué)習(xí)性能評估指標(biāo).png">
6.1 分類評價指標(biāo)
混淆矩陣
- True Positive(TP):將正類預(yù)測為正類的數(shù)量.
- True Negative(TN):將負類預(yù)測為負類的數(shù)量.
- False Positive(FP):將負類預(yù)測為正類數(shù) → 誤報 (Type I error).
- False Negative(FN):將正類預(yù)測為負類數(shù) → 漏報 (Type II error).
<img src="_asset/混肴矩陣.png">
準(zhǔn)確率(accuracy)
<div align="center"><a target="_blank"><img src="https://latex.codecogs.com/gif.latex?ACC&space;=&space;\frac{TP&space;+&space;TN}{TP&space;+&space;TN&space;+&space;FP&space;+&space;FN}" title="ACC = \frac{TP + TN}{TP + TN + FP + FN}" /></a></div>
精確率(precision)【查準(zhǔn)率】
<div align="center"><a target="_blank"><img src="https://latex.codecogs.com/gif.latex?P&space;=&space;\frac{TP}{TP&space;+&space;FP}" title="P = \frac{TP}{TP + FP}" /></a></div>
準(zhǔn)確率與精確率的區(qū)別:
在正負樣本不平衡的情況下,準(zhǔn)確率這個評價指標(biāo)有很大的缺陷括丁。比如在互聯(lián)網(wǎng)廣告里面荞下,點擊的數(shù)量是很少的,一般只有千分之幾史飞,如果用acc尖昏,即使全部預(yù)測成負類(不點擊)acc 也有 99% 以上,沒有意義构资。
召回率(recall, sensitivity, true positive rate)【查全率】
<div align="center"><a target="_blank"><img src="https://latex.codecogs.com/gif.latex?R&space;=&space;\frac{TP}{TP&space;+&space;FN}" title="R = \frac{TP}{TP + FN}" /></a></div>
F1值——精確率和召回率的調(diào)和均值
<div align="center"><a href="https://www.codecogs.com/eqnedit.php?latex=\frac{2}{F_{1}}&space;=&space;\frac{1}{P}&space;+&space;\frac{1}{R}" target="blank"><img src="https://latex.codecogs.com/gif.latex?\frac{2}{F{1}}&space;=&space;\frac{1}{P}&space;+&space;\frac{1}{R}" title="\frac{2}{F_{1}} = \frac{1}{P} + \frac{1}{R}" /></a></div>
<div align="center"><a href="https://www.codecogs.com/eqnedit.php?latex=F_{1}&space;=&space;\frac{2TP}{2TP&space;+&space;FP&space;+&space;FN}" target="blank"><img src="https://latex.codecogs.com/gif.latex?F{1}&space;=&space;\frac{2TP}{2TP&space;+&space;FP&space;+&space;FN}" title="F_{1} = \frac{2TP}{2TP + FP + FN}" /></a></div>
只有當(dāng)精確率和召回率都很高時抽诉,F(xiàn)1值才會高
ROC
ROC曲線:接收者操作特征曲線(receiver operating characteristic curve),是反映敏感性和特異性連續(xù)變量的綜合指標(biāo)吐绵,roc曲線上每個點反映著對同一信號刺激的感受性迹淌。
對于分類器,或者說分類算法己单,評價指標(biāo)主要有precision唉窃,recall,F(xiàn)-score等纹笼,以及這里要討論的ROC和AUC纹份。下圖是一個ROC曲線的示例:
<img src="_asset/ROC.png">
橫坐標(biāo):1-Specificity,偽正類率(False positive rate廷痘, FPR)蔓涧,預(yù)測為正但實際為負的樣本占所有負例樣本的比例;
縱坐標(biāo):Sensitivity笋额,真正類率(True positive rate元暴, TPR),預(yù)測為正且實際為正的樣本占所有正例樣本的比例鳞陨。
在一個二分類模型中昨寞,假設(shè)采用邏輯回歸分類器,其給出針對每個實例為正類的概率厦滤,那么通過設(shè)定一個閾值如0.6援岩,概率大于等于0.6的為正類,小于0.6的為負類掏导。對應(yīng)的就可以算出一組(FPR,TPR)享怀,在平面中得到對應(yīng)坐標(biāo)點。隨著閾值的逐漸減小趟咆,越來越多的實例被劃分為正類添瓷,但是這些正類中同樣也摻雜著真正的負實例梅屉,即TPR和FPR會同時增大。閾值最大時鳞贷,對應(yīng)坐標(biāo)點為(0,0)坯汤,閾值最小時,對應(yīng)坐標(biāo)點(1,1)搀愧。
如下面這幅圖惰聂,(a)圖中實線為ROC曲線,線上每個點對應(yīng)一個閾值咱筛。
<img src="_asset/ROC曲線和它相關(guān)的比率.png">
(a) 理想情況下搓幌,TPR應(yīng)該接近1,F(xiàn)PR應(yīng)該接近0迅箩。ROC曲線上的每一個點對應(yīng)于一個threshold溉愁,對于一個分類器,每個threshold下會有一個TPR和FPR饲趋。比如Threshold最大時拐揭,TP=FP=0,對應(yīng)于原點篙贸;Threshold最小時投队,TN=FN=1,對應(yīng)于右上角的點(1,1)爵川。
(b) P和N得分不作為特征間距離d的一個函數(shù)敷鸦,隨著閾值theta增加,TP和FP都增加寝贡。
- 橫軸FPR:1-TNR扒披,1-Specificity,F(xiàn)PR越大圃泡,預(yù)測正類中實際負類越多碟案。
- 縱軸TPR:Sensitivity(正類覆蓋率),TPR越大颇蜡,預(yù)測正類中實際正類越多价说。
- 理想目標(biāo):TPR=1,F(xiàn)PR=0风秤,即圖中(0,1)點鳖目,故ROC曲線越靠攏(0,1)點,越偏離45度對角線越好缤弦,Sensitivity领迈、Specificity越大效果越好。
<img src="_asset/ROC坐標(biāo)系里的店如何移動.png">
AUC
AUC (Area Under Curve) 被定義為ROC曲線下的面積,顯然這個面積的數(shù)值不會大于1狸捅。又由于ROC曲線一般都處于 y=x
這條直線的上方衷蜓,所以AUC的取值范圍一般在0.5和1之間。
使用AUC值作為評價標(biāo)準(zhǔn)是因為很多時候ROC曲線并不能清晰的說明哪個分類器的效果更好尘喝,而作為一個數(shù)值磁浇,對應(yīng)AUC更大的分類器效果更好。
AUC的計算有兩種方式瞧省,梯形法和ROC AUCH法扯夭,都是以逼近法求近似值,具體見wikipedia鞍匾。
AUC意味著什么
那么AUC值的含義是什么呢?根據(jù)(Fawcett, 2006)骑科,AUC的值的含義是:
The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.
這句話有些繞橡淑,我嘗試解釋一下:首先AUC值是一個概率值,當(dāng)你隨機挑選一個正樣本以及一個負樣本咆爽,當(dāng)前的分類算法根據(jù)計算得到的Score值將這個正樣本排在負樣本前面的概率就是AUC值梁棠。當(dāng)然,AUC值越大斗埂,當(dāng)前的分類算法越有可能將正樣本排在負樣本前面符糊,即能夠更好的分類。
從AUC判斷分類器(預(yù)測模型)優(yōu)劣的標(biāo)準(zhǔn):
- AUC = 1呛凶,是完美分類器男娄,采用這個預(yù)測模型時,存在至少一個閾值能得出完美預(yù)測漾稀。絕大多數(shù)預(yù)測的場合模闲,不存在完美分類器。
- 0.5 < AUC < 1崭捍,優(yōu)于隨機猜測尸折。這個分類器(模型)妥善設(shè)定閾值的話,能有預(yù)測價值殷蛇。
- AUC = 0.5实夹,跟隨機猜測一樣(例:丟銅板),模型沒有預(yù)測價值粒梦。
- AUC < 0.5亮航,比隨機猜測還差;但只要總是反預(yù)測而行谍倦,就優(yōu)于隨機猜測制市。
三種AUC值示例:
<img src="_asset/AUC.png">
簡單說:AUC值越大的分類器领追,正確率越高撕攒。
為什么使用ROC曲線
既然已經(jīng)這么多評價標(biāo)準(zhǔn)姨夹,為什么還要使用ROC和AUC呢?
因為ROC曲線有個很好的特性:當(dāng)測試集中的正負樣本的分布變化的時候泪掀,ROC曲線能夠保持不變。在實際的數(shù)據(jù)集中經(jīng)常會出現(xiàn)類不平衡(class imbalance)現(xiàn)象,即負樣本比正樣本多很多(或者相反)沦辙,而且測試數(shù)據(jù)中的正負樣本的分布也可能隨著時間變化。
6.2 回歸評價指標(biāo)
MAE(平均絕對誤差)
平均絕對誤差MAE(Mean Absolute Error)又被稱為 L1范數(shù)損失讹剔。(n = m -1
)
<div align="center"><a href="https://www.codecogs.com/eqnedit.php?latex=MAE(y,\hat{y})&space;=&space;\frac{1}{m}\sum_{i=1}^{n}|y_i&space;-&space;\hat{y_i}|" target="blank"><img src="https://latex.codecogs.com/gif.latex?MAE(y,\hat{y})&space;=&space;\frac{1}{m}\sum{i=1}^{n}|y_i&space;-&space;\hat{y_i}|" title="MAE(y,\hat{y}) = \frac{1}{m}\sum_{i=1}^{n}|y_i - \hat{y_i}|" /></a></div>
MAE有哪些不足油讯?
- MAE雖能較好衡量回歸模型的好壞,但是絕對值的存在導(dǎo)致函數(shù)不光滑延欠,在某些點上不能求導(dǎo)陌兑,可以考慮將絕對值改為殘差的平方,這就是均方誤差由捎。
MSE(均方誤差)
均方誤差MSE(Mean Squared Error)又被稱為 **L2范數(shù)損失 **兔综。
<div align="center"><a href="https://www.codecogs.com/eqnedit.php?latex=MSE(y,\hat{y})&space;=&space;\frac{1}{m}\sum_{i=1}{m}(y_i&space;-&space;\hat{y_i})2" target="blank"><img src="https://latex.codecogs.com/gif.latex?MSE(y,\hat{y})&space;=&space;\frac{1}{m}\sum{i=1}{m}(y_i&space;-&space;\hat{y_i})2" title="MSE(y,\hat{y}) = \frac{1}{m}\sum_{i=1}^{m}(y_i - \hat{y_i})^2" /></a></div>
還有沒有比MSE更合理一些的指標(biāo)?
- 由于MSE與我們的目標(biāo)變量的量綱不一致狞玛,**為了保證量綱一致性软驰,我們需要對MSE進行開方 **。
RMSE(均方根誤差)
<div align="center"><a href="https://www.codecogs.com/eqnedit.php?latex=RMSE(y,\hat{y})&space;=&space;\sqrt{\frac{1}{m}\sum_{i=1}{m}(y_i&space;-&space;\hat{y_i})2}" target="blank"><img src="https://latex.codecogs.com/gif.latex?RMSE(y,\hat{y})&space;=&space;\sqrt{\frac{1}{m}\sum{i=1}{m}(y_i&space;-&space;\hat{y_i})2}" title="RMSE(y,\hat{y}) = \sqrt{\frac{1}{m}\sum_{i=1}^{m}(y_i - \hat{y_i})^2}" /></a></div>
RMSE有沒有不足的地方心肪?有沒有規(guī)范化(無量綱化的指標(biāo))锭亏?
- 上面的幾種衡量標(biāo)準(zhǔn)的取值大小與具體的應(yīng)用場景有關(guān)系,很難定義統(tǒng)一的規(guī)則來衡量模型的好壞硬鞍。比如說利用機器學(xué)習(xí)算法預(yù)測上海的房價RMSE在2000元慧瘤,我們是可以接受的,但是當(dāng)四五線城市的房價RMSE為2000元膳凝,我們還可以接受嗎碑隆?下面介紹的決定系數(shù)就是一個無量綱化的指標(biāo)。
R^2(決定系數(shù))
變量之所以有價值蹬音,就是因為變量是變化的上煤。什么意思呢?比如說一組因變量為[0, 0, 0, 0, 0]著淆,顯然該因變量的結(jié)果是一個常數(shù)0劫狠,我們也沒有必要建模對該因變量進行預(yù)測。假如一組的因變量為[1, 3, 7, 10, 12]永部,該因變量是變化的独泞,也就是有變異,因此需要通過建立回歸模型進行預(yù)測苔埋。這里的變異可以理解為一組數(shù)據(jù)的方差不為0懦砂。
決定系數(shù)又稱為R^2 score
,反映因變量的全部變異能通過回歸關(guān)系被自變量解釋的比例。
<img src="_asset/R2.png">
如果結(jié)果是0荞膘,就說明模型預(yù)測不能預(yù)測因變量罚随。
如果結(jié)果是1。就說明是函數(shù)關(guān)系羽资。
如果結(jié)果是0-1之間的數(shù)淘菩,就是我們模型的好壞程度。
化簡上面的公式 ,分子就變成了我們的均方誤差MSE屠升,下面分母就變成了方差:
<img src="_asset/R2_1.png">
以上評估指標(biāo)有沒有缺陷潮改,如果有,該怎樣改進腹暖?
以上的評估指標(biāo)是基于誤差的均值對進行評估的汇在,均值對異常點(outliers)較敏感,如果樣本中有一些異常值出現(xiàn)脏答,會對以上指標(biāo)的值有較大影響趾疚,即均值是非魯棒的。
6.3 解決評估指標(biāo)魯棒性問題
我們通常用以下兩種方法解決評估指標(biāo)的魯棒性問題:
- 剔除異常值
- 設(shè)定一個相對誤差 以蕴,當(dāng)該值超過一定的閾值時,則認為其是一個異常點辛孵,剔除這個異常點丛肮,將異常點剔除之 后。再計算平均誤差來對模型進行評價魄缚。
- 使用誤差的分位數(shù)來代替
- 如利用中位數(shù)來代替平均數(shù)宝与。例如 MAPE:
<div align="center"><a target="_blank"><img src="https://latex.codecogs.com/gif.latex?MAPE&space;=&space;median(|y_i&space;-&space;\hat{y_i}|&space;/&space;y_i)" title="MAPE = median(|y_i - \hat{y_i}| / y_i)" /></a></div>
MAPE是一個相對誤差的中位數(shù),當(dāng)然也可以使用別的分位數(shù)冶匹。
7. 如何處理數(shù)據(jù)中的缺失值
可以分為以下 2 種情況:
-
缺失值較多
- 直接舍棄該列特征习劫,否則可能會帶來較大的噪聲,從而對結(jié)果造成不良影響嚼隘。
-
缺失值較少
- 當(dāng)缺失值較少(<10%)時诽里,可以考慮對缺失值進行填充,以下是幾種常用的填充策略:
-
用一個異常值填充(比如 0)飞蛹,將缺失值作為一個特征處理
data.fillna(0)
-
用均值|條件均值填充
如果數(shù)據(jù)是不平衡的谤狡,那么應(yīng)該使用條件均值填充
所謂條件均值,指的是與缺失值所屬標(biāo)簽相同的所有數(shù)據(jù)的均值
data.fillna(data.mean())
-
用相鄰數(shù)據(jù)填充
# 用前一個數(shù)據(jù)填充 data.fillna(method='pad') # 用后一個數(shù)據(jù)填充 data.fillna(method='bfill')
-
插值
data.interpolate()
-
擬合
簡單來說卧檐,就是將缺失值也作為一個預(yù)測問題來處理:將數(shù)據(jù)分為正常數(shù)據(jù)和缺失數(shù)據(jù)墓懂,對有值的數(shù)據(jù)采用隨機森林等方法擬合,然后對有缺失值的數(shù)據(jù)進行預(yù)測霉囚,用預(yù)測的值來填充捕仔。
8. 介紹一個完整的機器學(xué)習(xí)項目流程
-
數(shù)學(xué)抽象
明確問題是進行機器學(xué)習(xí)的第一步。機器學(xué)習(xí)的訓(xùn)練過程通常都是一件非常耗時的事情,胡亂嘗試時間成本是非常高的榜跌。
這里的抽象成數(shù)學(xué)問題闪唆,指的是根據(jù)數(shù)據(jù)明確任務(wù)目標(biāo),是分類斜做、還是回歸苞氮,或者是聚類。
-
數(shù)據(jù)獲取
數(shù)據(jù)決定了機器學(xué)習(xí)結(jié)果的上限瓤逼,而算法只是盡可能逼近這個上限笼吟。
數(shù)據(jù)要有代表性,否則必然會過擬合霸旗。
對于分類問題贷帮,數(shù)據(jù)偏斜不能過于嚴重(平衡),不同類別的數(shù)據(jù)數(shù)量不要有數(shù)個數(shù)量級的差距诱告。
對數(shù)據(jù)的量級要有一個評估撵枢,多少個樣本,多少個特征精居,據(jù)此估算出內(nèi)存需求锄禽。如果放不下就得考慮改進算法或者使用一些降維技巧,或者采用分布式計算靴姿。
-
預(yù)處理與特征選擇
良好的數(shù)據(jù)要能夠提取出良好的特征才能真正發(fā)揮效力沃但。
預(yù)處理/數(shù)據(jù)清洗是很關(guān)鍵的步驟,往往能夠使得算法的效果和性能得到顯著提高佛吓。歸一化宵晚、離散化、因子化维雇、缺失值處理淤刃、去除共線性等,數(shù)據(jù)挖掘過程中很多時間就花在它們上面吱型。這些工作簡單可復(fù)制逸贾,收益穩(wěn)定可預(yù)期,是機器學(xué)習(xí)的基礎(chǔ)必備步驟唁影。
篩選出顯著特征耕陷、摒棄非顯著特征,需要機器學(xué)習(xí)工程師反復(fù)理解業(yè)務(wù)据沈。這對很多結(jié)果有決定性的影響哟沫。特征選擇好了,非常簡單的算法也能得出良好锌介、穩(wěn)定的結(jié)果嗜诀。這需要運用特征有效性分析的相關(guān)技術(shù)猾警,如相關(guān)系數(shù)、卡方檢驗隆敢、平均互信息发皿、條件熵、后驗概率拂蝎、邏輯回歸權(quán)重等方法穴墅。
-
模型訓(xùn)練與調(diào)優(yōu)
直到這一步才用到我們上面說的算法進行訓(xùn)練。
現(xiàn)在很多算法都能夠封裝成黑盒使用温自。但是真正考驗水平的是調(diào)整這些算法的(超)參數(shù)玄货,使得結(jié)果變得更加優(yōu)良。這需要我們對算法的原理有深入的理解悼泌。理解越深入松捉,就越能發(fā)現(xiàn)問題的癥結(jié),提出良好的調(diào)優(yōu)方案馆里。
-
模型診斷
如何確定模型調(diào)優(yōu)的方向與思路呢隘世?這就需要對模型進行診斷的技術(shù)。
過擬合鸠踪、欠擬合 判斷是模型診斷中至關(guān)重要的一步丙者。常見的方法如交叉驗證,繪制學(xué)習(xí)曲線等营密。過擬合的基本調(diào)優(yōu)思路是增加數(shù)據(jù)量蔓钟,降低模型復(fù)雜度。欠擬合的基本調(diào)優(yōu)思路是提高特征數(shù)量和質(zhì)量卵贱,增加模型復(fù)雜度。
誤差分析也是機器學(xué)習(xí)至關(guān)重要的步驟侣集。通過觀察誤差樣本键俱,全面分析誤差產(chǎn)生誤差的原因:是參數(shù)的問題還是算法選擇的問題,是特征的問題還是數(shù)據(jù)本身的問題......
診斷后的模型需要進行調(diào)優(yōu)世分,調(diào)優(yōu)后的新模型需要重新進行診斷编振,這是一個反復(fù)迭代不斷逼近的過程,需要不斷地嘗試臭埋, 進而達到最優(yōu)狀態(tài)踪央。
-
模型融合/集成
一般來說,模型融合后都能使得效果有一定提升瓢阴。而且效果很好畅蹂。
工程上,主要提升算法準(zhǔn)確度的方法是分別在模型的前端(特征清洗和預(yù)處理荣恐,不同的采樣模式)與后端(模型融合)上下功夫液斜。因為他們比較標(biāo)準(zhǔn)可復(fù)制累贤,效果比較穩(wěn)定。而直接調(diào)參的工作不會很多少漆,畢竟大量數(shù)據(jù)訓(xùn)練起來太慢了臼膏,而且效果難以保證。
-
上線運行
這一部分內(nèi)容主要跟工程實現(xiàn)的相關(guān)性更大示损。工程上是結(jié)果導(dǎo)向渗磅,模型在線上運行的效果直接決定模型的成敗。不單純包括其準(zhǔn)確程度检访、誤差等情況始鱼,還包括其運行的速度(時間復(fù)雜度)、資源消耗程度(空間復(fù)雜度)烛谊、穩(wěn)定性是否可接受风响。
這些工作流程主要是工程實踐上總結(jié)出的一些經(jīng)驗。并不是每個項目都包含完整的一個流程丹禀。這里的部分只是一個指導(dǎo)性的說明状勤,只有多實踐,多積累項目經(jīng)驗双泪,才會有自己更深刻的認識持搜。
9. 數(shù)據(jù)清洗與特征處理
機器學(xué)習(xí)中的數(shù)據(jù)清洗與特征處理綜述 - 美團技術(shù)團隊
<img src="_asset/數(shù)據(jù)清洗與特征處理.jpg">
10. 關(guān)聯(lián)規(guī)則挖掘的 3 個度量指標(biāo):支持度、置信度焙矛、提升度
支持度(Support)
-
X → Y
的支持度表示項集{X,Y}
在總項集中出現(xiàn)的概率<a target="_blank"><img src="https://latex.codecogs.com/gif.latex?Support(X&space;\rightarrow&space;Y)&space;=&space;\frac{P(X&space;\bigcup&space;Y)}{P(I)}&space;=&space;\frac{num(X&space;\bigcup&space;Y)}{num(I)}" title="Support(X \rightarrow Y) = \frac{P(X \bigcup Y)}{P(I)} = \frac{num(X \bigcup Y)}{num(I)}" /></a>
其中葫盼,
I
表示總事務(wù)集,num()
表示事務(wù)集中特定項集出現(xiàn)的次數(shù)村斟,P(X)=num(X)/num(I)
置信度(Confidence)
-
X → Y
的置信度表示在先決條件X
發(fā)生的情況下贫导,由規(guī)則X → Y
推出Y
的概率。<a target="_blank"><img src="https://latex.codecogs.com/gif.latex?Confidence(X&space;\rightarrow&space;Y)&space;=&space;P(Y|X)&space;=&space;\frac{P(X&space;\cup&space;Y)}{P(X)}&space;=&space;\frac{num(X&space;\cup&space;Y)}{num(X)}" title="Confidence(X \rightarrow Y) = P(Y|X) = \frac{P(X \cup Y)}{P(X)} = \frac{num(X \cup Y)}{num(X)}" /></a>
提升度(Lift)
-
X → Y
的提升度表示含有X
的條件下蟆盹,同時含有Y
的概率孩灯,與Y
總體發(fā)生的概率之比。<a href="https://www.codecogs.com/eqnedit.php?latex=\begin{align}&space;Lift(X&space;\rightarrow&space;Y)&space;&=&space;\frac{P(Y|X)}{P(Y)}&space;=&space;\frac{Confidence(X&space;\rightarrow&space;Y)}{num(Y)&space;/&space;num(I)}&space;\&space;&=&space;\frac{P(X&space;\cup&space;Y)}{P(X)P(Y)}&space;=&space;\frac{num(X&space;\cup&space;Y)num(I)}{num(X)num(Y)}&space;\end{align}" target="_blank"><img src="https://latex.codecogs.com/gif.latex?\begin{align}&space;Lift(X&space;\rightarrow&space;Y)&space;&=&space;\frac{P(Y|X)}{P(Y)}&space;=&space;\frac{Confidence(X&space;\rightarrow&space;Y)}{num(Y)&space;/&space;num(I)}&space;\&space;&=&space;\frac{P(X&space;\cup&space;Y)}{P(X)P(Y)}&space;=&space;\frac{num(X&space;\cup&space;Y)num(I)}{num(X)num(Y)}&space;\end{align}" title="\begin{align} Lift(X \rightarrow Y) &= \frac{P(Y|X)}{P(Y)} = \frac{Confidence(X \rightarrow Y)}{num(Y) / num(I)} \ &= \frac{P(X \cup Y)}{P(X)P(Y)} = \frac{num(X \cup Y)num(I)}{num(X)num(Y)} \end{align}" /></a>
10.1 規(guī)則的有效性:
-
滿足最小支持度和最小置信度的規(guī)則逾滥,叫做“強關(guān)聯(lián)規(guī)則”
最小支持度和最小置信度是人工設(shè)置的閾值
Lift(X→Y) > 1
的 X→Y 是有效的強關(guān)聯(lián)規(guī)則Lift(X→Y) <=1
的 X→Y 是有效的強關(guān)聯(lián)規(guī)則特別地峰档,
Lift(X→Y) = 1
時,X 與 Y 相互獨立寨昙。
10.2 判斷規(guī)則的有效性
問題:已知有1000名顧客買年貨讥巡,分為甲乙兩組,每組各500人舔哪,其中甲組有500人買了茶葉欢顷,同時又有450人買了咖啡;乙組有450人買了咖啡捉蚤,如表所示吱涉,請問“茶葉→咖啡”是一條有效的關(guān)聯(lián)規(guī)則嗎刹泄?
組次 | 買茶葉的人數(shù) | 買咖啡的人數(shù) |
---|---|---|
甲組(500人) | 500 | 450 |
乙組(500人) | 0 | 450 |
答:
- “茶葉→咖啡”的支持度:
Support(X→Y) = 450 / 1000 = 45%
- “茶葉→咖啡”的置信度:
Confidence(X→Y) = 450 / 500 = 90%
- “茶葉→咖啡”的提升度:
Lift(X→Y) = 90% / 90% = 1
由于提升度 Lift(X→Y) = 1
,表示 X
與 Y
相互獨立怎爵。也就是說特石,是否購買咖啡,與是否購買茶葉無關(guān)聯(lián)鳖链。規(guī)則“茶葉→咖啡”不成立姆蘸,或者說幾乎沒有關(guān)聯(lián),雖然它的置信度高達90%芙委,但它不是一條有效的關(guān)聯(lián)規(guī)則逞敷。
11. 信息熵、KL 散度(相對熵)與交叉熵
什么是熵灌侣?
- 熵是為消除不確定性所需要獲得的信息量
《深度學(xué)習(xí)》 3.13 信息論
信息論的基本想法是一個不太可能的事件居然發(fā)生了推捐,要比一個非常可能的事件發(fā)生侧啼,能提供更多的信息牛柒。
該想法可描述為以下性質(zhì):
- 非常可能發(fā)生的事件信息量要比較少痊乾,并且極端情況下皮壁,確保能夠發(fā)生的事件應(yīng)該沒有信息量。
- 比較不可能發(fā)生的事件具有更高的信息量哪审。
- 獨立事件應(yīng)具有增量的信息蛾魄。例如,投擲的硬幣兩次正面朝上傳遞的信息量湿滓,應(yīng)該是投擲一次硬幣正面朝上的信息量的兩倍滴须。
11.1 自信息與信息熵
自信息(self-information)是一種量化以上性質(zhì)的函數(shù),定義一個事件 x 的自信息為:
<div align="center"><img src="http://latex.codecogs.com/gif.latex?I(x) = - \log P(x)" /></div>
當(dāng)該對數(shù)的底數(shù)為 e 時叽奥,單位為奈特(nats描馅,本書標(biāo)準(zhǔn));當(dāng)以 2 為底數(shù)時而线,單位為比特(bit)或香農(nóng)(shannons)
自信息只處理單個的輸出。此時恋日,用信息熵(Information-entropy)來對整個概率分布中的不確定性總量進行量化:
<div align="center"><img src="http://latex.codecogs.com/gif.latex?H(\mathrm{X}) = \mathbb{E}{\mathrm{X} \sim P}[I(x)] = - \sum{x \in \mathrm{X}}P(x) \log P(x)" /></div>
信息熵也稱香農(nóng)熵(Shannon entropy)
信息論中膀篮,記
0log0 = 0
11.2 相對熵(KL 散度)與交叉熵
P 對 Q 的 KL散度(Kullback-Leibler divergence):
<div align="center"><img src="http://latex.codecogs.com/gif.latex?D_P(Q) = \mathbb{E}{\mathrm{X} \sim P} \left[ \log \frac{P(x)}{Q(x)} \right] = \sum{x \in \mathrm{X}}P(x) \left[ \log P(x) - \log Q(x) \right]" /></div>
KL 散度在信息論中度量的是那個直觀量:
在離散型變量的情況下, KL 散度衡量的是岂膳,當(dāng)我們使用一種被設(shè)計成能夠使得概率分布 Q 產(chǎn)生的消息的長度最小的編碼誓竿,發(fā)送包含由概率分布 P 產(chǎn)生的符號的消息時,所需要的額外信息量谈截。
KL 散度的性質(zhì):
- 非負筷屡;KL 散度為 0 當(dāng)且僅當(dāng)P 和 Q 在離散型變量的情況下是相同的分布涧偷,或者在連續(xù)型變量的情況下是“幾乎處處”相同的
- 不對稱;
交叉熵(cross-entropy):
<div align="center"><img src="http://latex.codecogs.com/gif.latex?H_P(Q) = - \mathbb{E}{\mathrm{X} \sim P} \log Q(x) = - \sum{x \in \mathrm{X}}P(x) \log Q(x)" /></div>
信息量毙死,信息熵燎潮,交叉熵,KL散度和互信息(信息增益) - CSDN博客