西瓜書《機器學習》第二章部分課後題

題目2.1

數據集包含1000個樣本,其中500個正例、500個反例,將其劃分爲包含70%樣本的訓練集和30%樣本的測試集用於留出法評估,試估算公有多少種劃分方式。

訓練集和測試集的劃分要儘可能保持數據分佈的一致性,按題目要求,需要抽700個訓練樣本,300個測試樣本,正例與反例的比例爲1:11:1,即抽350個正例和350個反例組成700個訓練樣本,共有C500350×C500350C^{350}_{500} \times C^{350}_{500}種劃分方法。

題目若改成600個正例、400個反例,其比例爲3:23:2,則抽700×3/5=420700 \times 3/5 = 420個正例和700×2/5=280700 \times 2 / 5 = 280個反例組成700個訓練樣本,剩下180個正例和120個反例組成300個測試贗本,比例同樣是3:23:2

題目2.2

數據集包含100個樣本,其中正、反例各一半,假定學習算法所產生的模型是將新樣本預測爲訓練樣本較多的類別(訓練樣本數相同時進行隨機猜測),試給出用10折交叉驗證法和留一法分別對錯誤率進行評估所得的結果。

  • 10折交叉驗證法:每次驗證,訓練樣本中的正例和反例都各佔一半,此時模型對新樣本的預測爲隨機猜測,期望錯誤率爲0.5
  • 留一法:若取1個正例作爲測試樣本,則訓練樣本中正例與反例的比例爲49:5049:50,此時模型對測試樣本的預測結果爲反例,錯誤率爲1;若取1個反例作爲測試樣本,則訓練樣本中正例與反例的比例爲50:4950:49,此時模型對測試樣本的預測結果爲正例,錯誤率爲1。綜上所述,期望錯誤率爲1。

題目2.3

若學習器A的F1F_1值比學習器B高,試析A的BEP值是否也比B高。

直接上代碼跑數據,假定有5個樣本,類別標籤分別爲:反例、正例、正例、反例、正例,

def perm(array):
    if(len(array)<=1):
        return [array]
    r=[]  
    for i in range(len(array)):
        s=array[:i] + array[i+1:]
        p=perm(s)  
        for x in p:  
            r.append(array[i:i+1] + x)
    return r

array = [0, 1, 2, 3, 4]
label = [0, 1, 1, 0, 1]

# machines = perm(array)
machines = [[4, 3, 2, 0, 1],
[4, 3, 2, 1, 0]]

# mlist是一個學習器
for mlist in machines:
    # 依次將學習器mlist中的前i個結果預測爲正例
    for i in range(len(mlist)):
        tempLabel = [0] * len(label)
        for j in range(0, i + 1):
            tempLabel[mlist[j]] = 1
        TP = 0
        FN = 0
        FP = 0
        for m in mlist:
            if label[m] == tempLabel[m] and label[m] == 1:
                TP = TP + 1
            if label[m] == 1 and tempLabel[m] == 0:
                FN = FN + 1
            if label[m] == 0 and tempLabel[m] == 1:
                FP = FP + 1
        P = 1.0 * TP / (TP + FP)
        R = 1.0 * TP / (TP + FN)
        F1 = 0
        if P + R != 0:
            F1 = 2 * P * R / (P + R)
        print(P, '\t', R, '\t', F1)
    print('\n')

觀測數據,取最後2個學習器記爲B、A,可以看到,A的P-R曲線“包住”B的P-R曲線,兩個學習器的BEP值相同,但A的某個F1F_1值高於B的某個F1F_1值,
在這裏插入圖片描述
從而得知,若學習器A的F1F_1值比學習器B高,A的BEP值不一定比B高。

題目2.4

試述真正例率(TPR)、假正例率(FPR)與查準率(P)、查全率(R)之間的聯繫。

若認真實踐了題目2.3,接下來做題目2.4會比較有感覺。現根據學習器的預測結果對樣例進行排序,排在前面的是學習器認爲“最可能”是正例的樣本,排在最後面的則是學習器認爲“最不可能”是正例的樣本。

觀察P-R圖,查全率和查準率是一對“矛盾”的度量。爲了提升查準率,就必須把篩選條件設置得更加嚴格以儘量排除反例(即把閾值調小),那麼排序排在反例後面的正例就會被pass,此時查全率下降;相反,爲了提升查全率,就必須放鬆篩選條件(即把閾值調大),那麼排序排在閾值前面的反例就會被預測爲正例,此時查準率下降。

觀察查全率與真正例率,可知兩者相等。

觀察ROC曲線圖,真正例率與假正例率呈現“單調遞增”關係。當調大閾值時,有可能使得FP增大且TN減小,假正例率變大,而此時,亦有可能TP增大且FN減小,真正例率變大。

題目2.5

試證明式(2.22)。

