机器学习

频率视角下的机器学习:认为模型待估计的参数是固定不变的常量,用来估计参数的数据是随机的变量,需要我们通过某种手段(比如极大似然法)利用数据找到最优参数,损失函数(loss function)直接定义了模型性能的度量方式,其数学期望被称为风险(risk),风险最小化就是参数估计的依据和准则,用训练数据的经验分布替换掉原始表达式中数据的真实分布,借此找到最优参数

贝叶斯视角下的机器学习:将待估计的参数视为随机变量,用来估计的数据反过来是确定的常数,结合参数自身的分布特性,找到最可能产生观测数据的那个参数的过程,贝叶斯学习的输出是关于参数的概率分布

可被机器学习解决的问题:

  1. 解决的问题会包含某些显式或者隐式的模式
  2. 无法通过数值计算解决
  3. 要有大量的可用数据

监督学习适用于预测任务,无监督学习适用于描述任务

计算学习理论:关于通过”计算“来进行学习的理论,即关于机器学习的理论基础

目的:分析学习任务的困难本质,为学习算法提供理论保证,指导算法设计

集成学习

使用多个个体学习器来获得比每个单独学习器更好的预测性能

每个组中的个体学习器如果属于同一类型(比如都是线性回归或者都是决策树),形成的就是同质集成;相应地,由不同类型学习器得到的集成则称为异质集成

AdaBoost

通过训练多个弱分类器,将它们组合成一个强分类器

假设弱分类器为 Gi​(x),它在强分类器中的权重 αi​,那么就可以得出强分类器 f(x):

$$ f(x)=\sum_{i=1}^n\alpha_iG_i(x) $$

如果弱分类器的分类效果好,那么权重应该比较大,如果弱分类器的分类效果一般,权重应该降低

模型

参数模型与非参数下模型的区别体现的是可解释性和精确性的区别

  1. 模型拟合(model fitting):利用训练数据集(training set)对模型的普通参数进行拟合
  2. 模型选择(model selection):利用验证数据集(validation set)对模型的超参数进行调整,筛选出性能最好的模型
  3. 模型评价(model assessment):利用测试数据集(test set)来估计筛选出的模型在未知数据上的真实性能

实验

实验设计的任务是观察一个或多个因子对实验结果的影响,因此包括算法类型、超参数、数据集等

特征工程

异常点会导致数据的有偏分布,如果异常点是由于采集出错,需要剔除这些异常点。如果异常点本身没有问题,除了剔除异常点之外,除了可以对所有特征值采取对数变化降低数值外,还能使用空间标识把异常点拉成正常

对于缺失的特征值,可以用 k 近邻方法和线性回归对特征的缺失值进行人为赋值

如果某个特征在绝大多数数据中的取值都是相同的,那这个特征就没有存在的意义,因为它体现不出对于不同分类结果的区分度,可以把这个特征去掉

向量化运算

可以充分利用GPU进行大规模并行

x = np.array([1,2,3])
y = np.array([3,2,1])
np.dot(x,y) # = for i in n: x[i] * y[i]

优化

成本函数(代价函数)

用一个值代表方案的好坏程度 值越大代表方案越差,对于一个问题,会有多种变量,则需要对这些变量进行归一化计算,从而确定哪些变量更重要

若果可能,让最优解的成本函数为0,这样子当找到最优解后就可以停止后续的查找

梯度下降

梯度下降适用所有代价函数

梯度下降背后的思想是:开始时我们随机选择一个参数的组合,计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值,但线性回归的代价函数只会有一个最小值

20231021212810

梯度下降算法:

$$ tempw = w - \alpha\frac{\partial}{\partial{w}}J(w,b) = w - \frac{1}{m}\sum_{i=1}^{m}(f(x^{(i)}) - y^{(i)})x_j^{(i)} $$ $$ tempb = b - \alpha\frac{\partial}{\partial{b}}J(w,b) $$

w = tempw
b = tempb

