《机器学习》西瓜书习题 第 3 章

习题

3.1

  试析在什么情况下式 \((3.2)\) 中不必考虑偏置项 \(b\) .
  书中有提到, 可以把 \(x\) 和 \(b\) 吸收入向量形式 \(\hat{w} = (w;b)\) .此时就不用单独考虑 \(b\) 了.

3.2

  试证明, 对于参数 \(w\), 对率回归的目标函数 \((3.18)\) 是非凸的, 但其对数似然函数 \((3.27)\) 是凸的.
\[y = \frac{1}{1 + e^{-(\boldsymbol w^\mathrm T\boldsymbol x + b)}}\tag{3.18}\]
\[\ell(\boldsymbol\beta) = \sum^m_{i = 1}(-y_i\boldsymbol \beta^\mathrm T\boldsymbol{\hat{x}}_i)\tag{3.18}\]
(等我搞懂了再补充.)
## 3.3
  编程实现対率回归, 并给出西瓜数据集 \(3.0\alpha\) 上的结果.
## 3.5
  选择两个 \(UCI\) 数据集, 比较 \(10\) 折交叉验证法和留一法所估计出的错误率.
## 3.6
  线性判别分析仅在线性可分数据上能获得理想结果, 试设计一个改进方法, 使其能较好地用于飞线性可分数据.
  像 \(6.3\) 节介绍的那样, 使用核函数, 就可以运用于非线性可分数据.

3.7

  令码长为 \(9\), 类别数为 \(4\) , 试给出海明距离意义下理论最优的 \(ECOC\) 二元码并证明之.
  首先要给出理论最优, 我们先要确定 ‘最优‘ 的指导标准.

  对同等长度的编码, 理论上来说, 任意两个类别之间的编码距离越远, 则纠错能力越强.

  我们要将 ‘任意两个类别的编码距离‘ 用数学表达, 这样才能进行求解. 那么怎么用数学表达这个 ‘距离‘ 呢? 这里考虑到 ‘总体距离最大‘ , 所以我们浅显的使用每两个类别之间的海明距离的积来作为衡量标准. 我们定义一个变量 \(L\) 用来表达这个积, 也就是有
\[L = \prod_{1\leqslant i< j\leqslant 4}dis(r_i, r_j)\]
\(dis(r_i, r_j)\) 表示第 \(i\) 个编码和第 \(j\) 个编码之间的海明距离, 同时 \(L\) 越大代表这种编码方式越好.
  于是我写了段程序来搜索 \(L\) 的最大值 (直接爆搜) .

#include<iostream>
#include<cmath>
using namespace std;

const int MAXCOL = 9;  // 码长为 9
const int MAXROW = 4;  // 类别数为 4 

bool code[MAXROW][MAXCOL];  // 记录最大值时编码排列
bool temp_code[MAXROW][MAXCOL];  // 表示当前编码排列

int mmax = 0;  // 记录最大值

int dif_val(bool a[MAXCOL], bool b[MAXCOL]){  // 求两个编码之间的海明距离
    int cnt = 0;
    for(int i = 0 ; i < MAXCOL ; ++i){
        if(a[i] != b[i])    ++cnt;
    }
    return cnt;
}

int cost(bool code[MAXROW][MAXCOL]){  // 求当前编码排列的 L
    int res = 1;
    for(int i = 0 ; i < MAXROW ; ++i){
        for(int j = i + 1 ; j < MAXROW ; ++j){
            res *= dif_val(code[i], code[j]);
        }
    }
    return res;
}

