Vago Mundo

尘世闲游,听凭风引

    Lasso回归与近端梯度下降

    推导与实现

    引言 在周志华老师的《机器学习》中的线性回归章节内,通过简单的微积分给出了最小二乘 \[\min_{\pmb w}\quad\Vert\pmb{y}-\pmb{Xw}\Vert_2^2\] 的解析解,用类似的方法,我们也可以求出带$L_2$正则化项的最小二乘 \[\min_{\pmb w}\quad\Vert\pmb{y}-\pmb{Xw}\Vert_2^2+\lambda\Vert...

    决策树的剪枝算法

    探究与实现

    引言 用训练集训练一个决策树(ID3、C4.5、CART)模型后,可能会产生过拟合,这是由树结构本身的性质决定的。因此“剪枝”操作往往是必要的。在周志华老师的《机器学习》中,提到了“预剪枝”和“后剪枝”,在笔者使用模型和阅读资料后,发现剪枝策略远比这两种剪枝复杂得多,本文便是对剪枝策略的一个综述。 预剪枝 在《机器学习》中,预剪枝是在生成分支的同时,用验证集进行测试,如果产生分支前的决...

    二项分布的连续性校正

    用正态分布逼近二项分布

    从二项分布开始 我们来复习下概率统计的内容,先从二项分布开始。二项分布属于离散分布,简单理解就是一件事情以$p$的概率发生,现在有独立$n$次随机实验,问该事件发生$k(0\leq k\leq n)$次的概率。我们将事件发生的次数记为随机变量$X$,我们称$X$满足参数为$n,p$的二项分布,简记为$X\sim B(n,p)$。我们可以直接计算概率: \[\Pr\{X=k\}={n\ch...

    异常检测SVM

    OneClassSVM的实现

    引入 One Class SVM属于无监督的SVM算法,被用于对数据集中的异常点进行检测(也叫分布估计)。异常数据对机器学习效果有非常消极的影响,比如下面的人造数据分布: 该数据集是从$\mathcal{N}(0,1)$分布中取990个样本,然后混杂10个从$\mathcal{N}(10,0.001)$的样本,那么这10个样本就属于异常点。我们无法通过标准化、归一化等预处理方法去剔除...

    SVM的自实现

    SMO算法求解器

    引言 在大致读完libsvm源码后,我们就可以尝试实现自己的支持向量机。在Kaslanarian/PythonSVM: 支持向量机模型(分类与回归)的Python(numpy)实现 (github.com)中,我们自实现了SMO优化算法,并实现了libsvm中提到的五种支持向量机。 SMO算法的实现 基础SMO 在支持向量分类($C$-SVC)和支持向量回归($\varepsilon...

    计算图与自动微分

    概念简述

    在之前的课程(《机器学习导论》)和自己的实践中,实现神经网络最后往往需要对一个激活函数指定其求导规则,比如当激活函数取Sigmoid的时候,总是要预先定义2个函数: import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) def deriv_sigmoid(f): return f * (1 - f)...

    SMO求解支持向量回归

    可行性证明

    SVR在线性函数两侧制造了一个“间隔带”,间距为$\varepsilon$(也叫容忍偏差,是一个由人工设定的经验值),对所有落入到间隔带内的样本不计算损失,也就是只有支持向量才会对其函数模型产生影响,最后通过最小化总损失和最大化间隔来得出优化后的模型: 我们这里忽略从原问题到对偶问题的推导,直接给出对偶问题: \[\begin{aligned} \min_{\pmb{\alpha},...

    决策树算法的性能提升

    预测函数的优化

    引言 矢量化编程是提高机器学习算法速度的一种有效方法。例如,在线性回归模型中,我们已经求得了回归参数$\theta$和$b$,现在我们需要用该模型对一批数据进行预测,一个朴素的方法是利用for循环实现: y = [theta * x + b for x in X] 但实际上,numpy和pytorch等框架提供了矩阵乘法的接口,避免了显示的for循环,不但可以增加代码可读性,还可以提...

    Pytorch使用

    卷积池化与CNN

    引言 在用Pytorch构建神经网络时,全连接网络的构建很简单: class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(100, 512) self.fc2 = nn.Linear(512, 10) ...

    sklearn数据集的baseline

    获取与总结

    前言 笔者在编写模型时,常常用sklearn中较小的数据集验证自实现模型的能力。相比于直观的分类准确率,在回归问题中,我们无法通过均方误差直接判断模型效果,比如说:均方误差为10,这个模型是好是坏?因此我们只能进行模型间比较,比如:模型A的性能在模型B和模型C之间。我们这里主要是探究一些经典模型在sklearn中各个数据集上的表现,也就是baseline,为后面自实现模型的性能测试提供参考...