对于多变量的线性回归模型,需要额外对所有的参数进行梯度下降:

$$ w_1 = w_1 - \alpha\frac{\partial}{\partial{w}}J(\vec{w},b) $$ $$ w_2 = w_2 - \alpha\frac{\partial}{\partial{w}}J(\vec{w},b) $$ $$ w_3 = w_3 - \alpha\frac{\partial}{\partial{w}}J(\vec{w},b) $$ $$ [w_1,w_2,w_3,...] = \vec{w} $$

$\alpha$是学习率(learning rate),决定了沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,学习率如果大小了,需要很多步才能到达全局最低点,学习率太大了,可能会越过最低点,甚至可能无法收敛

$\alpha$后面对代价函数的偏导数表示了代价函数在当前取值处的斜率,如果是正斜率,就能得出一个正数,如果是负斜率,就得出负数,这可以使得w,b参数值会向代价函数的最小值的参数值逼近

一个运行良好的梯度下降算法代价函数值应该会随着迭代次数的增加不断收敛到接近局部最小值

20231022135050

当计算的参数值不再变化时,就代表找到了局部最小值

软更新

在梯度下降中,为了防止参数更新发生较大变化,我们每次只取一部分新的参数跟大部分老的参数,即

$$ w = 0.01w_{new} + 0.99w\ b = 0.01b_{new} + 0.99b $$

特征缩放

在面对多维特征问题的时候,要保证这些特征都具有相近的尺度,如所有特征的取值都在0-1之间,这将帮助梯度下降算法更快地收敛

小批量梯度下降

如果训练集数据很多,按照正常的梯度下降,每轮都会把所有训练数据丢到代价函数计算一遍,小批量梯度下降的思想是,每轮梯度下降只取训练数据的一部分,这样可以有效减少计算量。

但这也会导致梯度下降收敛的速度比正常的慢。

过拟合

解决过拟合:

  1. 加入更多的训练数据
  2. 进行特征选择
  3. 正则化

正则化

基于误差函数的正则化:

$$ J(w,b) = \frac{1}{2m}\sum_{i=1}^m(f(x^{(i)}) - y^{(i)})^2 +\frac{\lambda}{2m}\sum_{j=1}^nw_j^2 $$

使得参数 w 越大,代价就越高,这样梯度下降算法就会选择较小的 w ,改善过拟合

如果选择的正则化参数$\lambda$过大,则会把所有的参数都最小化了,但若$\lambda$过小,那就只能得到一条斜率为0的直线

增加训练数据

蒙特卡洛算法和拉斯维加斯算法

蒙特卡罗算法原理:每次计算都尽量尝试找更好的结果路径,但不保证是最好的结果路径。用这样寻找结果的方法,无论何时都会有结果出来,而且给的时间越多、尝试越多,最终会越近似最优解

拉斯维加斯算法原理:就是每次计算都尝试找到最好的答案,但不保证这次计算就能找到最好的答案,尝试次数越多,越有机会找到最优解

随机搜索

生成一定范围内的随机题解,代入成本函数,也许可以得到一个可以接受的题解

爬山法

随机选取一个题解,在这个题解临近的解题空间内寻找成本更低的题解

这种方式问题是得到题解的可能只是局部最优而非全局最优

模拟退火算法

随机选取一个题解,然后也会跟爬山法一样尝试寻找成本更低的解

区别在于如果发现新的题解比老的题解花费的成本更高,这个题解可能也会被接收(随机),但随着迭代次数不断增加(温度下降),这种花费成本更高的题解被接受的概率会越来越小

遗传算法

随机选取一组题解,对这些题解的成本函数进行排序

选取成本函数最小的一部分顶端题解,称之为精英选拔,创建新种群,新种群的其他题解都是根据这些精英演变而来的

演变的方式有两种:

评估模型

数据集被划分为训练集跟测试集,一般是七三分

对于回归模型:通过比较不同模型测试集的预测误差的大小,越大代表对未知数据性能越差