void dfs(int row = 2, int col = 0){  // 深度优先搜索, 枚举每个位置的编码 (0 和 1)
    if(row == MAXROW)    return;  // 边界条件
    temp_code[row][col] = 1;  // 先枚举 1
    int temp = cost(temp_code);
    if(mmax < temp){  // 发现更好的编码排列, 进行更新
        mmax = temp;
        for(int i = 0 ; i < MAXROW ; ++i)
            for(int j = 0 ; j < MAXCOL ; ++j)
                code[i][j] = temp_code[i][j];
    }
    if(col == MAXCOL - 1)    dfs(row + 1, 0);  // 下一层
    else    dfs(row, col + 1);
    temp_code[row][col] = 0;  // 返回再枚举 0
    temp = cost(temp_code);
    if(mmax < temp){  // 同上
        mmax = temp;
        for(int i = 0 ; i < MAXROW ; ++i)
            for(int j = 0 ; j < MAXCOL ; ++j)
                code[i][j] = temp_code[i][j];
    }
    if(col == MAXCOL - 1)    dfs(row + 1, 0);  // 同上
    else    dfs(row, col + 1);
    return ;
}

int main(){
    for(int i = 0 ; i < MAXCOL ; ++i){
        temp_code[0][i] = 1;  // 不失一般性, 令第一个类别的编码全部为 1
    }
    for(int i = 1 ; i <= MAXCOL ; ++i){  // 不失一般性, 枚举第二个类别 1 的数量 (1 ~ 9)
        temp_code[1][i - 1] = 1;
        dfs();
    }
    for(int i = 0 ; i < MAXROW ; ++i){  // 打印最终结果
        for(int j = 0 ; j < MAXCOL ; ++j){
            cout << code[i][j] << ' ';
        }
        cout << endl;
    }
    cout << mmax;
    return 0;
}  // 我的码风是不是很好看

结果:

1 2 3 4 5 6 7 8 9
1 1 1 1 1 1 1 1 1
1 1 1 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 1 1 1

46656

当然我们要把 \(0\) 换成 \(-1\).
  所以, 我们求出了海明距离下理论最优的, 码长为 \(9\), 类别数为 \(4\) 的 \(EOOC\) 二元码. 至于证明, 在我们定义的衡量标准下, 其正确性是显然的.

3.8*

  \(EOOC\) 编码能起到理想纠错作用的重要条件是: 在每一位编码上出错的概率相当且独立. 试析多分类任务经 \(EOOC\) 编码后产生的二类分类器满足该条件的可能性及由此产生的影响.
(同样的, 我搞懂了再补)

3.9

  使用 \(OvR\) 和 \(MvM\) 将多分类任务分解为二分类任务求解时, 试述为何无需专门针对类别不平衡性进行处理.
  原文就已经提到

  对 \(OvR\) 、\(MvM\) 来说, 由于对每个类进行了相同的处理, 其拆解出的二分类任务中类别不平衡的影响会相互抵消, 因此通常不需要专门处理.

3.10*

  试推导出多分类代价敏感学习 (仅考虑基于类别的误分类代价) 使用 "再缩放" 能获得理论最优解的条件.
  原文中提到

  再缩放的思想虽简单, 但实际操作却并不平凡, 主要因为 "训练集是真实样本总体的无偏采样" 这个假设往往并不成立.

  因此假设成立应该也算是获得理论最优解的一个条件.

\(PS\): 题目好像越来越难了...

原文地址:https://www.cnblogs.com/cloud--/p/12150580.html

时间: 2024-10-31 19:59:19

《机器学习》西瓜书习题 第 3 章的相关文章

《机器学习》 西瓜书习题 第 2 章