先不考慮f(x+)=f(x)f(\bm{x}^+) = f(\bm{x}^-)的情況,觀察式(2.20),可簡寫爲
AUC=i=1m1(xi+1xi)yi \text{AUC} = \sum^{m-1}_{i=1} (x_{i+1} - x_i) \cdot y_i,

接着將ROC曲線圖橫軸、縱軸各乘以mm^-m+m^+,發現xi+1xi={0,1}x_{i+1} - x_i = \{ 0, 1 \},仔細觀察ROC曲線圖,當xi+1xi=1x_{i+1} - x_i = 1時,點(xi+1,yi+1)(x_{i+1}, y_{i+1})恰巧是一個反例樣本,排序排在它前面的共有yiy_i個正例樣本。舉一個例子,

共有10個樣本,根據學習器的預測結果對樣本進行排序,得到[1,1,1,0,1,0,1,0,0,0][1, 1, 1, 0, 1, 0, 1, 0, 0, 0],其ROC曲線圖如下,
在這裏插入圖片描述
紅色點前面有3個正例樣本,藍色點前面有4個正例樣本,綠色點前面有5個正例樣本(後面的點依次類推)。

那麼,式(2.20)可改寫成

AUC=1m+mxDx+D+I(f(x+)&gt;f(x)) \text{AUC} = \frac{1}{m^+ m^-} \sum_{\bm{x}^- \in D^{-}} \sum_{\bm{x}^+ \in D^{+}} \mathbb{I} \big( f(\bm{x}^+) &gt; f(\bm{x}^-) \big),

注意兩個求和符號的順序,求和符號部分就是統計有顏色的點前面的正例樣本個數,個數乘以1就是那一列的面積,而
1m+1m\frac{1}{m^+} \cdot \frac{1}{m^-}
則是做歸一化處理。

同樣,計算rank\ell_{rank}時不考慮f(x+)=f(x)f(\bm{x}^+) = f(\bm{x}^-)的情況,有顏色的點的“損失”爲排序排在該點後面正例樣本個數,有
rank=1m+mxDx+D+I(f(x+)&lt;f(x))=1m+mx+D+xDI(f(x+)&lt;f(x))=i=1m1(xi+1xi)(1yi) \begin{aligned} \ell_{rank} &amp;= \frac{1}{m^+ m^-} \sum_{\bm{x}^- \in D^{-}} \sum_{\bm{x}^+ \in D^{+}} \mathbb{I} \big( f(\bm{x}^+) &lt; f(\bm{x}^-) \big) \\ &amp;= \frac{1}{m^+ m^-} \sum_{\bm{x}^+ \in D^{+}} \sum_{\bm{x}^- \in D^{-}} \mathbb{I} \big( f(\bm{x}^+) &lt; f(\bm{x}^-) \big) \\ &amp;= \sum^{m-1}_{i=1} (x_{i+1} - x_i) \cdot (1-y_i), \end{aligned}

易推AUC=1rank\text{AUC} = 1 - \ell_{rank}

接下來考慮f(x+)=f(x)f(\bm{x}^+) = f(\bm{x}^-)的情況,
在這裏插入圖片描述
假設紅色點與藍色點的預測值相等,我們記0.5個“罰分”,
1m+m12I(f(x+)=f(x)) \frac{1}{m^+ m^-} \cdot \frac{1}{2} \cdot \mathbb{I} \big( f(\bm{x}^+) = f(\bm{x}^-) \big)
剛好就是上圖綠色區域的面積,在式(2.20)的原本形式中,就是求梯形面積。

也可以換一個角度思考,由於ff值相等,學習器進行隨機預測,藍色點以0.5概率落在紅色點上方(此時x+\bm{x}^+排在x\bm{x}^-前面),以0.5概率落在紅色點右方(此時x\bm{x}^-排在x+\bm{x}^+前面),期望之下則是直接畫一條斜線,在計算式(2.21)時就直接添加0.5個“罰分”,注意斜線(折線)都代表了+、-兩個樣例,所以不妨礙藍色點之後排在反例之前的正例點個數的統計。

證畢。

題目2.6

試述錯誤率與ROC曲線的聯繫。

在這裏插入圖片描述

Acknowledge

題目2.1、題目2.2和題目2.6參考自:https://blog.csdn.net/icefire_tyh/article/details/52065867
感謝@四去六進一

題目2.3的ROC曲線形狀理解參考自:
https://www.cnblogs.com/gczr/p/10137063.html
感謝@光彩照人
(曲線不一定經過(0,1)(0, 1)(1,0)(1, 0)

題目2.4參考自:
https://www.jianshu.com/p/66ab21e08dd0
感謝@AI和金融模型

題目2.5的理解參考自:
https://blog.csdn.net/cherrylvlei/article/details/52958720
感謝@對半獨白

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章