预测误差的计算就是原理同线性回归的代价函数:

$$ J(w,b) = \frac{1}{2m}\sum_{i=1}^m(f(x^{(i)}) - y^{(i)})^2 $$

即数据集的预测值与目标值的差累加

更一般的,是把数据集被划分为训练集跟交叉验证集、测试集,一般是六二二分

通过比较不同模型对于验证集的预测误差,选择一个在验证集效果最好的模型,当最终决定使用哪个后模型,使用测试集来展示模型对未知数据的性能

总结一下,划分数据的方法有如下:

偏差与方差

偏差的含义是模型预测值的期望和真实结果之间的区别,如果偏差为 0,模型给出的估计的就是无偏估计,方差的含义则是模型预测值的方差,也就是预测值本身的波动程度,方差越小意味着模型越有效。

模型的设计追求低偏差,即准确度高,低方差,即比较简单的模型。高偏差意味着过拟合,高方差意味着欠拟合,理想情况下应该选择低偏差与低方差的模型,即在过拟合与欠拟合直接选择

偏差使用训练集计算得到,即对于训练集使用代价函数计算,代价越小,则偏差越高

方差使用验证集计算得到,即对于验证集使用代价函数计算,代价越小,则方差越低

模型验证的任务就是确定模型的复杂度以避免过拟合的发生,选择数据集基本的原则就是确保训练集、验证集和测试集三者两两互不相交,同时保证三个数据集中正例和负例的比例应该大致一致,避免在数据集之间出现不平衡,再在这些数据集上使用Holdout检验或者交叉校验

正则化可以用来防止过拟合,如果选择的正则化参数$\lambda$过大,则会把所有的参数都最小化了,这会使得模型欠拟合,而$\lambda$越小,模型就越过拟合

使用学习曲线可以决定是否能通过增加训练数据提升模型效果

高偏差下添加更多数据

高方差下添加更多数据

在过拟合的情况下,添加更多的数据能提升模型效果,但在欠拟合的情况下,模型压根就设计的不对,添加再多的数据也无益

较小的神经网络,参数比较少,容易欠拟合。而更大的神经网络,偏差相对会较低,即过拟合,使用正则化可以减少过拟合,但计算代价会越来越高,所以中大型神经网络一般要解决的是高方差的问题,针对不同隐藏层层数的神经网络训练神经网络, 然后选择验证集代价最小的神经网络

评估指标

对比项 正类 负类
被检索 True Positive False Positive
未检索 False Negative True Negative

宁愿漏掉,不可错杀:Precision 将是一个被侧重关心的指标。宁愿错杀,不可漏掉:Recall 将是一个被侧重关心的指标。当两个数字都很高时,表示模型有很好的效果

F-Score,用来综合考虑 Precision 与 Recall,$\beta$是用来调整 Precision 与 Recall 二者的权重,这个分数越高代表 Precision 与 Recall 更平衡:

$$ FS=\left(1+\beta^2\right)\cdot\frac{Precision\cdot Recall}{\beta^2\cdot(Precision+Recall)} $$

对数损失:

$$ \begin{aligned}-\frac{1}{N}\sum_{i=1}^{N}\left(y_i\log P_1+(1-y_i)\log\left(1-P_i\right)\right)\end{aligned} $$

(二分类对数损失函数)

yi​ 是输入实例 xi​ 的真实类别, pi​ 是预测输入实例 xi​ 是正样本的概率,N 是样本总数

(多分类对数损失函数)

$$ \text{Multi-LogLoss }=-\frac1n\sum_{i=1}^n\sum_{j=1}^my_{i,j}\log{(p_{i,j})} $$

均方根误差:用来评估预测连续值的模型的效果

$$ \mathrm{RMSE}=\sqrt{\frac{\sum_{i=1}^n\left(y_i-\hat{y}_l\right)^2}n} $$

yi​ 是第 i 个样本点的真实值,y^​l​ 是第 i 个样本点的预测值,n 是样本点的个数。那么均方根误差越小,就证明这个回归模型预测越精确

