西瓜书《机器学习》第二章部分课后题

题目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
感谢@对半独白

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