习题 \(2.1\) 数据集包含 \(1000\) 个样本, 其中 \(500\) 个正例.\(500\) 个反例, 将其划分为包含 \(70\%\) 样本的训练集和 \(30\%\) 样本的测试集用于留出法评估, 试估算共有多少种划分方式. 如果划分要保证正例和反例一样多的话, 那么划分方式数量 \(n\) 有 \[\begin{aligned} n &= C^{500\times35\%}_{500}\times C_{500}^{500\times 35\%}\&=(C^{175}_

《机器学习》西瓜书习题 第 4 章

习题 4.1 试证明对于不含冲突数据 (即特征向量完全相同但标记不同) 的训练集, 必存在与训练集一致 (即训练误差为 0)的决策树. 既然每个标记不同的数据特征向量都不同, 只要树的每一条 (从根解点到一个叶节点算一条) 枝干代表一种向量, 这个决策树就与训练集一致. 4.2 试析使用 "最小训练误差" 作为决策树划分选择准则的缺陷. \(4.1\) 说明了如果数据不冲突, 可以完全拟合数据集, 这正是使用 "最小训练误差" 作为决策树划分选择准则的结果. 而这是

《西瓜书》第三章,线性回归

? 使用线性回归来为散点作分类 ● 代码 1 import numpy as np 2 import matplotlib.pyplot as plt 3 from mpl_toolkits.mplot3d import Axes3D 4 from mpl_toolkits.mplot3d.art3d import Poly3DCollection 5 from matplotlib.patches import Rectangle 6 7 dataSize = 10000 8 trainRat

《西瓜书》第五章,神经网络

? 使用神经网络来为散点作分类 ● 单层感知机,代码 1 import numpy as np 2 import matplotlib.pyplot as plt 3 from mpl_toolkits.mplot3d import Axes3D 4 from mpl_toolkits.mplot3d.art3d import Poly3DCollection 5 from matplotlib.patches import Rectangle 6 7 dataSize = 2000 8 tra

《机器学习》西瓜书 第一章 绪论

机器学习绪论 基本术语 基础 模型:泛指从数据中学得的结果 数据集 data set:一组记录的集合 示例 instance/样本 sample:关于一个事件或对象的描述 属性 attribute/特征 feature:反映事件或对象在某方面的表现或性质的事项 属性值 attribute value:属性上的取值 属性空间 attribute space/样本空间 sample space:属性张成的空间即 \(n\) 个特征描述出的 \(n\) 维空间 特征向量 feature vector:

《机器学习》 --周志华版(西瓜书)--课后参考答案

<机器学习> --周志华版(西瓜书)--课后参考答案 对机器学习一直很感兴趣,也曾阅读过李航老师的<统计学习导论>和Springer的<统计学习导论-基于R应用>等相关书籍,但总感觉自己缺乏深入的理解和系统的实践.最近从实验室角落觅得南京大学周志华老师<机器学习>一书,随意翻看之间便被本书内容文笔深深吸引,如获至宝.遂决定要认真学习本书并将学习过程记录下来.感觉若以读书笔记的形式做记录未免枯燥(且网上已有大量相关内容).那就暂且将课后练习的个人思路和答案写成

【转】《西瓜书机器学习详细公式推导版》发布

转自:https://github.com/datawhalechina/pumpkin-book https://mp.weixin.qq.com/s/FcwgjS4FXfGJPZEQEz3cVw 南瓜书PumpkinBook 周志华老师的<机器学习>(西瓜书)是机器学习领域的经典入门教材之一,周老师为了使尽可能多的读者通过西瓜书对机器学习有所了解, 所以在书中对部分公式的推导细节没有详述,但是这对那些想深究公式推导细节的读者来说可能“不太友好”,本书旨在对西瓜书里比较难理解的公式加以解析,

西瓜书第二章--模型评估与选择

2.1 经验误差与过拟合 错误率:错分样本的占比 精度:分对样本的占比,与错误率是互补的. 误差:样本真实输出与预测输出之间的差异.学习器在训练集上的误差称为训练误差或经验误差,在新样本上的误差称为泛化误差. 由于事先并不知道新样本的特征,我们只能努力使经验误差最小化: 很多时候虽然能在训练集上做到分类错误率为零,但多数情况下这样的学习器并不好 过拟合:学习器把训练样本学习的“太好”,将训练样本本身的特点 当做所有样本的一般性质,导致泛化性能下降: 解决措施:1.优化目标加正则项 :2.earl

西瓜书与蓝皮书 思维导图(转)

周志华著<西瓜书>思维导图 第一章:https://blog.csdn.net/liuyan20062010/article/details/68489427 第二章:https://blog.csdn.net/liuyan20062010/article/details/70054668 第三章:https://blog.csdn.net/liuyan20062010/article/details/70054758 第四章:https://blog.csdn.net/liuyan20062