P-R曲线:横轴是召回率,纵轴是精确率,可以用来对比不同模型在固定召回率或精确率的情况,另外一个指标怎样

ROC曲线:横坐标是 False Positive Rate(FPR,假阳性率),纵坐标是 True Positive Rate (TPR,真阳性率)

AUC 是ROC曲线下的面积,AUC 的取值范围在 0 到 1 之间,越接近 1 表示分类器性能越好

平均精度均值:

调参

网格搜索

超参数是机器学习算法中需要手动设置的参数,不同的超参数组合可能会对模型的性能产生显著影响。网格搜索通过指定超参数的候选值,并遍历所有可能的组合,来找到最佳的超参数组合

随机搜索

随机搜索在超参数空间中随机选择一组候选值进行评估,而不是遍历所有可能的组合

迁移学习

如果要解决的问题没有足够多的训练数据,可以找一个相同任务类型的神经网络,利用其已经训练完成的隐藏层参数,根据需要修改输出层,并输入我们自己的训练数据,对模型进行微调,这样可以有效利用别人已经预训练好的模型来解决我们的问题

20231025221555

强化学习

不必告诉算法 每个输入 x 的正确输出 y 是什么,而是要指定一个奖励函数,告诉它何时表现良好,何时表现不佳。 算法的工作是自动弄清楚如何选择好的动作

要解决的问题要多种状态$S(s_1,s2,..,s_n)$ 每个状态都有属于它的奖励$r$,奖励通过奖励函数计算得到:$R(s_i) = r_i$。算法需要根据一个策略$\pi$ 求解当前所处状态应该采取什么行动$a$,即$\pi(s_n) = a$,算法所能最终得到的回报是与折扣因子$\gamma$有关,即最终回报 = $r_1 + \gamma r_2 + \gamma^2 r_3 + ...$

状态操作值函数

$Q(s,a)$返回在状态s下,使用a行动,能获取到的最大回报,并且通过这个行动跟这个状态,后续也是最优解

贝尔曼方程:

$$ Q(s,a)=R(s)+\gamma\max_{a^{\prime}}Q(s^{\prime},a^{\prime}) $$

方程的第一部分也被称为即时奖励,第二部分是从当前状态开始,能得到的最大奖励

这样可以通过贝尔曼方程来创建神经网络的训练数据:

$$ x = (s,a) \ y = R(s)+\gamma\max_{a^{\prime}}Q(s^{\prime},a^{\prime}) $$

让神经网络算出最优的Q函数,这样就可以在当前状态$s$下,应该采取什么行动$a$

深度强化学习

ϵ-贪婪策略

前期收集训练数据时,我们并不知道采取什么行动比较好,一种方式是不管当前状态如何,都采取随机行动。

一种被称为$\epsilon$贪婪策略的方法,定义一个参数$\epsilon$,每次,你有$1-\epsilon$的几率总是选择使得$Q(s,a)$最大的$a$,同时,另外$\epsilon$的几率就是随机做出行动$a$

随机环境

对于某些问题,下一个状态可能是随机的,此时强化学习的目标就从选择最大回报变成使得预期的回报尽可能大

连续状态空间

有些问题的状态取值可能不是离散的,而是一个有连续值的向量

概率图模型

用图论表现随机变量之间的条件依赖关系的建模方法

贝叶斯网络

stateDiagram-v2
  a --> c
  a --> b
  b --> d
  b --> c
  c --> e

$$ p(A,B,C,D,E)=p(A)\cdot p(B|A) \cdot p(C|B,A)\cdot p(D|B)\cdot p(E|C) $$

马尔可夫随机场

无向图模型,它的每个顶点表示一个随机变量,每条边则表示随机变量之间的依赖关系

和贝叶斯网络相比,马尔可夫随机场侧重于表示随机变量之间的相互作用

高斯网络

由高斯型连续随机变量构成的概率图模型统称为高斯网络

高斯过程

由出现在连续域上的无穷多个随机变量所组成的随机过程

隐马尔可夫模型

由隐藏的状态序列和可见的观测序列构成,能够对时序依赖关系建模

线性动态系统

假设一个传感器被用于测量未知的物理量 z,但测量结果 x 会受到零均值高斯噪声的影响,如果可以对 z 进行多次重复测量的话,就可以通过求解这些结果的平均来平滑掉随机噪声的影响

如果考虑上 z 在不同时间点的时变特性,如果变量本身并不会出现多少波动。这时就可以将平滑窗口的长度,也就是用于求平均的测量结果的数目取得大一些,以取得更好的抑制随机噪声的效果,而如果变量本身是快速变化的,这时就要适当地调小平滑窗口,同时给相距较近的测量结果赋予更大的平滑权重

推断

利用图结构表示的概率分布计算查询变量的概率

集群智能

由众多简单个体组成的群体能够通过相互之间的简单合作来实现某些功能,完成某些任务

当构成一个系统的基本单元数量极为庞大时,将这些个体看作一个整体,就会有一些全新的属性、规律或模式自发地冒出来,这种现象就称为“涌现”(emergence)

蚁群算法:

知识图谱

由大量的概念实体以及它们之间的关系共同构成的语义网络

知识图谱可以根据已有实体的概念、属性和关系为新的概念自动生成属性;也可以明确不同新实体之间的关系

知识推理可以分为归纳和演绎两类

流形学习

用于处理高维数据的降维和可视化。这类方法的目标是在保持数据的局部结构和流形特性的同时,将高维数据映射到一个低维空间,从而揭示数据的内在结构

数据挖掘

基本流程

商业理解是数据挖掘项目成功的关键之一,因为这有助于确保项目从一开始就是针对商业目标而设计的。

数据理解和数据准备是数据挖掘的重要前提,因为数据质量对于最终的模型效果至关重要。

模型建立和模型评估是数据挖掘的核心步骤,这是构建和测试模型的关键阶段。

上线发布是数据挖掘项目的最终目标,因为这意味着模型已经被应用到商业实践中,并且提供了有价值的商业洞察。

监控和维护是确保数据挖掘结果持续有效的关键步骤,因为数据和商业需求都在不断变化,需要定期评估和更新模型

数据挖掘背后的数学原理:

数据挖掘的任务

度量学习

将 k 近邻算法和 k 均值算法这些基于距离的方法推广一步,得到的就是相似性学习(similarity learning)和它的变种度量学习(metric learning)

度量学习就是通过定义合适的距离度量或相似性度量来完成特定的分类或者回归任务,算法尝试学习一个合适的度量函数,使得在学得的度量下,相似的样本之间的距离较小,而不相似的样本之间的距离较大

算法选择

选择算法时的其他考量因素:

  1. 训练数据大小: 数据量较小时可选择高偏差、低方差的算法,如线性回归和朴素贝叶斯;数据足够大时可选择低偏差、高方差的算法,如KNN、决策树和神经网络。
  2. 特征数量: 大量特征可使用SVM,也可通过PCA和特征选择来降低维度。深度学习适用于处理巨大特征量的问题。
  3. 性能和可解释性的权衡: 需要在模型性能和可解释性之间进行权衡,选择适合业务目标的算法,如线性模型对可解释性较好,而灵活模型(如神经网络)对准确性较好。
  4. 速度或训练时间: 实际应用中,选择算法时需考虑算法的训练时间,特别是对于在线应用。一些简单而迅速的算法如朴素贝叶斯可能更适合这些场景。
  5. 数据的线性程度: 对于线性数据,逻辑回归和支持向量机等算法表现较好;对于复杂数据集,可选择核SVM、随机森林、XGBoost和神经网络等。

深度学习应用: 对于大数据时代的分类问题,深度学习神经网络是一种强大的解决方案,特别适用于非结构化数据,如语音识别、计算机视觉和自然语言处理等。