前言

监督学习是利用一组已知类别的样本(即已标注的训练数据)来调整分类器(或模型)的参数,使其达到所要求的性能。在监督学习中,每个训练样本都包含一个输入对象(如向量、图像、文本等)和一个期望的输出值(也称为标签或监督信号)。模型通过学习这些输入输出对之间的关系,从而能够对新的、未标注的数据进行预测或分类

监督学习的原理基于模型对输入数据的学习过程。通常一个监督学习算法会使用某种数学模型(如神经网络、决策树、支持向量机等)来拟合训练数据。通过调整模型的参数,使其在训练数据上达到最佳性能(如最小化损失函数),从而能够对新的数据进行准确的预测或分类


统计检验

均值检验(T 检验)

T 检验的原理是通过计算 T 统计量来比较两个样本均值之间的差异是否超出了随机误差范围,从而判断差异是否显著。它基于样本数据,通过计算 T 统计量和对应的P值,来判断两组数据的均值是否存在显著差异


T 检验类型

  1. 单一样本:用于检验一个样本的均值是否与一个已知的总体均值存在显著差异

    μ=nxinxˉ=kxiks=(xixˉ)n1T=xˉμsn\mu=\frac{\sum^n x_i}{n}\\\bar{x}=\frac{\sum^k x_i}{k}\\s=\sqrt{\frac{\sum(x_i-\bar{x})}{n-1}}\\T=\frac{\bar{x}-\mu}{\frac{s}{\sqrt{n}}}

  2. 配对样本:用于比较同一组样本在两个不同条件下的均值是否显著不同。这种检验假设两个条件下的数据是成对的,即每个观察值在两个条件下都有对应,并且成对差值符合正态分布

    sp=(n11)s12+(n21)s22n1+n22T={(xˉ1xˉ2)(μ1μ2)sp2n1+sp2n2s12=s22xˉ1xˉ2s12n1+s22n2s12s22s_p=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2}\\T=\left\{\begin{aligned}&\frac{(\bar{x}_1-\bar{x}_2)-(\mu_1-\mu_2)}{\sqrt{\frac{s_p^2}{n_1}+\frac{s_p^2}{n_2}}}&&s_1^2=s_2^2\\&\frac{\bar{x}_1-\bar{x}_2}{\sqrt{\frac{s_1^2}{n_1}+\frac{s_2^2}{n_2}}}&&s_1^2\not=s_2^2\end{aligned}\right.

  3. 独立样本:用于检验两个独立样本的均值是否存在显著差异,这种检验假设两组数据是独立的,即一个组的观察值不会受到另一个组的影响,并且两组数据符合正态分布和方差齐性

    其中 dˉ\bar{d} 是配对差值的均值, sds_d 是配对差值的标准差, nn 是配对样本的数量。其中配对差值就是同一组数据在不同时间的测量值的插值

    T=dˉsdnT=\frac{\bar{d}}{\frac{s_d}{\sqrt{n}}}


方差分析(ANOVA)

方差分析的基本原理在于比较不同处理组之间的均数差异,这些差异主要来源于两个方面:

  1. 组间差异 sbs_b :由不同的处理或实验条件造成的差异,用变量在各组的均值与总均值之偏差平方和的总和表示
  2. 组内差异 sws_w :由随机误差造成的差异,如测量误差或个体间的差异,用变量在各组的均值与该组内变量值之偏差平方和的总和表示
  3. 总偏差平方和 sts_t 是组间差异和组内差异之和,即 st=sb+sws_t=s_b+s_w

公式

dt=n1db=k1dw=(dtdb)=nkmb=sbdbmw=swdwF=mbmwd_t=n-1\\d_b=k-1\\d_w=(d_t-d_b)=n-k\\m_b=\frac{s_b}{d_b}\\m_w=\frac{s_w}{d_w}\\F=\frac{m_b}{m_w}

其中

  • dtd_t 是总自由度,定义为总样本数减一
  • dbd_b 组间自由度,定义为组数减一
  • dwd_w 组内自由度,定义为总自由度减去组间自由度
  • mbm_b 组间均方,组间差异平方和除以组间自由度
  • mwm_w 组内均,组内偏差平方和除以组内自由度
  • FF 组内均方除以组间均方

检验

在方差分析中,通常使用F检验来比较组间和组内的方差。选择一个显著性水平(如α=0.05),根据组间和组内自由度,查找F分布表来确定临界F值。如果计算出的F值大于临界F值,则拒绝零假设(所有组的平均数相等),认为组间存在显著差异;如果计算出的F值小于或等于临界F值,则不能拒绝零假设,认为组间没有显著差异


卡方检验(Chi-Square Test)

卡方检验(Chi-Square Test)是一种用于检验分类变量之间独立性的统计方法,通过比较观察频数与期望频数之间的差异,判断变量之间是否存在显著关联


类型

  • 卡方独立性检验:检验两个分类变量是否独立
  • 卡方拟合优度检验:用于检验观察频数是否符合理论分布

观察频数和期望频数

  • 观察频数是指在实验或调查中实际观测到的每个类别的频数(即计数)
  • 期望频数是指在假设原假设成立的情况下,理论上每个类别应该出现的频数,期望频数通常基于原假设计算
    • 在卡方独立性检验中,第 ii 行第 jj 列的期望频数计算公式为 Eij=行总计×列总计总样本量E_{ij}=\frac{行总计\times列总计}{总样本量}

卡方独立性检验

  • 假设

    • 原假设:两个变量独立
    • 备选假设:两个变量相关
  • 检验统计量卡方值

    χ2=(OijEij)2Eij\chi^2=\sum\frac{(O_{ij}-E_{ij})^2}{E_{ij}}

    • OijO_{ij} 是观察频数
    • EijE_{ij} 是期望频数
  • 自由度

    df=(r1)×(c1)df=(r-1)\times(c-1)

    • rr 是行数
    • cc 是列数

卡方拟合优度检验

  • 假设

    • 原假设:观察频数符合理论分布
    • 备选假设:观察频数不符合理论分布
  • 检验统计量卡方值

    χ2=(OiEi)2Ei\chi^2=\sum\frac{(O_{i}-E_{i})^2}{E_{i}}

    • OiO_{i} 是观察频数
    • EiE_{i} 是期望频数
  • 自由度

    df=k1df=k-1

    • kk 是类别数

步骤

  1. 明确原假设和备择假设
  2. 根据原假设计算期望频数
  3. 使用公式计算卡方统计量和自由度
  4. 根据卡方统计量和自由度,查找卡方分布表或使用统计软件计算 p 值
  5. 确定显著性水平和临界值,通常选择显著性水平 α=0.05\alpha=0.05
  6. 如果 p 值小于临界值拒绝原假设,否则接受原假设

相关性检验

相关性检验旨在探讨两个或多个变量之间的关联性,以确定它们之间是否存在某种程度的关联。这种关联可以是正相关(一个变量增加时,另一个变量也增加),负相关(一个变量增加时,另一个变量减少)或不相关

变量之间的相关程度通常用相关系数 rr 来表征,相关系数r的取值范围在 1-111 之间

  • rr 接近 11 时,表示两个变量之间存在强烈的正相关关系
  • rr 接近 1-1 时,表示存在强烈的负相关关系
  • rr 接近 00 时,表示两个变量之间几乎不相关

r=[(xixˉ)(yiyˉ)n1(xixˉ)2n1(yiyˉ)2n1r=\frac{\frac{\sum[(x_i-\bar{x})(y_i-\bar{y})}{n-1}}{\sqrt{\frac{\sum(x_i-\bar{x})^2}{n-1}}\sqrt{\frac{\sum(y_i-\bar{y})^2}{n-1}}}

其中 xix_iyiy_i 就是两组数据


正态性检验

正态性检验是统计判决中重要的一种特殊的拟合优度假设检验,用于确定一组数据是否来自于正态分布,或判断样本是否来自正态总体

正态分布是一种连续概率分布,其图形呈现为对称的钟形曲线,具有特定的数学特性,如均值、中位数和众数相等,以及特定的方差和标准差。许多统计测试(如t检验、方差分析ANOVA、回归分析等)都要求数据近似正态分布。如果数据不满足正态性,这些测试的结果可能不准确或不可靠。因此,正态性检验的主要目的是验证数据集是否满足某些统计分析方法的前提假设


正态性检验的方法

  1. 图示法:
    • 直方图:可以直观地展示数据的分布情况,如果数据基本符合正态分布,则会呈现出中间高、两侧低、左右基本对称的“钟形”分布曲线
    • P-P图:将实际数据累积比例作为X轴,将对应正态分布累积比例作为Y轴作散点图,反映实际累积概率与理论累积概率的符合程度。如果数据服从正态分布,则散点分布应近似呈现为一条对角直线
    • Q-Q图:将实际数据作为X轴,将对应正态分布分位数作为Y轴,作散点图,反映变量的实际分布与理论分布的符合程度。与P-P图类似,如果数据服从正态分布,则散点也应近似呈现为一条对角直线
  2. 统计检验法:
    • Kolmogorov-Smirnov检验:适用于大样本量的正态性检验
    • Shapiro-Wilk检验:适用于小样本量的正态性检验
    • Anderson-Darling检验:也是常用的正态性检验方法之一

非参数检验

非参数检验(Nonparametric tests)是统计分析方法的重要组成部分,与参数检验共同构成统计推断的基本内容

非参数检验是在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态等进行推断的方法。由于非参数检验方法在推断过程中不涉及有关总体分布的参数(如均值、方差等),因而得名为“非参数”检验。它基于数据的秩次(即数据排序后的名次)而不依赖于具体的概率分布,因此在处理未知分布型资料或等级顺序资料时具有独特的优势


F 检验

F检验(F-test),也被称为联合假设检验、方差比率检验或方差齐性检验,是在零假设之下统计值服从F分布的检验。它通常用于分析用了超过一个参数的统计模型,以判断该模型中的全部或一部分参数是否适合用来估计母体。F 检验通过比较两组数据的方差(或更广义地说,是两个样本统计量的比值),以确定它们的精密度是否存在显著性差异


公式

S2=(xixˉ)2n1F=S12S22S^2=\frac{\sum(x_i-\bar{x})^2}{n-1}\\F=\frac{S_1^2}{S_2^2}


回归算法

回归是一种监督学习方法,它用于预测连续型变量,回归的主要任务是估计一个或多个自变量(输入)和一个因变量(输出)之间的关系,并建立一个回归方程(函数)用来预测目标值。回归一般分析的输出是连续的数值


常见算法

  1. 线性回归(Linear Regression):线性回归假设目标变量和特征之间存在线性关系,它利用数理统计中的回归分析,来确定两种或两种以上变量间相互依赖的定量关系。线性回归的数学模型公式为 y=β0+β1x1+β2x2+...+βnxn+εy=\beta_0+\beta_1x_1+\beta_2x_2+...+\beta_nx_n+\varepsilon ,其中 yy 是预测值, x1,x2,...,xnx_1,x_2,...,x_n 是输入变量, β0,β1,...,βn\beta_0,\beta_1,...,\beta_n 是权重, ε\varepsilon 是误差
  2. 多项式回归(Polynomial Regression):多项式回归是线性回归的一种扩展,它通过将输入特征升幂来拟合非线性关系,可以捕捉数据中的非线性关系,但模型的复杂度较高。例如 y=β0+β1x+β2x2+...+βnxny=\beta_0+\beta_1x+\beta_2x^2+...+\beta_nx^n
  3. 岭回归(Ridge Regression):岭回归通过引入 L2 正则化项来惩罚模型的复杂度,从而减轻过拟合的现象。其基本原理是在线性回归的基础上,增加一个对权重的平方和的限制条件,即正则化项。这个正则化项会使得权重向量在求解过程中尽可能小,从而避免模型过于复杂,减少过拟合的风险
  4. 逐步回归(Steps Regression):逐步回归的基本思想是将变量一个一个地引入模型,并在每引入一个新变量后,对已入选回归模型的旧变量逐个进行检验,将经检验认为不显著的变量删除,直到没有新变量可以引入,也没有旧变量可以被删除为止。这样,最终保留在模型中的变量既重要又没有严重的多重共线性
  5. 套索回归(Lasso Regression):套索回归通过在目标函数中添加 L1 正则化项(即所有回归系数的绝对值和),对模型的系数进行惩罚,从而实现对特征的稀疏表示。具体来说,它试图在最小化预测值与真实值之间的误差(即残差平方和)的同时,使回归系数的绝对值之和尽可能小
  6. 决策树回归(Regression Tree):决策树回归基于树结构来对数据进行建模和预测。在决策树中,每个内部节点表示一个属性或特征,每个分支代表一个测试结果,而每个叶节点则代表一个输出值(对于回归任务来说,这个输出值通常是一个连续的数值)。决策树的构建过程是一个递归的过程,它通过选择最佳的属性或特征来进行数据划分,使得划分后子集的输出值尽可能接近真实值
  7. 支持向量回归(Support Vector Regression, SVR):SVR 的核心思想是通过寻找支持向量来构建一个分离超平面,从而实现对不确定的函数关系的建模。与 SVM 用于分类问题不同,SVR 将 SVM 扩展到回归问题,通过构建一个分离超平面来实现对非线性关系的建模
  8. 弹性网回归(Elastic Net Regression):弹性网回归在损失函数中同时引入了 L1 和 L2 正则化项,以约束模型的复杂度。损失函数形式为 L(w)=RSS(w)+α(ρw1+(1ρ)2w22)L(w)=RSS(w)+\alpha(\rho|w|_1+\frac{(1-\rho)}{2}|w|_2^2) ,其中 RSS(w)RSS(w) 是残差平方和, α\alpha 是正则化强度参数, ρ\rho 是 L1 和 L2 正则项的混合参数, w1|w|_1w2|w|_2 分别是权重向量的 L1 和 L2 范数
  9. 随机森林回归(Random Forest Regression):随机森林回归是一种集成学习方法,通过构建多个回归树并将它们的结果进行集成来提高预测性能,可以处理高维数据、抗过拟合、预测精度高。使用中构建多个回归树,每个树都使用部分特征和部分样本来进行训练。最终的预测结果是所有树预测结果的平均值或加权平均值

线性回归

线性回归是假设变量和特征之间的线性关系,利用数理统计中的回归分析来确定两种及以上的变量之间的相互依赖的定量关系,映射关系如下

y=f(x)=wx+by=f(x)=wx+b


代价函数

对于一组数据 x0,xnx_0,…x_n 和它们所对应的目标值 y0,yny_0,…y_n 来说,中间建立一个映射函数如下

y^i=f(xi)\hat y_i=f(x_i)

定义代价函数如下,也就是平均方差

i=0n(y^iyi)2n\frac{\sum_{i=0}^n(\hat y_i-y_i)^2}{n}

只需要求解最小值,得到最终的拟合数据即可

但是在机器学习中,一般会使用如下函数作为代价函数,以便后续处理能更加整洁

J(w,b)=i=0n(y^iyi)22nJ(w,b)=\frac{\sum_{i=0}^n(\hat y_i-y_i)^2}{2n}

最终的结果就是求解出 w,bw,b 使得代价函数最小

minw,bJ(w,b)=minw,bi=0n(y^iyi)22n\underset{w,b}{\min}J(w,b)=\underset{w,b}{\min}\frac{\sum_{i=0}^n(\hat y_i-y_i)^2}{2n}


梯度下降法

梯度下降法的基本原理是沿着目标函数梯度的反方向(即下降最快的方向),以一定的步长更新参数,直到达到最小值。梯度是一个向量,表示函数在某一点处变化最快的方向。梯度指向函数增长最快的方向,而梯度的反方向则是函数下降最快的方向。所以沿着梯度的反方向移动,可以使函数值迅速减小


算法步骤:

  1. 选择参数初始值
  2. 计算目标函数在当前参数下的梯度
  3. 根据梯度值和预设的学习率,更新参数值,一般是沿着梯度增长的反方向移动。实际上就是为了使代价函数不断减小
  4. 循环迭代第 2 和第 3 步,直到迭代次数或者最终结果达到要求

缺点

  1. 对于非凸函数,梯度下降法可能会陷入局部最小值或者鞍点
  2. 学习率的选择对算法的收敛速度和稳定性有着很大影响,学习率小收敛速度小,学习率大则会导致结果震荡或者偏离最小值
  3. 对于高纬度数据的处理,梯度下降法所需的计算资源和时间太多

实现

对于一个线性回归函数 y=f(x)=wx+by=f(x)=wx+b ,求解其中的 w,bw,b ,列出代价函数如下

J(w,b)=i=0n(y^iyi)22nJ(w,b)=\frac{\sum_{i=0}^n(\hat y_i-y_i)^2}{2n}

定义梯度下降函数如下

wi=wi1αwJ(wi1,bi1)bi=bi1αbJ(wi1,bi1)w0=winitialb0=binitialw_{i}=w_{i-1}-\alpha\frac{\partial}{\partial w}J(w_{i-1},b_{i-1})\\b_{i}=b_{i-1}-\alpha\frac{\partial}{\partial b}J(w_{i-1},b_{i-1})\\w_0=w_{initial}\\b_0=b_{initial}

其中的 α\alpha 为学习率


例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
% Russion Gradient descent
x = [88.9 108.5 104.1 139.7 127 94 116.8 99.1];
y = [14.6 16.7 15.3 23.2 19.5 16.1 18.1 16.6];

syms w b;

J = 0;

for i = 1 : length(x)
J = J + (w * x(i) + b - y(i)) ^ 2;
end

J = simplify(J) / length(x);

w_tmp = 0.1;
b_tmp = 0.1;
alpha = 0.00001;

J_last = 0;
J_val = double(subs(J, [w, b], [w_tmp, b_tmp]));

while abs(J_last - J_val) > 0.001
J_last = J_val;
w_tmp1 = w_tmp - alpha * double(subs(diff(J, w), [w, b], [w_tmp, b_tmp]));
b_tmp1 = b_tmp - alpha * double(subs(diff(J, b), [w, b], [w_tmp, b_tmp]));
w_tmp = w_tmp1;
b_tmp = b_tmp1;
J_val = double(subs(J, [w, b], [w_tmp, b_tmp]));
end

最终得到的结果如下

w=0.1582b=0.1005J=0.7217w=0.1582\\b=0.1005\\J=0.7217

拟合结果比较不错,但是需要注意的是,学习率的选取对最终的结果影响会非常大


梯度下降法的变种

  • 批量梯度下降:每次迭代时,使用所有的训练数据来计算损失函数的梯度,然后根据这个梯度更新模型的参数

    • 理想状态下经过足够多次数的迭代,可以得到全局最优解,具有误差梯度和聚合性
    • 计算量大

    J(w,b)=i=0n(y^iyi)22nwi=wi1αwJ(wi1,bi1)bi=bi1αbJ(wi1,bi1)w0=winitialb0=binitialJ(w,b)=\frac{\sum_{i=0}^n(\hat y_i-y_i)^2}{2n}\\w_{i}=w_{i-1}-\alpha\frac{\partial}{\partial w}J(w_{i-1},b_{i-1})\\b_{i}=b_{i-1}-\alpha\frac{\partial}{\partial b}J(w_{i-1},b_{i-1})\\w_0=w_{initial}\\b_0=b_{initial}

  • 随机梯度下降:每次迭代使用一个样本来计算梯度

    • 计算效率高,随机性大,可能有利于跳出局部最优解
    • 更新过程具有较大的波动性,无法保证梯度更新的稳定性,容易受到学习率的影响

    J(w,b)=(y^iyi)22wi=wi1αwJ(wi1,bi1)bi=bi1αbJ(wi1,bi1)w0=winitialb0=binitialJ(w,b)=\frac{(\hat y_i-y_i)^2}{2}\\w_{i}=w_{i-1}-\alpha\frac{\partial}{\partial w}J(w_{i-1},b_{i-1})\\b_{i}=b_{i-1}-\alpha\frac{\partial}{\partial b}J(w_{i-1},b_{i-1})\\w_0=w_{initial}\\b_0=b_{initial}

  • 小批量梯度下降:每次迭代使用一小部分数据来计算梯度,并更新参数

    • 减少了计算开销,比批量梯度下降更快,波动性比随机梯度下降小,因此更新更平稳,批量大小可调节
    • 仍具有一定随机性,可能导致收敛不稳定

    J(w,b)=(y^iyi)22nwi=wi1αwJ(wi1,bi1)bi=bi1αbJ(wi1,bi1)w0=winitialb0=binitialJ(w,b)=\frac{\sum(\hat y_i-y_i)^2}{2n}\\w_{i}=w_{i-1}-\alpha\frac{\partial}{\partial w}J(w_{i-1},b_{i-1})\\b_{i}=b_{i-1}-\alpha\frac{\partial}{\partial b}J(w_{i-1},b_{i-1})\\w_0=w_{initial}\\b_0=b_{initial}

  • 动量梯度下降:在普通梯度下降的基础上引入动量的概念。动量会在每次更新时保留一部分上一次的更新方向,并在下次迭代中加以利用,从而加速收敛,尤其是在有很多局部最小值的非凸优化问题中。公式中 β\beta 为动量参数

    • 减少了梯度更新中的震荡,尤其是在凹凸形状的表面上;能加速梯度下降的收敛,特别是在长而平的曲面上
    • 需要调节额外的动量系数,并且对初始化较为敏感

    J(w,b)=i=0n(y^iyi)22npw,i=βwpw,i1+(1βw)αwJ(wi1,bi1)wi=wi1pw,ipb,i=βbpb,i1+(1βb)αbJ(wi1,bi1)bi=bi1pb,iw0=winitialb0=binitialJ(w,b)=\frac{\sum_{i=0}^n(\hat y_i-y_i)^2}{2n}\\p_{w,i}=\beta_wp_{w,i-1}+(1-\beta_w)\alpha\frac{\partial}{\partial w}J(w_{i-1},b_{i-1})\\w_{i}=w_{i-1}-p_{w,i}\\p_{b,i}=\beta_bp_{b,i-1}+(1-\beta_b)\alpha\frac{\partial}{\partial b}J(w_{i-1},b_{i-1})\\b_{i}=b_{i-1}-p_{b,i}\\w_0=w_{initial}\\b_0=b_{initial}

  • RMSProp:通过对过去的梯度平方进行指数加权平均,来动态调整学习率,使得参数更新更加平滑

    • 自适应学习率,有效应对学习率不适的问题,在非凸优化问题中表现优异,通常能够更快地收敛
    • 超参数 γ\gammaα\alpha 仍需要调节
    • 公式中 ε\varepsilon 为一个小常数,防止除零错误,一般选择 10810^{-8}

    pw,i=γwpw,i1+(1γw)(wJ(wi,bi))2wi+1=wiαpw,i+εwJ(wi,bi)pb,i=γbpb,i1+(1γb)(bJ(wi,bi))2bi+1=biαpb,i+εbJ(wi,bi)p_{w,i} = \gamma_w p_{w,i-1} + (1 - \gamma_w)(\frac{\partial}{\partial w} J(w_i,b_i))^2\\w_{i+1} = w_i - \frac{\alpha}{\sqrt{p_{w,i}} + \varepsilon}\frac{\partial}{\partial w} J(w_i,b_i)\\p_{b,i} = \gamma_b p_{b,i-1} + (1 - \gamma_b)(\frac{\partial}{\partial b} J(w_i,b_i))^2\\b_{i+1} = b_i - \frac{\alpha}{\sqrt{p_{b,i}} + \varepsilon}\frac{\partial}{\partial b} J(w_i,b_i)

  • Adam(Adaptive Moment Estimation):结合了动量法和 RMSProp 的优点,既使用了梯度的一阶矩估计(动量),也使用了梯度的二阶矩估计(RMSProp 中的平方梯度)。通过对一阶和二阶矩进行修正,Adam 可以提供一个更平滑的更新过程

    • 具有自适应学习率,可以处理稀疏梯度,结合动量和 RMSProp 的优点,更新更加平滑和稳定,是目前深度学习中最常用的优化算法之一
    • 在某些情况下可能会产生较大的步长,导致模型的过拟合
    • 其中 β1\beta_1 是控制一阶矩估计的指数衰减率(常用为 0.9), β2\beta_2 是控制二阶矩估计的指数衰减率(常用值为0.999)

    gw,i=wJ(wi,bi)mw,i=βw,1mw,i1+(1βw,1)gw,ivw,i=βw,2vw,i1+(1βw,2)gw,i2m^w,i=mw,i1βw,1iv^w,i=vw,i1βw,2iwi=wi1αm^w,iv^w,i+εg_{w,i}=\frac{\partial}{\partial w} J(w_i,b_i)\\m_{w,i}=\beta_{w,1}m_{w,i-1}+(1-\beta_{w,1})g_{w,i}\\v_{w,i}=\beta_{w,2}v_{w,i-1}+(1-\beta_{w,2})g_{w,i}^2\\\hat{m}_{w,i}=\frac{m_{w,i}}{1-\beta_{w,1}^i}\\\hat{v}_{w,i}=\frac{v_{w,i}}{1-\beta_{w,2}^i}\\w_i=w_{i-1}-\alpha\frac{\hat{m}_{w,i}}{\sqrt{\hat{v}_{w,i}}+\varepsilon}

  • Nadam:一种结合了 Nesterov 动量和 Adam 的优化算法。与 Adam 相比,Nadam 添加了 Nesterov 动量的修正,可以更好地处理稀疏梯度问题。在每次对梯度进行计算时,Nadam 算法会先获得一个参数临时更新量,对参数进行临时更新后计算获得临时梯度,利用临时梯度对一阶矩与二阶矩进行估计,并使用这些临时矩来计算参数的更新量

    • Nadam 算法通过结合 Nesterov 动量法,使得在更新参数时能够考虑前一步的速度,从而在某些情况下能够比 Adam 算法更快地收敛
    • 其中第二个值是修正之后的结果

    gw,i=wJ(wi,bi)mw,i=βw,1mw,i1+(1βw,1)gw,ivw,i=βw,2vw,i1+(1βw,2)gw,i2m^w,i=mw,i1βw,1iv^w,i=vw,i1βw,2imˉw,i=βw,1mw,i1+(1βw,1)gw,i1βw,1iwi=wi1αm^w,iv^w,i+εwi=wi1αmˉw,iv^w,i+εg_{w,i}=\frac{\partial}{\partial w} J(w_i,b_i)\\m_{w,i}=\beta_{w,1}m_{w,i-1}+(1-\beta_{w,1})g_{w,i}\\v_{w,i}=\beta_{w,2}v_{w,i-1}+(1-\beta_{w,2})g_{w,i}^2\\\hat{m}_{w,i}=\frac{m_{w,i}}{1-\beta_{w,1}^i}\\\hat{v}_{w,i}=\frac{v_{w,i}}{1-\beta_{w,2}^i}\\\bar{m}_{w,i}=\beta_{w,1}m_{w,i-1}+\frac{(1-\beta_{w,1})g_{w,i}}{1-\beta_{w,1}^i}\\w_i=w_{i-1}-\alpha\frac{\hat{m}_{w,i}}{\sqrt{\hat{v}_{w,i}}+\varepsilon}\\w_i=w_{i-1}-\alpha\frac{\bar{m}_{w,i}}{\sqrt{\hat{v}_{w,i}}+\varepsilon}

  • Adadelta:一种自适应学习率算法,它通过动态调整每个参数的学习率来平衡学习速度和稳定性

    • Adadelta 可以自适应地调整每个参数的学习率,并且能够自动调整参数的动量,从而在收敛速度和精度方面表现出色
    • 通过自适应地调整学习率,Adadelta 算法通常能够加速模型的收敛过程
    • 其中 δp\delta_p 表示参数更新量, δ\delta 是累积更新量的指数加权平均(初始化为 0 或很小的值), ε\varepsilon 为一个小常数,通常选择 10810^{-8}

    gw,i=wJ(wi,bi)si=ρsi1+(1ρ)gw,i2δp=δi+εsi+εgw,iwi=wi1+δpδi=ρδi1+(1ρ)δp2g_{w,i}=\frac{\partial}{\partial w} J(w_i,b_i)\\s_i=\rho s_{i-1}+(1-\rho)g_{w,i}^2\\\delta_p=-\frac{\sqrt{\delta_{i}+\varepsilon}}{\sqrt{s_{i}+\varepsilon}}g_{w,i}\\w_i=w_{i-1}+\delta_p\\\delta_i=\rho\delta_{i-1}+(1-\rho)\delta_p^2


多元线性回归

对于 nn 个条件的线性回归,有 mm 组数据 x0,0,x0,1,xm,nx_{0,0},x_{0,1},…x_{m,n} 对应的结果 y0,ymy_0,…y_m , 可以列出如下矩阵

xi=[x0...xn]\vec{x}_i=\begin{bmatrix}x_0\\...\\x_n\end{bmatrix}

列出线性回归函数如下

yi=wxi+bw=[w0...wn]y_i=\vec{w}\vec{x}_i+b\\\vec{w}=\begin{bmatrix}w_0&...&w_n\end{bmatrix}


多元回归的梯度下降法

根据梯度下降法列出如下方程

y^=f(xi)J(w,b)=1mi=0m(f(xi)yi)2\hat{y}=f(\vec{x}_i)\\J(\vec{w},b)=\frac{1}{m}\sum_{i=0}^m(f(\vec{x}_i)-y_i)^2

定义梯度下降函数如下

wi=wi1αwJ(wi1,bi1)bi=bi1αbJ(wi1,bi1)w0=winitialb0=binitial\vec{w}_{i}=\vec{w}_{i-1}-\alpha\frac{\partial}{\partial \vec{w}}J(\vec{w}_{i-1},b_{i-1})\\b_{i}=b_{i-1}-\alpha\frac{\partial}{\partial b}J(\vec{w}_{i-1},b_{i-1})\\\vec{w}_0=\vec{w}_{initial}\\b_0=b_{initial}

其中的 α\alpha 为学习率


特征缩放

特征缩放(Feature Scaling)是数据预处理中的一个重要步骤,特别是在使用基于梯度的优化算法(如线性回归、逻辑回归、神经网络等)时。它的主要目的是将不同特征的量级归一化或标准化,使得它们在相同的尺度上,从而帮助算法更快地收敛,提高模型的性能和稳定性


特征缩放的几种方法

  1. 标准化
    • 标准化的数据具有零均值 u=0u=0 和单位方差 σ=1\sigma=1
    • 公式 x=xuσx^\prime=\frac{x-u}{\sigma}
  2. 归一化
    • 将数据缩放到一定范围,一般是 0 到 1
    • 使用最大最小值进行缩放 x=xxminxmaxxminx^\prime=\frac{x-x_{min}}{x_{max}-x_{min}}
    • 缺点是对异常值敏感
  3. 最大绝对值缩放
    • 这种方法通过除以每个特征的最大绝对值来缩放数据,保留了数据的正负号,并且对于稀疏数据(如文本数据)特别有用
    • 公式 x=xxmaxx^\prime=\frac{x}{x_{max}}
  4. Robust Scaling
    1. 使用中位数和四分位数范围来缩放数据,使其对异常值更加鲁棒,对于数据集中存在大量异常值的情况非常有用。
    2. 公式 x=xQ2Q3Q1x^\prime=\frac{x-Q_2}{Q_3-Q_1} ,其中 Q2Q_2 为中位数, Q1Q_1 是第 1 四分位数, Q3Q_3 是第 3 四分位数
  5. 对数缩放
    1. 对数缩放是指通过应用对数函数来转换数据的值,从而改变数据的尺度
    2. 公式 x=logbxx^\prime=\log_b{x}
    3. 在对数缩放中,数据的相对比例关系得以保持,这使得数据的变化趋势更加清晰可见,对数缩放可以将大范围的数据压缩到较小的区间内,使得数据更易于处理和分析,对异常值敏感较低
  6. Box-Cox 变换
    1. Box-Cox 变换是 Box 和 Cox 提出的一种广义幂变换方法,是统计建模中常用的一种数据变换技术
    2. Box-Cox 变换是一种通过引入一个参数 λ\lambda ,对原始数据进行幂函数变换的方法,使用最大似然估计或其他方法估计最优的 λ\lambda
    3. 公式 x={xλ1λλ0ln(x)λ=0x^\prime=\left\{\begin{aligned}\frac{x^{\lambda}-1}{\lambda}&&\lambda\not=0\\\ln(x)&&\lambda=0\end{aligned}\right.

梯度下降法的收敛性

对于梯度下降法的收敛性的判断,可以通过观察 JtimesJ-times 的曲线,如下

1731077068645.png


影响因素

  • 学习率过大可能导致算法在最优解附近震荡,甚至越过最优解,导致不收敛
  • 学习率过小则收敛速度过慢,计算成本高
  • 不同的初始值可能导致算法收敛到不同的局部最优解
  • 函数的凸性、强凸性等性质对梯度下降法的收敛性有重要影响
  • 凸函数只有一个全局最优解,因此梯度下降法通常能够收敛到全局最优解,而非凸函数可能有多个局部最优解,导致梯度下降法可能收敛到局部最优解而非全局最优解

岭回归

岭回归(Ridge Regression)的公式主要用于求解带有L2正则化项的线性回归模型。岭回归的目标是最小化一个包含原始损失函数(通常是均方误差)和正则化项(L2 范数的平方)的目标函数


目标函数

minB((yiβ0βxi)2+λββT)\underset{\Beta}{\min}(\sum(y_i-\beta_0-\vec{\beta}\vec{x}_i)^2+\lambda\vec{\beta}\vec{\beta}^T)

实际上就是 L2 正则化之后的代价函数

J(w,b)=J0(w,b)+λ2mwi2J(\vec{w},b)=J_0(\vec{w},b)+\frac{\lambda}{2m}\sum w_i^2

其中

  • yiy_i 是目标值, xi\vec{x}_i 是自变量
  • β0\beta_0 是截距项系数
  • β\vec{\beta} 是回归系数
  • λ\lambda 是正则化参数,用于控制正则化的强度
  • B=[β0β]\Beta=\begin{bmatrix}\beta_0&\vec{\beta}\end{bmatrix}

求解

岭回归的回归系数可以通过如下线性方程组来求解

(XTX+λI)B=XTy(X^TX+\lambda I)\Beta=X^Ty

其中

  • XX 是设计矩阵,
  • B\Beta 是回归系数的向量
  • 该函数可以通过简单的求解逆来求解,从而得到岭回归的回归系数

需要注意的是

  1. 当 λ=0\lambda=0 时,岭回归退化为普通的线性回归
  2. 随着 λ\lambda 的增加,回归系数的绝对值会逐渐减小,从而起到正则化的作用
  3. 但是过大的 λ\lambda 可能导致模型欠拟合,因此需要选择合适的 λ\lambda 值。这通常通过交叉验证等方法来实现

逐步回归

逐步回归分析是在多元线性回归分析法的基础上发展起来的。它的主要思路是找出在引入的多个自变量中,按其对因变量的作用大小或者说显著程度,将自变量由大到小引入回归方程。每一步都要进行统计检验(如F检验),以确保每次引入新的变量之前回归方程中只包含显著的变量。如果某个已引入的变量在后续步骤中变得不显著,它也可能会被剔除出模型

在逐步回归模型中,根据逐步选择过程的结果,只有一部分自变量会包含在最终方程中。因此方程式将具有以下形式:

y=β0+β1x1+...+βkxky=\beta_0+\beta_1x_1+...+\beta_kx_k

其中 x1,xkx_1,…x_k 是包含在模型中的自变量, β0,βk\beta_0,…\beta_k 是对应的回归系数


变量选择方法

  1. 向前引入法:回归方程从一开始只包含常数项开始,把自变量逐个引入回归方程,每一步中选择一个使得引入后总体统计检验最小的自变量加入模型
  2. 向后剔除法:先将全部自变量加入回归方程,然后逐个剔除最不显著的自变量。在每一步中,选择一个使得剔除后总体统计检验变化最小的自变量从模型中剔除
  3. 双向剔除法:结合了向前引入法和向后剔除法的优点。在每一步中,既可以添加新的显著自变量,也可以剔除已存在的不显著自变量

计算系数方法

同线性回归一样的方法,列出代价函数并且迭代求解,只是每一次迭代时方程模型都会有一定的变化


套索回归

“套索”代表“最小绝对值收敛”和“选择算子”。它常用于机器学习中以便处理高维数据,因为它有助于通过其应用来自动选择特征。通过向残差平方和 (RSS) 添加罚项,然后将其乘以正则化参数 λ\lambda ,即可实现此目的。该正则化参数可控制所应用的正则化程度。 λ\lambda 的值越大,惩罚也越高,从而可将更多系数缩小为零;随后,此操作会降低(或完全消除)模型中某些特征的重要性,从而实现自动特征选择。相反,较小的 λ\lambda 值会降低惩罚的影响,从而在模型中保留更多特征


公式

J(w,b)=J0(w,b)+λ2mwiJ(\vec{w},b)=J_0(\vec{w},b)+\frac{\lambda}{2m}\sum |w_i|

实际上套索回归的代价函数就是 L1 正则化之后的代价函数


决策树回归

介绍

CART 决策树模型可以处理回归任务,其构建的回归决策树被称为《最小二乘回归树》

决策树回归是一种非参数化的回归方法,它使用树状结构来进行数据的分割和预测。决策树回归通过递归地将数据分割成不同的子集,从而建立一个模型,这个模型可以解释自变量(特征)和因变量(目标变量)之间的关系。相比于线性回归等参数化方法,决策树回归可以捕捉更复杂的非线性关系,并且不需要对数据的分布做出假设

决策树回归的核心在于将输入空间划分为多个区域,并在每个区域内进行预测。每个节点代表一个属性上的判断,每个叶节点代表一个区域的预测值。在训练过程中,算法会选择最优的属性和切分点,以便最小化每个区域内的目标变量的方差


树的节点

  • 根节点:树的起始节点,包含整个数据集
  • 内部节点:表示数据的分割点,每个内部节点都会根据某个特征值将数据分割为两部分
  • 叶节点:树的末端节点,每个叶节点代表一个预测值或输出值

过拟合问题

  • 决策树回归容易过拟合,即模型在训练数据上表现很好,但在新数据上表现不佳
  • 为了避免过拟合,可以使用剪枝技术
    • 预剪枝:在构建树的过程中提前停止树的生长
    • 后剪枝:在树构建完成后,通过移除一些节点来简化树的结构

划分区域时的代价函数

L=(yiyˉ1)2+(yiyˉ2)2L=\sum(y_i-\bar{y}_1)^2+\sum(y_i-\bar{y}_2)^2

需要注意的是,划分之后的两个区域完全不重合


优点

  • 能够捕捉复杂的非线性关系
  • 对数据的分布没有假设要求
  • 对缺失值和异常值具有一定的鲁棒性

缺点

  • 容易过拟合,特别是在数据集较小或特征较多时
  • 对于连续值的预测,可能不如一些参数化方法平滑

例子

x 1 2 3 4 5 6 7 8 9 10
y 5.56 5.7 5.91 6.4 6.8 7.05 8.9 8.7 9 9.05

对上述的数据进行划分,首先是先划分为 2 个区域,使得两个区域的代价函数最小,从而选择最优的切分点 ss

s 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5
y 15.72 12.07 8.36 5.78 3.91 1.93 8.01 11.73 15.74

所以选择的最佳切分点为 6.5。如果想要继续切分就每一部分按照上述步骤继续切分,直到叶节点


支持向量回归

支持向量回归(Support Vector Regression,简称 SVR)是一种常用的回归分析方法,它不仅可以用于解决各种回归问题,还广泛应用于图像处理中的诸多任务

SVR 的核心思想是通过找出支持向量来构建一个分隔超平面(在二维空间中为直线,三维空间中为平面,以此类推至高维空间),从而实现对输入数据的回归预测。与支持向量机 SVM 用于分类问题类似,SVR 也是基于结构风险最小化原理,并尽量提高模型的泛化能力


特点

  • 具有较好的泛化能力,对噪声和异常值具有较强的抗干扰能力
  • 稀疏性:仅使用支持向量来做决策,无需使用全部数据,这在处理大规模数据集时非常有用
  • 可以通过选择不同的核函数来适应不同的数据分布和特征

优点

  • 有效性:在解决高维特征的回归问题时表现优秀,尤其在特征维度大于样本数时依然有很好的效果
  • 稀疏性:仅使用支持向量进行预测,降低了计算复杂度

缺点

  • 当样本量非常大或核函数映射维度非常高时计算量可能过大
  • 对缺失数据敏感,如果数据集中存在缺失值,可能需要进行预处理
  • 在某些情况下,如特征维度远远大于样本数时,SVR 的表现可能一般

弹性网回归

弹性网回归(Elastic Net Regression)是一种结合了岭回归(Ridge Regression)和Lasso回归(Least Absolute Shrinkage and Selection Operator)优点的线性回归模型变种,属于广义线性模型


代价函数

J(w,b)=J0(w,b)+λ2m(1ρ2wi2+ρwi)J(\vec{w},b)=J_0(\vec{w},b)+\frac{\lambda}{2m}(\frac{1-\rho}{2}\sum w_i^2+\rho\sum|w_i|)

其中

  • ρ\rho 是 L1 正则化和 L2 正则化的权重比例,介于 0 到 1 之间,通过调整 ρ\rho 的值,可以在特征选择和多重共线性处理之间取得平衡
    • ρ=1\rho=1 时,弹性网退化为 Lasso 回归
    • ρ=0\rho=0 时,弹性网退化为 Ridge 回归
  • λ\lambda 是正则化强度参数,控制正则化项的影响力。较大的值意味着更强的正则化,可能导致更多的特征权重为 0(L1 部分)或接近 0(L2 部分)

特点

  • 能够同时处理多重共线性和特征选择问题
  • 在特征之间存在高度相关性时表现稳健
  • 通过调整参数可以在特征选择和系数收缩之间取得平衡

优点

  • 灵活性:结合了 Lasso 和 Ridge 的优点,适用于多种场景
  • 稳定性:在处理高度相关特征时比 Lasso 更稳健
  • 特征选择:能够自动选择出重要的特征,降低模型的复杂度

缺点

  • 与单纯的 Lasso 相比,在极端稀疏问题上的解可能不够稀疏,不利于模型解释性
  • 参数调整相对复杂,需要通过交叉验证等方法精心选择

随机森林回归

随机森林回归模型是一种机器学习算法,它通过集成多个决策树来进行预测,并以其高预测精度、鲁棒性和可解释性而闻名


原理

  • 决策树集成:随机森林回归模型由多个决策树组成,每个决策树都是根据训练数据的不同子集训练的。决策树是一种监督学习算法,它将数据划分为越来越小的子集,直到每个子集中只包含一种目标值。决策树的每个节点表示一个特征,每个分支表示该特征的不同值
  • 随机特征选择:在训练每个决策树时,模型会随机选择特征子集,这有助于减少过拟合并提高模型的泛化能力。泛化能力是指模型在未见数据上的表现。随机特征选择通过创建对训练数据中噪声和异常值不那么敏感的模型来提高模型的泛化能力
  • 集成方法:随机森林回归模型通过集成多个决策树来提高预测精度。集成方法是将每个决策树的预测结果取平均值或加权平均值

优点

  • 高预测精度:随机森林回归模型通过集成多个决策树的预测结果,能够显著提高预测精度
  • 鲁棒性强:由于随机森林模型在训练过程中随机选择样本和特征,这使得模型具有很高的多样性和鲁棒性,对数据的微小变化不敏感
  • 可解释性好:随机森林回归模型的可解释性相对较好,可以通过分析每个决策树的分裂过程来理解模型的预测逻辑

缺点

  • 过拟合风险:尽管随机森林模型通过组合多个决策树来减少过拟合的风险,但在某些情况下,如果模型的复杂性过高,仍然可能存在过拟合的问题
  • 计算开销大:训练随机森林模型可能需要大量的时间和计算资源,特别是对于大型数据集。这可能是限制在资源受限的环境中使用该模型的一个因素

分类算法

在监督学习中,分类任务是基本任务之一,即输入数据要被划分到某些类别中去


常见算法

  1. 逻辑回归(Logistic Regression):逻辑回归是一种用于二分类问题的算法,通过建立一个线性决策边界来对数据进行分类。它使用逻辑函数(也称为 sigmoid 函数)来估计输入特征与目标类别之间的关系,输出结果为 0 到 1 之间的概率值。逻辑回归也可以扩展到多分类问题,但通常用于二分类场景
  2. 支持向量机(Support Vector Machine,SVM):支持向量机是一种强大的分类算法,它通过寻找一个最佳分割超平面来对数据进行分类。SVM 算法试图找到一个最大化间隔的超平面来分离不同类别的数据点,对于非线性数据,SVM 可以通过核函数将数据映射到高维空间进行处理。SVM在高维数据中表现优异,适合处理复杂的分类任务
  3. 决策树(Decision Tree):决策树是一种基于树结构的分类算法,通过对数据进行递归分割来构建决策树。在决策树中每个内部节点表示一个特征的判定条件,叶节点则对应类别标签。决策树易于理解和可视化,但可能容易过拟合,需要剪枝或组合方法(如随机森林)来提升泛化性能
  4. K 最近邻(k-Nearest Neighbors,kNN):K 最近邻是一种基于实例的分类算法,通过计算待分类样本与训练集中 k 个最相似样本的距离来确定分类结果,没有显式的学习过程,属于懒惰学习。简单易用,但计算复杂度高,特别是当数据量大时
  5. 朴素贝叶斯(Naive Bayes):朴素贝叶斯是一种基于贝叶斯定理的分类算法,它假设各个特征之间相互独立,通过计算各个特征的条件概率来确定分类结果。朴素贝叶斯快速、适合大数据集但假设特征独立不总是合理的
  6. 随机森林(Random Forest):随机森林是一种集成学习算法,它通过构建多个决策树,并将它们的结果进行集成来提高分类性能。随机森林抗过拟合、精度高,但训练时间长,模型难以解释
  7. 神经网络(Neural Networks):神经网络是一种黑盒模型,可以通过训练数据自动推断出输入与输出之间的规律,能 够处理高度非线性的数据,适用于图像识别、语音识别等领域。深度学习中的卷积神经网络(CNN)通常用于图像分类,循环神经网络(RNN)用于序列数据分类

逻辑回归

逻辑回归(Logistic Regression)是一种广泛应用于分类任务的统计方法,特别是二分类问题。尽管它的名字中含有“回归”二字,但逻辑回归实际上是一种分类算法,主要用于预测某个事件发生的概率。其核心思想是使用一个函数(通常是 sigmoid 函数)将线性回归模型的输出映射到 (0,1)(0, 1) 区间内,从而得到概率输出


原理如下

  1. 线性回归:逻辑回归首先计算一个线性组合 y^=wx+b\hat{y}=\vec{w}\vec{x}+b 其中 w\vec{w} 是权重向量, x\vec{x} 是输入特征向量, bb 是偏置项

  2. Sigmoid 函数:然后将线性组合的 yy 通过 Sigmoid 函数转化为概率值

    σ(x)=11+ex\sigma(x)=\frac{1}{1+e^{-x}}

  3. 决策边界:逻辑回归通过调整权重向量 ww 和偏置项 bb 来拟合训练数据,从而找到一个决策边界,将输入空间划分为两个类别

  4. 损失函数:使用对数损失(Log Loss)或二元交叉熵(Binary Cross-Entropy)作为损失函数,来衡量模型预测的概率与真实标签之间的差异,定义如下

    • 其中 mm 是样本数量, yiy_i 是真实输出值, y^i\hat{y}_i 是预测的输出值
    • 在这个损失函数中,当 yiy_iy^i\hat{y}_i 的差距如果过大的话,就会导致损失函数很大。例如 yi=1,y^i=0.1y_i=1,\hat{y}_i=0.1 时, L(w,b)=1mL(w,b)=\frac{1}{m} ,如果 y^i=0.9\hat{y}_i=0.9 时, L(w,b)=0.046mL(w,b)=\frac{0.046}{m} ,然后通过学习不断减小损失函数,以此来达到最终的拟合结果

    L(w,b)=yilog(yi^)+(1yi)log(1y^i)L(w,b)=y_i\log(\hat{y_i})+(1-y_i)\log(1-\hat{y}_i)

  5. 代价函数:根据损失函数得到,计算每一个数据的损失,然后求和得到代价函数

    J(w,b)=1mL(w,b)=1m[yilog(yi^)+(1yi)log(1y^i)]J(w,b)=-\frac{1}{m}\sum L(w,b)=-\frac{1}{m}\sum[y_i\log(\hat{y_i})+(1-y_i)\log(1-\hat{y}_i)]

  6. 优化算法:通常使用梯度下降法来最小化损失函数,从而找到最优的权重向量和偏置项

  7. 模型函数:

    f(x)=σ(wx+b)f(\vec{x})=\sigma(\vec{w}\vec{x}+b)


公式

y^i=σ(wxi+b)=11+e(wxi+b)J(w,b)=1mL(w,b)=1m[yilog(yi^)+(1yi)log(1y^i)]wi=wi1αwJ(wi1,bi1)bi=bi1αbJ(wi1,bi1)\hat{y}_i=\sigma(\vec{w}\vec{x}_i+b)=\frac{1}{1+e^{-(\vec{w}\vec{x}_i+b)}}\\J(w,b)=-\frac{1}{m}\sum L(w,b)=-\frac{1}{m}\sum[y_i\log(\hat{y_i})+(1-y_i)\log(1-\hat{y}_i)]\\w_{i}=w_{i-1}-\alpha\frac{\partial}{\partial w}J(w_{i-1},b_{i-1})\\b_{i}=b_{i-1}-\alpha\frac{\partial}{\partial b}J(w_{i-1},b_{i-1})


正则化代价函数

正则化是一种用于防止模型过拟合的技术。它通过向代价函数中添加一个正则化项来限制模型的复杂度,从而增强模型的泛化能力

  1. L1 正则化:L1 正则化通过向代价函数中添加模型参数的绝对值之和作为正则化项,可以使得部分参数变为零,从而实现稀疏化,有助于特征选择
  2. L2 正则化:L2 正则化通过向代价函数中添加模型参数的平方和作为正则化项,可以使得参数值更加均匀且较小,有助于防止模型过拟合

在分类算法中,正则化的应用可以显著提高模型的泛化能力。通过调整正则化参数(如 L1 或 L2 正则化中的 λ\lambda ),可以控制正则化项的强度,从而找到模型复杂度和泛化能力之间的最佳平衡点


L1 正则化公式

修正之后的代价函数如下

J(w,b)=J0(w,b)+λ2mwi(+λ2mb)J(\vec{w},b)=J_0(\vec{w},b)+\frac{\lambda}{2m}\sum |w_i|(+\frac{\lambda}{2m}|b|)


L2 正则化公式

修正之后的代价函数如下

J(w,b)=J0(w,b)+λ2mwi2(+λ2mb2)J(\vec{w},b)=J_0(\vec{w},b)+\frac{\lambda}{2m}\sum w_i^2(+\frac{\lambda}{2m}b^2)


需要注意的是

  1. 当 λ=0\lambda=0 时,岭回归退化为普通的线性回归
  2. 随着 λ\lambda 的增加,回归系数的绝对值会逐渐减小,从而起到正则化的作用
  3. 但是过大的 λ\lambda 可能导致模型欠拟合

因此需要选择合适的 λ\lambda 值。这通常通过交叉验证等方法来实现


支持向量机

支持向量机(Support Vector Machine,SVM)是一种监督式学习的方法,广泛应用于统计分类以及回归分析中。SVM 的基本模型是定义在特征空间上的间隔最大的线性分类器,其学习策略是
间隔最大化,这可以形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的求解算法是求解凸二次规划的最优化算法


线性 SVM

  • 线性可分
    • 在二维空间上,两类点被一条直线完全分开,这称为线性可分
    • 在多维空间中,两类点被一个超平面完全分开
  • 最佳超平面
    • SVM 的目标是找到一个最佳超平面,也称为最大间隔超平面,它以最大间隔将两类样本分开。支持向量是距离这个超平面最近的样本点,它们决定了超平面的位置和方向
  • 间隔最大化
    • SVM 通过最大化支持向量到超平面的距离来实现间隔最大化。这个距离被称为几何间隔,它是支持向量到超平面的垂直距离

非线性 SVM

  • 非线性分类问题
    • 对于非线性分类问题,SVM 通过引入核函数将其转化为高维特征空间中的线性分类问题
    • 核函数表示通过非线性转换后的两个实例间的内积,它允许 SVM 在原始空间中处理非线性关系
  • 常用核函数:包括线性核、多项式核、径向基函数(RBF)核等。其中,RBF核(如高斯核)是最常用的核函数之一,它能够将数据映射到一个无穷维的特征空间中

软间隔与 C-SVM

  • 软间隔:在实际应用中,完全线性可分的数据集很少,因此 SVM 引入了软间隔的概念,允许某些样本点不满足约束条件(即被错误分类)。这通过引入松弛变量和惩罚参数 C 来实现
  • C-SVM:C是惩罚参数,用于控制对错误分类的惩罚程度,选择合适的 C 值对于 SVM 的性能至关重要
    • C 值越大,对错误分类的惩罚越重,模型越倾向于过拟合
    • C 值越小,对错误分类的惩罚越轻,模型越倾向于欠拟合

贝叶斯分类器

先验概率

没有对样本进行任何观测的情况下的概率,用 P(ci)P(c_i) 表示第 ii 个类型的先验概率,则有

P(ci)=1\sum P(c_i)=1


条件概率

属于类 ii 的事件具有观测特征 xx 的条件概率,记为 P(xci)P(x|c_i)

从而可以得到观测到具有特征 xx 的样本的概率为

P(x)=P(xci)P(ci)P(x)=\sum P(x|c_i)P(c_i)


后验概率

系统在观测到某个具体样本具有观测特征 xx 的条件下,判断其属于某种类型的概率,记作 P(cix)P(c_i|x)

P(cix)=P(xci)P(ci)(P(xci)P(ci)=P(xci)P(ci)P(x)P(c_i|x)=\frac{P(x|c_i)P(c_i)}{\sum(P(x|c_i)P(c_i)}=\frac{P(x|c_i)P(c_i)}{P(x)}


最小错误率分类策略

对于具有观测特征 xx 的样本,错误率为该部分样本被决策为 cic_i 但是实际上并非是 cic_i 的样本所占这部分样本的比例,即条件错误概率

P(errorx)=cjciP(cjx)P(error|x)=\sum_{c_j\not=c_i}P(c_j|x)

则平均错误率为决策为所有类别之后这部分样本的错误率之和

P(e)=P(ex)P(x)dxP(e)=\int P(e|x)P(x)dx

贝叶斯分类器选择具有最高后验概率的类别作为决策结果

C^=arg maxC P(Cx)\hat{C}=\underset{C}{\argmax}\ P(C|x)

在二分类问题中,每次决策是把一个决策区域划分为两个部分,即

R1(,t)P(ex)=P(c2x)R2(t,+)P(ex)=P(c1x)R_1\sim(-\infty,t)\quad P(e|x)=P(c_2|x)\\R_2\sim(t,+\infty)\quad P(e|x)=P(c_1|x)

上述相对应的平均错误率为

P(e)=2P(c1x)P(x)dx+1P(c2x)P(x)dx=2P(xc1)P(c1)dx+1P(xc2)P(c2)dx=P1(e)P(c1)+P2(e)P(c2)P(e)=\int_2 P(c_1|x)P(x)dx+\int_1 P(c_2|x)P(x)dx\\=\int_2 P(x|c_1)P(c_1)dx+\int_1 P(x|c_2)P(c_2)dx=P_1(e)P(c_1)+P_2(e)P(c_2)

其中

1=t2=t+\int_1=\int_{-\infty}^t\\\int_2=\int_t^{+\infty}

可以构造二分类的判决函数(用来鉴别某个样本属于哪个类别的函数):

{ifg(x)=P(c1x)P(c2x)>0xc1ifg(x)=P(xc1)P(xc2)>P(c2)P(c1)=εxc1ifg(x)>lnP(c2)P(c1)=εxc1\left\{\begin{aligned}&if\quad g(x)=P(c_1|x)-P(c_2|x)>0\rightarrow x\in c_1\\&if\quad g(x)=\frac{P(x|c_1)}{P(x|c_2)}>\frac{P(c_2)}{P(c_1)}=\varepsilon\rightarrow x\in c_1\\&if\quad g(x)>\ln\frac{P(c_2)}{P(c_1)}=\varepsilon'\rightarrow x\in c_1\end{aligned}\right.

上述三种判决函数分别是剑法判决函数,比例判决函数和对数判决函数


最小风险分类策略

有时候错误最小决策并不是最佳决策,在贝叶斯决策理论中,当不同分类错误的分线不相等时,为了最小化整体风险或预期损失,需要采用基于最小风险的分类策略

损失函数 λij\lambda_{ij} 表示实际类别为 cjc_j 的样本错误分类到 cic_i 时所造成的损失。实际使用中,损失函数可以根据问题自行定义

对于给定的样本 X ,采取决策 αi\alpha_i 可能导致的条件风险如下

R(αix)=j=1kλijP(cjx)R(\alpha_i|x)=\sum_{j=1}^k\lambda_{ij}P(c_j|x)

最终采取具有最小风险的决策

α^=arg minα R(αx)\hat{\alpha}=\underset{\alpha}{\argmin}\ R(\alpha|x)

对应的构造二分类的判决函数

ifg(x)=R(α1x)R(α2x)>0xc2if\quad g(x)=R(\alpha_1|x)-R(\alpha_2|x)>0\rightarrow x\in c_2


限定错误率的分类决策

实际工作中,有时候需要限制某一类的错误率,并使得另一类的错误率尽可能小

对于一个二分类问题,由上述的错误率可以得到

P1(e)=2P(xc1)dxP2(e)=1P(xc2)dxP_1(e)=\int_2 P(x|c_1)dx\\P_2(e)=\int_1 P(x|c_2)dx

已知 P1(e)P_1(e) 为假阳率, P2(e)P_2(e) 为假阴率,则在 P2(e)=ε0P_2(e)=\varepsilon_0 的条件下得到 P1(e)P_1(e) 的最小值

minP1(e)s.t.P2(e)=ε0\min P_1(e)\\s.t.\quad P_2(e)=\varepsilon_0

求解有约束的极值,要用到 Lagrange 乘数法。构造 Lagrange 函数

L(x,μ)=P1(e)+μ(P2(e)ε0)=2P(xc1)dx+μ(1P(xc2)dxε0)L(x,\mu)=P_1(e)+\mu(P_2(e)-\varepsilon_0)=\int_2 P(x|c_1)dx+\mu(\int_1 P(x|c_2)dx-\varepsilon_0)

在二分类问题中,由概率密度函数可以得到

2P(xc1)dx=11P(xc1)dx\int_2 P(x|c_1)dx=1-\int_1 P(x|c_1)dx

带入上述 Lagrange 函数中可以得到

L(x,μ)=(1με0)+1[μP(xc2)P(xc1)]dxL(x,\mu)=(1-\mu\varepsilon_0)+\int_1[\mu P(x|c_2)-P(x|c_1)]dx

分别对 xxμ\mu 求偏导并令其为 0,可以得到

μ=P(xc1)P(xc2)P2(e)=1P(xc2)dx=ε0\mu=\frac{P(x|c_1)}{P(x|c_2)}\\P_2(e)=\int_1P(x|c_2)dx=\varepsilon_0

二分类的限定错误率的分类决策的判定函数为

ifg(x)=P(xc1)P(xc2)>μxc1if\quad g(x)=\frac{P(x|c_1)}{P(x|c_2)}>\mu\rightarrow x\in c_1


朴素贝叶斯分类器

贝叶斯原理

贝叶斯原理是概率论中的一个重要定理,它描述了两个独立随机事件之间的条件概率关系

P(AB)=P(BA)×P(A)P(B)P(A|B)=\frac{P(B|A)\times P(A)}{P(B)}

其中

  • P(A)P(A) 是 A 的先验概率,是不考虑 B 的因素时,A 发生的概率
  • P(B)P(B) 是 B 的先验概率,是不考虑 A 的因素时,B 发生的概率
  • P(BA)P(B|A) 是已知 A 发生条件下 B 发生的概率,是 B 发生的后验概率

贝叶斯算法核心思想

贝叶斯方法是以贝叶斯原理为基础,使用概率统计的知识对样本数据集进行分类

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类


朴素贝叶斯算法

朴素贝叶斯算法的核心思想是通过考虑特征概率来预测分类,即对于给出的待分类样本,求解在此样本出现的条件下各个类别出现的概率,哪个最大,就认为此待分类样本属于哪个类别


优点

  • 模型简单:基于简单的概率模型,易于理解实现
  • 分类速度快,分类过程开销小
  • 不需要大量数据训练
  • 适用于多分类
  • 对缺失数据不敏感

缺点

  • 需要特征之间相互独立,一般会假设特征之间相互独立,现实中不易实现,从而影响算法效果
  • 对输入数据的表达数据敏感
  • 对不平衡的数据敏感
  • 样本数量少时,先验概率可能不准确

基础公式

P(CX)=P(XC)P(C)P(X)P(C|X)=\frac{P(X|C)P(C)}{P(X)}

其中

  • P(CX)P(C|X) 是给定观测值 XX 时结果类别为 CC 的概率
  • P(XC)P(X|C) 是给定类别 CC 时观测值为 XX 的概率
  • P(C)P(C) 是类别 CC 的先验概率
  • P(X)P(X) 是观测值 XX 的边际概率

朴素贝叶斯分类器

朴素贝叶斯分类器假设给定类别 CC 时,特征 X1,XnX_1,…X_n 是互相独立的,所以条件概率 P(XC)P(X|C) 可以分解为

P(XC)=P(X1,...,XnC)=Πi=1nP(XiC)P(X|C)=P(X_1,...,X_n|C)=\Pi_{i=1}^nP(X_i|C)

代入贝叶斯定理基础公式中得到如下

P(CX)=Πi=1nP(XiC)P(C)P(X)P(C|X)=\frac{\Pi_{i=1}^nP(X_i|C)P(C)}{P(X)}

由于 P(X)P(X) 是对所有类别都相同的常数,因此比较不同类别的后验概率时,可以忽略 P(X)P(X) ,只需要比较分子即可

P(CX)Πi=1nP(XiC)P(C)P(C|X)\propto \Pi_{i=1}^nP(X_i|C)P(C)


决策规则

朴素贝叶斯分类器选择具有最高后验概率的类别作为预测结果

C^=argmaxCP(CX)=argmaxC(Πi=1nP(XiC)P(C))\hat{C}=\arg\underset{C}{\max}P(C|X)=\arg\underset{C}{\max}(\Pi_{i=1}^nP(X_i|C)P(C))

由于 log\log 函数是单调增函数,可以将上述连乘的公式简化如下

C^=argmaxC(i=1n[logP(XiC)+logP(C)])\hat{C}=\arg\underset{C}{\max}(\sum_{i=1}^n[\log P(X_i|C)+\log P(C)])


参数估计

  • 对于离散特征,通常使用极大似然估计来计算 P(XiC)P(X_i|C)
  • 对于连续特征,可以使用高斯朴素贝叶斯,其中 P(XiC)P(X_i|C) 假设为高斯分布,通过计算均值和方差来估计

似然估计与似然函数

似然估计,是一种在统计学中用于估计模型参数的方法,其核心思想是找到能够最大化观测数据出现概率(即似然函数)的参数值

似然函数是统计学中的一个重要概念,它表示在给定参数值下,观测到样本数据的概率,似然函数通常如下表示

L(θx1,...,xm)=P(x1,...,xmθ)L(\theta|x_1,...,x_m)=P(x_1,...,x_m|\theta)

其中 θ\theta 为模型参数, x1,,xmx_1,…,x_m 为观测到的样本数据。

对于连续型离散随机变量,如果样本数据是独立的,则似然函数可以表示为概率密度函数的乘积

L(θx1,...,xm)=Πi=1nP(xiθ)L(\theta|x_1,...,x_m)=\Pi_{i=1}^nP(x_i|\theta)

P(xiθ)P(x_i|\theta) 是在参数 θ\theta 下,观测值 xix_i 处的概率密度函数

一般在使用中会使用似然函数的对数,如下

L(θx1,..,xn)=i=1nlogP(xiθ)L(\theta|x_1,..,x_n)=\sum_{i=1}^n\log P(x_i|\theta)


求解—MLE 算法

MLE(Maximum Likelihood Estimation,最大似然估计)是一种在统计学中用于估计概率模型参数的重要方法。MLE 算法通过选择参数值,使得在这些参数下观测到的样本数据的概率达到最大,从而实现对模型参数的估计。

工作原理类似于似然函数,MLE 算法通过最大化似然函数来找到最优的参数估计值。由于直接最大化似然函数可能比较困难,因此通常的做法是最大化对数似然函数,因为对数函数是单调增加的,所以最大化对数似然函数相当于最大化似然函数


具体步骤如下

  • 确定一个适合数据的概率模型,例如对于线性回归问题可以选择正态分布模型等
  • 根据确定的概率模型,计算对数似然函数
  • 通过优化方法(如梯度下降、牛顿法等)来最大化对数似然函数

优点

  • MLE 是一种基于数据的方法,直接利用观测数据来估计模型参数,因此估计结果具有较高的准确性和可靠性
  • 在样本量足够大的情况下,MLE 可以渐近地达到最优的估计效果。
  • MLE 具有计算简单、易于实现等优点

缺点

  • MLE 对样本数据的分布假设较为敏感,如果样本数据不符合假设的分布形式,那么估计结果可能会受到较大影响
  • 在处理小样本数据时,MLE 可能效果不佳,因为小样本数据可能无法充分反映数据的真实分布特性
  • 在估计复杂模型参数时,MLE 可能面临计算上的困难

求解—MAP 算法

最大后验概率估计算法(Maximum A Posteriori Estimation,MAP)的公式基于贝叶斯定理,用于在给定观测数据的情况下,找到使参数的后验概率最大的参数值


算法公式可以表示为

θ^=arg maxθ P(θx)\hat\theta=\underset{\theta}{\argmax}\ P(\theta|x)

  • θ\theta 为待估计的参数
  • xx 是观测到的参数
  • P(θx)P(\theta|x) 为在给定数据 xx 的条件下,参数 θ\theta 的后验概率

根据贝叶斯公式,后验概率可以表示为

P(θx)=P(xθ)P(θ)P(x)P(\theta|x)=\frac{P(x|\theta)P(\theta)}{P(x)}

  • P(xθ)P(x|\theta) 为似然函数

为了简化计算,通常会对后验概率取对数

logP(θx)=logP(xθ)+logP(θ)logP(x)\log P(\theta|x)=\log P(x|\theta)+\log P(\theta)-\log P(x)

由于 logP(x)\log P(x) 为常数,可以忽略,所以 MAP 算法的优化问题变成了如下形式

θ^=arg maxθ(logP(xθ)+logP(θ))\hat\theta=\underset{\theta}{\argmax}(\log P(x|\theta)+\log P(\theta))


求解—EM 算法

EM 算法,全称为期望最大化算法(Expectation-Maximization Algorithm),是一种迭代优化算法,主要用于含有隐变量的概率模型参数的估计

隐变量:有些特征属性因为客观原因无法观测,样本数据不完整,这些特征属性即为隐变量

Q-函数:完全数据对数似然函数的期望,用于在 E 步中计算完全数据的对数似然函数在给定观测样本数据和当前参数估计下的期望值

设某未知类别的样本 X=(x1,x2,,xm)X=(x_1,x_2,…,x_m) ,对应的离散型随机隐变量 z=(z1,z2,...,zn)z=(z_1,z_2,...,z_n) ,称 (X,z)(X,z) 为完全数据,而它们的联合概率密度设为 P(xi,zj,θ)P(x_i,z_j,\theta) ,则有

P(xi,θ)=j=1nP(xi,zj,θ)P(x_i,\theta)=\sum_{j=1}^nP(x_i,z_j,\theta)

其中 θ\theta 为待估计的参数,则含隐变量 zz 的极大似然估计为

θ^,z=arg maxθ LL(θ,z)=arg maxθ,zilnjP(xi,zj,θ)\hat\theta,z=\underset{\theta}{\argmax}\ LL(\theta,z)=\underset{\theta,z}{\argmax}\sum_i\ln\sum_jP(x_i,z_j,\theta)

由于上述的 P(xi,zj,θ)P(x_i,z_j,\theta) 中含有隐变量,所以不便于直接求解。利用对数函数的凹性质,构造 mm 个新的随机变量,其分布为 Q1(z),,Qm(z)Q_1(z),…,Q_m(z) ,并且满足

0Qi(zj)1jQi(zj)=10\leq Q_i(z_j)\leq1\\\sum_jQ_i(z_j)=1

Jensen 不等式:对于一个凸函数,都有函数值的期望大于等于期望的函数值

由 Jensen 不等式可以得到

LL(θ,z)=ilnjQi(zj)P(xi,zj,θ)Qi(zj)ijQi(zj)lnP(xi,zj,θ)Qi(zj)LL(\theta,z)=\sum_i\ln\sum_jQ_i(z_j)\frac{P(x_i,z_j,\theta)}{Q_i(z_j)}\geq \sum_i\sum_jQ_i(z_j)\ln\frac{P(x_i,z_j,\theta)}{Q_i(z_j)}

等号成立的条件是,当且仅当对于每个 1in1≤i≤n 都存在常数 cic_i 使得

P(xi,zj,θ)Qi(zj)=ci\frac{P(x_i,z_j,\theta)}{Q_i(z_j)}=c_i

假设第 kk 次迭代时,估计的参数为 θ^(k)\hat\theta^{(k)} ,可以得到 LLLL 函数等号成立,则有

P(xi,zj,θ^(k))=ciQi(zj)P(xi,θ^(k))=j=1nP(xi,zj,θ^(k))=cijQi(zj)=ciP(x_i,z_j,\hat\theta^{(k)})=c_iQ_i(z_j)\\P(x_i,\hat\theta^{(k)})=\sum_{j=1}^nP(x_i,z_j,\hat\theta^{(k)})=c_i\sum_jQ_i(z_j)=c_i

利用条件概率公式可以得到

Qi(zj)=P(xi,zj,θ^(k))ci=P(xi,zj,θ^(k))P(xi,θ^(k))=P(zjxi,θ^(k))Q_i(z_j)=\frac{P(x_i,z_j,\hat\theta^{(k)})}{c_i}=\frac{P(x_i,z_j,\hat\theta^{(k)})}{P(x_i,\hat\theta^{(k)})}=P(z_j|x_i,\hat\theta^{(k)})

则似然函数 LLLL

LL(θ,z)=ijP(zjxi,θ^(k))lnP(xi,zj,θ)P(zjxi,θ^(k))LL(\theta,z)=\sum_i\sum_jP(z_j|x_i,\hat\theta^{(k)})\ln\frac{P(x_i,z_j,\theta)}{P(z_j|x_i,\hat\theta^{(k)})}

去掉常数项之后,优化目标函数为

θ^,z=arg maxθ ijP(zjxi,θ^(k))lnP(xi,zj,θ)\hat\theta,z=\underset{\theta}{\argmax}\ \sum_i\sum_jP(z_j|x_i,\hat\theta^{(k)})\ln P(x_i,z_j,\theta)

其中 P(zjxi,θ^(k))P(z_j|x_i,\hat\theta^{(k)}) 为观测样本条件下隐参数的分布, lnP(xi,zj,θ)\ln P(x_i,z_j,\theta) 为完全数据的对数似然

而构建的 QQ 函数是确定 θ(k)\theta^{(k)} 下的关于参数 θ\theta 的函数,而且具有数学期望的形式。令其最大化即求得最优参数 θ^\hat\theta

Q(θ,θ^(k))=ijP(zjxi,θ^(k))lnP(xi,zj,θ)Q(\theta,\hat\theta^{(k)})=\sum_i\sum_jP(z_j|x_i,\hat\theta^{(k)})\ln P(x_i,z_j,\theta)


设计 Q 函数的步骤

  1. 明确观测数据和隐变量
  2. 定义完全数据的对数似然函数
  3. 计算隐变量在当前参数 θ^(k)\hat\theta^{(k)} 的后验概率分布 P(zjxi,θ^(k))P(z_j|x_i,\hat\theta^{(k)})
  4. 使用隐变量后验概率分布,对完全数据的对数似然求期望,即得到 Q 函数

EM 方法通过迭代的方式,估计模型参数,主要是由两个步骤组成:E 步和 M 步

  • 设迭代初始值为 θ^(0)\hat\theta^{(0)} ,对于第 k 轮迭代,参数为 θ^(k)\hat\theta^{(k)}
    • E 步:构造 Q 函数,描述完全数据对数似然的期望

      Q(θ,θ^(k))=ijP(zjxi,θ^(k))lnP(xi,zj,θ)Q(\theta,\hat\theta^{(k)})=\sum_i\sum_jP(z_j|x_i,\hat\theta^{(k)})\ln P(x_i,z_j,\theta)

    • M 步:极大化 Q 函数求取最优参数 θ^\hat\theta ,并令其为 θ^(k+1)\hat\theta^{(k+1)}

  • θ^(k+1)θ^(k)ε\vert \hat\theta^{(k+1)}-\hat\theta^{(k)}\vert\leq\varepsilon 时停止

K 最邻近算法

KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN 通过测量不同特征值之间的距离来进行分类和预测目标值

KNN 算法是一种非常特别的机器学习算法,因为它没有一般意义上的学习过程,是一种惰性的机器学习算法。它的工作原理是利用训练数据对特征向量空间进行划分,并将划分结果作为最终算法模型。存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系


核心思想

KNN 的全称是 K Nearest Neighbors,意思是 K 个最近的邻居,当预测一个新样本的类别时,根据它距离最近的 K 个样本点是什么类别来判断该新样本属于哪个类别,通过判断距离最近的 K 个样本点中哪一种类别的点最多就会归为哪一类


回归问题

根据 K 个邻居的目标值,通过计算平均值或加权平均值来预测新实例的目标值


分类问题

根据 K 个邻居所属的类别,通过多数投票的方式决定新实例的类别


优点

  • 简单易用
  • 模型训练时间短
  • 预测效果好
  • 对异常值不敏感

缺点

  • 对内存要求高
  • 预测阶段可能会比较花费时间
  • 对不相关的功能和数据规模敏感

关键点

  • 距离度量:选择合适的距离度量对于模型的性能至关重要
  • K 值的选择:可以通过交叉验证等方法来确定
  • 数据预处理:特征缩放会影响 KNN 算法的性能
  • 计算复杂度:KNN 算法的计算复杂度较高,特别是当训练数据集很大时。可以使用近似算法

决策树分类

形态

  • 决策树可以是多叉树,也可以是二叉树
  • 决策树可以实现多分类
  • 决策树是一个非参数,非线性的分类器
  • 每次递归的划分属性不同,决策树的形态也不同

决策树的生成

决策树最上面的点为根节点,每个分支生成一个新的内部结点,也就是决策结点,最终的分类结果就是叶结点

决策树的生成一般采用自顶向下的贪心算法,通过递归来实现。会在每个结点选择当前状态下分类效果最好的属性进行分类,然后继续这个过程,直到整颗树能准确地分类训练样本,或者是所有的属性都被使用过了


利用决策树的决策

沿着决策树的根节点,根据层层决策结点的条件判断不断向下,直到到达叶节点,完成分类


最佳属性划分

  • ID3 决策树:在决策树各个结点上使用信息增益进行不纯性度量,递归地构建决策

    • 信息熵纯度可以表示为

      Ent(D)=i=1kpilog2piEnt(D)=-\sum_{i=1}^kp_i\log_2p_i

      • pip_i 是样本集 D 中第 ii 类样本的占比
      • kk 为样本集中的总类数
    • 特征 aa 对样本集 D 的信息增益(Information Gain):样本集 D 的信息熵与给定特征 aa 条件下 D 的条件熵之差

      Gain(D,a)=Ent(D)Ent(Da)=Ent(D)v=1VDvDEnt(Dv)Gain(D,a)=Ent(D)-Ent(D|a)=Ent(D)-\sum_{v=1}^V\frac{\vert D^v\vert}{\vert D\vert}Ent(D^v)

      • aaVV 个可能的离散属性 a1,a2,,aV{a_1,a_2,…,a_V} ,用这些属性对样本集 D 进行划分时,会产生 VV 个分支结点
      • DvD^v 表示第 vv 个分支结点中包含了 D 中所有特征 aa 上属性为 ava^v 的样本个数
    • 则划分依据如下

      a=arg maxa Gain(D,a)a^\star=\underset{a}{\argmax}\ Gain(D,a)

  • C4.5 决策树:信息增益准则对可取值数目较多(分支较多)的属性有所偏好,该方法可以减少这种偏好可能带来的不利影响

    • 使用增益率(Gain Ratio)来选择最优划分属性

      GainRatio(D,a)=Gain(D,a)IV(a)IV(a)=v=1VDvDlog2DvDGainRatio(D,a)=\frac{Gain(D,a)}{IV(a)}\\IV(a)=-\sum_{v=1}^V\frac{\vert D^v\vert}{\vert D\vert}\log_2\frac{\vert D^v\vert}{\vert D\vert}

      • IV(a)IV(a) 被称为特征 aa 的固有值。特征 aa 可取的值数目越多, IV(a)IV(a) 也越大,可以作为分母平衡一下信息增益
    • 划分依据如下

      a=arg maxa GainRatio(D,a)a^\star=\underset{a}{\argmax}\ GainRatio(D,a)

    • C4.5 不一定直接选择信息增益率最大的特征,而是在候选特征中找到信息增益高于平均水平的特征,然后在这些特征中选择信息增益率最高的那个

  • CART 决策树:一种应用广泛的决策树模型。既可以用于处理分类问题,也可以用于处理回归问题。内部结点特征的取值为 yesno ,左分支是取值为 yes 的分支,右分支是 no 分支。决策树相当于是一个二叉树,不断地递归二分每个特征,将样本空间划分为有限个单元,并且在这些单元上确定预测概率分布

    • 使用基尼系数(Gini index)度量数据纯度,样本集的基尼系数越小

      Gini(D)=i=1kijkpipj=1i=1kpi2Gini(D)=\sum_{i=1}^k\sum_{i\not=j}^kp_ip_j=1-\sum_{i=1}^kp_i^2

    • 采用属性 aa 划分的基尼系数为

      GiniIndex(D,a)=v=1VDvDGini(Dv)GiniIndex(D,a)=\sum_{v=1}^V\frac{\vert D^v\vert}{\vert D\vert}Gini(D^v)

    • 划分依据如下

      a=arg maxa GiniIndex(D,a)a^\star=\underset{a}{\argmax}\ GiniIndex(D,a)


决策树剪枝

递归生成的决策树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象,原因在于构建了过于复杂的决策树,所以要对决策树进行剪枝操作

  • 前剪枝:在树的生成过程中停止对某些结点的继续划分
    • 基于信息增益(或基尼系数)进行剪枝:次划分前先计算该划分能够带来的信息增益(或基尼系数),如果划分后的信息增益(或基尼系数)小于一个预先设定的阈值,则停止划分并将当前节点标记为叶子节点
    • 基于验证集进行剪枝:将原始数据集划分为训练集和验证集,构建决策树时,在每个节点上计算该划分在验证集上的性能指标(例如准确率),如果划分后的性能指标没有显著提升,则停止划分并将当前节点标记为叶子节点
    • 设置决策树深度:当决策树达到一定的深度时,停止生长
    • 设置样本数量阈值:当到达当前节点的样本数量小于某个阈值时,停止树的生长
    • 基于正确率进行剪枝:依据划分前后的分类正确率来剪枝。划分前后如果正确率有提升就保留这个划分,否则中止划分或者剪掉该分支
    • 基于结点纯度进行剪枝:当一个结点的纯度足够高时,就停止继续划分
  • 后剪枝:在树生成好后进行评估,对树进行回溯,把可能导致过拟合的分支去掉
    • 基于验证集进行剪枝:在决策树构建完成后,对每个节点进行考察,将其替换为叶子节点,并计算在验证集上的性能指标的变化(例如准确率),如果剪枝后的性能指标有所提升,则进行剪枝操作,否则保留当前节点
    • 基于不确定性度量之后进行剪枝:利用统计学中的结构判断与不确定性(如卡方检验)来判断是否实施剪枝操作
    • 基于误差率进行剪枝:如果一棵子树修剪前后错误率没有下降,就可以认为该子树是可以修剪的。通常需要使用新的数据集来进行验证,以降低训练数据的影响,提高预测的准确率
    • 基于正确率进行剪枝:依据划分前后的分类正确率来剪枝。划分前后如果正确率有提升就保留这个划分,否则中止划分或者剪掉该分支
  • 决策树生成过程中,每一步都是局部最优解,所以只需要对全局进行优化剪枝即可

剪枝的方法

  • 依据正确率剪枝:

  • 设计代价函数评估:定义叶节点的经验熵 EntEnt 和代价函数 CaC_a 。叶结点的经验熵越小说明越纯,分类正确率越高

    • T\vert T\vert 为树 T 的叶节点个数
    • NtN_t 为第 tt 号叶节点样本数量
    • NtkN_{tk} 为第 tt 号叶节点样本中属于第 kk 类的样本数量
    • α\alpha 为超参数
    • αT\alpha\vert T\vert 对叶节点数量定义规则,是一种决策树的正则化,也就是用来控制模型复杂度,防止叶节点过多

    Ent(t)=k=1KNtklog2NtkNtCa(T)=t=1TNtEnt(t)+αT=t=1Tk=1KNtklog2NtkNt+αTEnt(t)=-\sum_{k=1}^KN_{tk}\log_2\frac{N_{tk}}{N_t}\\C_a(T)=\sum_{t=1}^{\vert T\vert}N_tEnt(t)+\alpha\vert T\vert=-\sum_{t=1}^{\vert T\vert}\sum_{k=1}^KN_{tk}\log_2\frac{N_{tk}}{N_t}+\alpha\vert T\vert


决策树常见超参数

  • 在所有特征中寻找最好的切分点还是仅在部分特征中寻找
  • 树的最大深度
  • 最小划分样本阈值:如果决策节点的样本数少于该阈值,就不再继续划分
  • 最小叶节点样本阈值:如果叶节点样本数少于这个阈值,就会被剪枝
  • 最大叶节点数:防止过拟合
  • 最小不纯度:如果某个结点的不纯度小于这个阈值就不再划分

集成学习

集成学习是一种机器学习的级数,通过组合多个模型来提高整体的预测或分类性能

集成学习通过组合多个弱学习器而形成一个强学习器。通过组合多个不同的模型,可以克服每个单独模型的缺点,提高预测的准确性和稳定性。并且集成学习还可以有效减少过拟合问题,减少因为训练数据的随机性导致的误差


  • 基学习器:集成学习中的个体学习器
    • 同质集成:集成中只包含同种类型的个体学习器
    • 异质集成:集成中包含多种类型的个体学习器
  • 多专家组合:多专家组合方法让基学习器并行工作
    • 全局方法:给定一个样本输入,所有的基学习器都产生一个输出,并且这些输出都要使用,通过平均,投票或者堆叠来得到最终结果
    • 局部方法:给定一个样本输入,所有的基学习器都产生一个输出,选择一个或者多个学习器来产生输出结果
  • 多级组合:基学习器按照复杂程度递增排序,构成一个串行的组合,其中后一个基学习器在前一个基学习器预测不够准确的样本上进行训练,或者对前一个学习器的预测残差和梯度进行调整

Bagging

是一类并行式的集成学习算法,旨在通过组合多个弱学习器来提高整体模型的预测性能和鲁棒性,其核心思想是通过结合多个独立训练的模型来降低预测方差,提高模型的稳定性


样本采样

给定包含 mm 个样本的数据集 DD ,每次有放回的随机从中挑选一个样本,将其放入副本 DD' 中,重复执行 mm 次就可以得到包含 mm 个样本的数据集

mm 次采样中,某样本始终不被选中的概率极限为 limm(11m)m1e=0.368\underset{m\rightarrow\infty}{\lim}(1-\frac{1}{m})^m\rightarrow \frac{1}{e}=0.368 ,每次采用结束之后,大概有 36.8%36.8\% 的样本不会被采样,而这些样本来对模型的泛化性能做包外估计

对于含有 NN 个基学习器的集成学习器来说,上述步骤重复执行 NN 次之后可以得到 NN 个数据集,将这些采样的数据分给这些基学习器分别学习


平均法

对于回归任务,每个基学习器的输出都是数值类型的,平均法策略就是对基学习器的输出取均值

  • 简单平均法

    G(x)=1Ni=1Ngi(x)G(x)=\frac{1}{N}\sum_{i=1}^N g_i(x)

  • 加权平均法

    G(x)=i=1Nwigi(x)wi0i=1Nwi=1G(x)=\sum_{i=1}^N w_ig_i(x)\\w_i\geq0\\\sum_{i=1}^N w_i=1


投票法

对于分类任务,最终结果最常见的集成策略就是对所有的基学习器进行投票。投票法集成希望所有的分类器都是完全独立的


假设创建了一个 NN 个基分类器的集成学习器,每个分类器都只有 PP 的正确率,如果以简单的多数投票的方式来集成预测结果的话,正确率为

i=1NCNiPi(1P)Nk\sum_{i=1}^NC_{N}^iP^i(1-P)^{N-k}

而对于具有 1000 个具有 51%51\% 正确率的基学习器的集成学习器来说,正确率高达 75%75\%

每一个基学习器都输出一个向量 [gi1(x),...,gik(x)]\begin{bmatrix}g_i^1(x),...,g_i^k(x)\end{bmatrix} ,其中 gij(x)g_i^j(x) 表示第 ii 个学习器将结果分类为 jj 的概率


  • 绝对多数投票:若预测结果为某个类别的基学习器的数量超过半数,就标记为该类别

  • 相对多数投票:预测为票最多的类别,如果有同票的就随机选一个

  • 加权投票

    G(x)=carg maxji=1Nwigij(x)G(x)=c_{\underset{j}{\argmax}\sum_{i=1}^Nw_ig_i^j(x)}


EasyEnsemble

通过采样多数类样本(或者对少数类进行重复抽样),构建多个平衡的数据集。然后在每个数据集上训练一个弱分类器,最后将这些弱分类器集成起来,形成一个更加准确的分类器。这种方法能够有效处理类别不平衡的问题,提高分类的准确性


随机森林

以决策树方法构建基学习器的 Bagging 称为随机森林,是一种经典的机器学习算法


  • 在随机自助采样得到的 mm 个样本中训练决策树
  • 在每个结点对应的 dd 个特征属性中随机选择 kk 个特征进行最优划分,实际上就是选出 kk 个特征之后,再从中选出最优的划分属性来进行划分
  • 利用 Bagging 集成结果

传统的决策树在选择划分属性时是在当前结点的 dd 个特征属性中选择一个,而在这里使用随机属性选择

对于决策树的每个结点,从该结点对应的 dd 个特征属性中随机选择 kk 个特征进行最优划分,这里的参数 kk 实际上就是随机性的引入程度。若 k=dk=d ,则与传统的决策树相同,若零 k=1k=1 ,则是随机选择一个属性进行划分。一般来说会选择 k=log2d+1k=\log_2d+1

这种特征扰动和样本扰动共同作用,使得基学习器之间差异性增加


优点

  • 简单,易实现
  • 计算开销小
  • 通常不需要剪枝
  • 相比于单个决策树,鲁棒性更强

缺点

  • 树越多,随机森林分类器越好,但是计算成本也越大

Boosting

Boosting 是一类串行式集成学习的方法,它的基学习器之间存在强依赖关系,要求基学习器能对特定的数据分布进行学习

它的基学习器之间存在强依赖关系,要求基学习器能对特定的数据分布进行学习,常见的方法有自适应提升法(AdaBoost),梯度提升法(Gradient Boosting)等


AdaBoost

先从初始训练集训练出一个基学习器,再根据学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续获得更多关注,并训练下一个基学习器,每个学习器都根据训练的结果来计算该学习器的权重,直到基学习器的数目达到预先指定值T,最终将在T个基学习器进行加权求和

  1. 初始化训练数据的权值分布 wi1=1mw^1_{i}=\frac{1}{m}
  2. 训练基学习器
    1. 使用具有权值分布 wikw^k_{i} 的训练数据集学习,得到基分类器 gk(x):X{1,+1}g_k(x):X\rightarrow \{-1,+1\}
    2. 计算分类错误率 ek=wikI(gk(xi)yi)e_k=\sum w^k_iI(g_k(x_i)\not=y_i)
    3. 计算学习器的权重 αk=12ln1ekek\alpha_k=\frac{1}{2}\ln\frac{1-e_k}{e_k}
    4. 更新权重 wik+1=wikZkexp(αkyigk(xi))w_i^{k+1}=\frac{w^k_i}{Z_k}\exp{(-\alpha_ky_ig_k(x_i))} ,可知当分类正确时 yigk(xi)y_ig_k(x_i) 为 1,否则为 -1。其中 Zk=wikexp(αkyigk(xi))Z_k=\sum w^k_i\exp{(-\alpha_ky_ig_k(x_i))} 用于规范化权值
  3. 得到最终分类器:将基学习器进行线性组合 G(x)=sign(αkgk(x))G(x)=sign(\sum \alpha_kg_k(x))

梯度提升树

以决策树为基学习器的方式来构建 Boosting 集成学习器的方式称之为提升树。例如以 CART 为基学习器构建用于分类或者回归问题的梯度提升树

  1. 初始化 g0(x)=0g_0(x)=0
  2. 训练基学习器
    1. 计算标记值与上一轮预测值的残差 rik=yigk1(xi)r_i^k=y_i-g_{k-1}(x_i)
    2. 拟合残差 rikr_i^k 训练一个回归树,得到 Tk(x,Θk)T_k(x,\Theta_k)
    3. 更新学习器 gk(x)=gk1(x)+Tk(x,Θk)g_k(x)=g_{k-1}(x)+T_k(x,\Theta_k)
  3. 最终得到回归提升树 G(x)=Tk(x,Θk)G(x)=\sum T_k(x,\Theta_k)
  4. 当损失函数定义为平方误差时,损失函数关于模型预测值的导数就是残差。定义残差的方向与代价函数的负梯度方向一致,此时通过拟合残差,新构建的学习器能够沿着梯度下降的方向来优化模型。即 rik=L(yi,gk1(xi))gk1(xi)=yigk1(xi)r_i^k=-\frac{\partial L(y_i,g_{k-1}(x_i))}{\partial g_{k-1}(x_i)}=y_i-g_{k-1}(x_i)

Gradient Boosting

对于更加一般性的提升树,不是直接拟合残差,而是拟合损失函数关于模型预测值的负梯度,这个负梯度又称为伪残差。使用代价函数的梯度信息来指导后续决策树的构建,以逐步优化模型降低全局损失,这种提升树被称为梯度提升树(Gradient Boosting Decision Tree, GBDT)

而梯度提升树不直接拟合残差而是拟合负梯度的原因如下

  • 负梯度方向是代价函数下降最快的方向,可以提高优化效率
  • 直接使用残差计算可能导致数值不稳定,拟合梯度更稳定

Stacking

Stacking 将多个不同模型的预测结果作为输入,训练一个元学习器来生成最终的预测结果。允许使用不同类型的基础模型进行组合,提高了模型的多样性


结构

  • 基学习器:是 Stacking 算法过程中的第一层模型,在原始数据中训练,生成一个新的数据集,用于元学习器的训练
  • 元学习器:被称为次级学习器或者第二层学习器,用于学习如何最佳地结合基学习器的预测结果

学习流程

  • 利用原始数据训练基学习器
  • 每个基学习器在训练集上做出预测,并将这些预测结果作为新的特征,用于训练元学习器
  • 元学习器在这些新创建的特征集上进行训练,学习如何有效地结合基学习器的预测

注意事项

  • 模型选择
    • 第一层模型最好选择强模型,第二层可以是一个简单的分类器,防止过拟合
    • 第一层基模型的个数不能太少,模型过多会导致过拟合
  • 模型性能:第一层的基模型必须性能好并且彼此之间存在差异性
  • 交叉验证:为了防止过拟合,Stacking 算法通常会利用 K 折交叉

模型评估,选择与优化

模型评估

定义

模型评估的主要目标是使用适当的性能指标来衡量模型的表现,以确定模型是否可用,并了解模型在新数据上的预测能力、泛化能力、稳定性等。通过评估,还可以识别模型的过拟合和欠拟合问题,进而调整模型的超参数以优化性能


损失函数

对于一批训练数据来说,如果没有单独的测试集,一般会把数据分为两个部分,就是训练部分和验证部分。其中训练部分一般是数据的 70%,而剩下的就是验证部分数据

一般来说数据的训练会用到损失函数如下

Russion:J(w,b)=i=0ntrain(f(xi)yi)22ntrain+λj=0m(wj2)2ntrainSort:J(w,b)=i=0ntrain[yilog(f(xi))+(1yilog(1f(xi))]ntrain+λj=0m(wj2)2ntrainRussion:J(w,b)=\frac{\sum_{i=0}^{n_{train}}(f(x_i)-y_i)^2}{2n_{train}}+\frac{\lambda\sum_{j=0}^m(w_j^2)}{2n_{train}}\\Sort:J(w,b)=-\frac{\sum_{i=0}^{n_{train}}[y_i\log(f(x_i))+(1-y_i\log(1-f(x_i))]}{n_{train}}+\frac{\lambda\sum_{j=0}^m(w_j^2)}{2n_{train}}

其中第二项是系数的二范数,为了防止数据的过拟合。而 λ\lambda 是该项的系数,为了限制系数的大小, λ\lambda 越大越不容易过拟合,但是会导致模型趋近于一条直线, λ\lambda 太小导致二范数项没有效果

模型测试时的损失函数如下

Russion:J(w,b)=i=0ntest(f(xi)yi)22ntestSort:J(w,b)=i=0ntrain[yilog(f(xi))+(1yilog(1f(xi))]ntrainRussion:J(w,b)=\frac{\sum_{i=0}^{n_{test}}(f(x_i)-y_i)^2}{2n_{test}}\\Sort:J(w,b)=-\frac{\sum_{i=0}^{n_{train}}[y_i\log(f(x_i))+(1-y_i\log(1-f(x_i))]}{n_{train}}

会通过计算模型在测试集中的损失和精确度来评估整个模型


评估指标

  • 分类模型
    • 准确率:正确分类的样本占所有样本数的比例,但是存在局限性

    • 精确率:在模型预测为正类的样本实际为正类的比例

    • 召回率:在所有真正的正类中,被模型预测为正类的比例

    • F1 分数:精确率和召回率的调和值,用于评估模型的稳健性,用于多分类问题和目标检测等。F1 分数位于 0 到 1 之间

      • F1 越接近 1 表示模型的性能越好,即模型在精确率和召回率上都表现得很好
      • F1 越接近 0 表示模型的性能越差

      F1=2×precision×recallprecision+recallF1=\frac{2\times precision\times recall}{precision+recall}

    • AUC(Area Under Curve):ROC 曲线下的面积,主要用于评估样本不均衡的情况。ROC 曲线以假正例率(FPR)为横轴,真正例率(TPR)为纵轴绘制

      • 假正例率:被错误分类为正样本的负样本占所有实际负样本的比例
      • 真正例率:被正确分类为正样本的正样本占所有实际正样本的比例
      • 取值范围为 0.5 到 1,AUC 值越接近 1,表示模型性能越好,即模型能更好的区分正负样本
    • 混淆矩阵:一个二维矩阵,用于战士模型预测结果与实际标签之间的关系。通过混淆矩阵,可以计算出准确率,精确率和召回率等指标,并且诊断模型问题。混淆矩阵一般包括以下四个元素

      • 真正例(True Positives, TP):模型正确地将正类预测为正类的数量
      • 假正例(False Positives, FP):模型错误地将负类预测为正类的数量
      • 假负例(False Negatives, FN):模型错误地将正类预测为负类的数量
      • 真负例(True Negatives, TN):模型正确地将负类预测为负类的数量
  • 回归模型
    • 均方误差:预测值与真实值之差的平方的平均值

    • 均方根误差:均方误差的平方根,可以很好的反应回归模型预测值与真实值之间的偏离程度

    • 平均绝对值误差:预测值与真实值之间的插值的绝对值的平均值,能更好的反应预测值误差的实际情况

    • R 平方值:决定系数,用于量化模型对数据的拟合程度。R 平方值余越接近 1,表示模型拟合效果越好

      • RSS:残差平方和,模型预测值与实际值之差的平方和 (yiy^i)\sum(y_i-\hat{y}_i)
      • TSS:方差,模型真实值与其平均值之差的平方和 (yiyˉ)\sum(y_i-\bar{y})

      R2=1RSSTSSR^2=1-\frac{RSS}{TSS}


评估结果

  • 过拟合与欠拟合
    • 过拟合:模型在训练集上表现很好,但是在测试集上表现得较差,可能是因为模型学习受到了训练数据中的噪声或者特定特征的影响
    • 欠拟合:模型在训练集和测试集上都表现不佳,可能是因为模型过于简单,无法捕捉数据中的复杂模式
  • 模型选择
    • 根据评估指标和结果,选择性能最佳的模型进行部署
    • 如果模型存在过拟合或欠拟合问题,可以通过调整模型结构、增加训练数据、使用正则化方法等手段进行改进

交叉验证

定义

在交叉验证过程中,通常会将数据集分割为训练集和测试集。通过在训练集上训练模型,再在测试集上进行预测,然后计算预测值与实际值之间的误差并求平均,从而得到模型的性能指标

这种方法能够更全面地评估模型的性能,避免在单一数据集上出现过拟合或欠拟合的情况


分类

  • 留一交叉验证:这种方法适用于数据集比较小的情况。将数据集中的每一个样本分别作为数据集,其他样本作为训练集, 然后在训练集上进行训练,并且在测试集上进行测试。这个过程重复运行直到所有的数据都被用作过测试集。最后计算所有测试集的平均误差作为模型的性能指标
  • K 折交叉验证:适用于数据集比较大的情况。首先将数据集分为 k 个大小相似的互斥子集,然后每次选取其中的一个子集作为测试集,其余的子集作为训练集,在训练集上训练并且在测试集上测试,直到所有的子集都被用作过测试集。最后计算所有测试集的误差作为模型的性能指标

公式

CV=(yiy^i)2nCV=\frac{\sum(y_i-\hat{y}_i)^2}{n}


模型选择

假设对于多个模型

f1(x)=w1x+bf2(x)=w1x+w2x2+b...f10(x)=w1x+w2x2+...+w10x10+bf_1(x)=w_1x+b\\f_2(x)=w_1x+w_2x^2+b\\...\\f_{10}(x)=w_1x+w_2x^2+...+w_{10}x^{10}+b

对应的它们的损失函数分别为 J1,,J10J_1,…,J_{10} ,为了从中选择合适的模型,我们要对数据和模型进行交叉验证

将一组数据分为三个不同的子集,分别是训练集(60%),交叉验证集(20%)和测试集(20%),它们的数据分别用下标 train,cv,testtrain,cv,test 来表示

交叉验证损失函数公式

Jcv=i=0ncv(f(xi)yi)22ntestJ_{cv}=\frac{\sum_{i=0}^{n_{cv}}(f(x_i)-y_i)^2}{2n_{test}}

最终得到的交叉验证损失函数的值最小,就选用对应的模型


诊断偏差和方差

1735145354308.png

在模型的拟合过程中,会出现三种情况:欠拟合,恰好,过拟合(如上图所示的三个点位)

  • 欠拟合:模型在训练数据,测试集和交叉验证集中都表现不佳
  • 过拟合:模型在训练集中表现很好,但是在测试集和交叉验证集中表现不佳

一般模型的欠拟合的模型通常表现为高偏差,而模型的过拟合的模型表现为高方差

  • 偏差:模型预测值与真实值之间的差异,衡量了模型对训练数据的拟合程度,反映了模型在预测时是否偏离了真实数据集
    • 高偏差
      • 模型过于简单,无法捕捉到数据的复杂特征,导致模型不准确
      • 通常被称之为欠拟合
    • 低偏差
      • 模型能很好的拟合训练数据,捕捉到数据的复杂特征
      • 但是如果模型过于复杂会导致模型在测试数据上性能下降,也就是过拟合
  • 方差:模型在不同训练集上预测结果的离散程度,即模型的稳定性,反映了模型对训练数据的敏感度
    • 高方差:
      • 模型对数据训练非常敏感,不同的训练集会导致模型的预测结果差异较大
      • 在训练数据上模型的性能很好,但是在测试数据上可能较差,主要是由于模型可能捕捉到了训练数据中的噪声。通常出现的这种情况就是过拟合
    • 低方差
      • 模型在不同的训练集上的预测结果相对稳定,差异较小,表示模型对训练数据不太敏感,泛化性较好
      • 如果模型太简单,可能会导致欠拟合

学习曲线

高偏差

对于过于简单的模型来说,模型过于简单而不能很好的拟合训练集,随着数据量的不断增大,训练的损失函数也会不断增大,但最后会逐渐趋近于平稳,但是无论是训练集还是交叉验证集,它们的损失函数都远远大于训练标准,也就是欠拟合

这时候单纯的增加数据集的数量是没用的,只能通过修改模型增加模型复杂度来提高模型性能

1735142813289.png


高方差

对于高方差的模型,数据集数量少时,模型训练出的效果会有过拟合行为,也就是模型训练集的损失要小于训练的标准值,而交叉验证集的损失却大于训练的标准值,这说明模型过拟合了

这时候就需要增大训练集的数量来提高模型的性能

1735142842645.png

所以可以经常看模型的训练损失和交叉验证损失,以次来判断模型是处于高偏差还是高方差的状态,从而提高模型的性能


方法

对于一个模型来说,它的训练损失函数如下

J(w,b)=i=0ntrain(f(xi)yi)22ntrain+λj=0m(wj2)2ntrainJ(w,b)=\frac{\sum_{i=0}^{n_{train}}(f(x_i)-y_i)^2}{2n_{train}}+\frac{\lambda\sum_{j=0}^m(w_j^2)}{2n_{train}}

对于它的提升有如下几种方式

  • 降低偏差
    • 使用更多额外的特征,例如预测房子价格时需要考虑到房子的大小以外,可能还需要考虑房子的房间数量等特征,添加这些额外的特征可以降低模型偏差
    • 添加额外多项式特征,也就是将模型复杂化,例如 [xx2][xx2x3x4]\begin{bmatrix}x&x^2\end{bmatrix}\rightarrow\begin{bmatrix}x&x^2&x^3&x^4\end{bmatrix}
    • 减小 λ\lambda
  • 降低方差
    • 使用更多的数据集
    • 减少模型特征,例如 [xx2x3x4][xx2]\begin{bmatrix}x&x^2&x^3&x^4\end{bmatrix}\rightarrow\begin{bmatrix}x&x^2\end{bmatrix}
    • 增大 λ\lambda
    • 早停法,通过监控模型在验证集上的性能,当性能不再提升时及时停止训练

一般的检测和优化流程如下

1
2
3
4
5
6
graph LR
F[训练]-->A
A[在训练集上表现]--yes-->B[在交叉验证集上表现]--yes-->C[结束]
A--no-->D[更大的神经网络]-->F
B--no-->E[更多数据]-->F

通常来说,更大的神经网络(模型复杂,层数更多)的训练效果要比小的神经网络要好,模型的性能也会更好,但是需要保证足够的训练数据和代价函数中正则化项的选择,从而防止过拟合行为。但是更加复杂的神经网络训练所需要花费的时间会更长


数据增强

目的

  • 提高模型泛化能力:通过增加数据的多样性,数据增强有助于模型学习得到更加广泛的特征,从而提高在数据上的表现
  • 减少过拟合:通过数据增强来增加数据集的大小,有助于减少模型在训练数据上的过拟合
  • 减少收集真实数据:可以通过使用真实数据与其他噪声混合来创造更多的数据,减少对真实数据的依赖
  • 处理类别不平衡:可以为样本数量少的类别生成更多样本,帮助处理类别不平衡问题

方法

  • 图像数据增强
    • 旋转
    • 反转
    • 缩放
    • 裁剪
    • 颜色变换
    • 噪声注入:图像数据添加随机噪声
    • 随机遮挡或抹去
  • 文本数据增强
    • 同义词替换
    • 随机插入:在句子中随机插入一些相关的词
    • 随机删除:随机删除某些词
    • 词序扰动:随机调换句子中词的顺序
    • 数据融合:语句进行拼接交换等
    • 回译:翻译为另一种语言再翻译回来
  • 音频数据增强
    • 声音变换
    • 背景噪声融合
    • 时域和频域扰动

注意

  • 避免过度增强数据:过度使用数据增强可能导致模型学习到与真实数据分布不一致的特征,从而损害模型的性能
  • 保持数据质量:生成的增强数据应尽可能保持与原始数据相似的质量和特征分布
  • 合理选择增强方法

倾斜数据集的误差指标

倾斜数据集就是数据集的正例和反例的数量相差很大,导致准确率无法准确梵音算法的性能,需要其他误差指标来评估算法再倾斜数据集上的表现

  • 精确率:预测为正例的实例中,真正为正例的比例。高精确率表示被判断为正例的例子很有可能是正例

  • 召回率:再所有真正为正例的实例中,被正确预测为正例的样本的比例。高召回率表示正例很有可能被系提供识别为正例

  • F1 分数:精确率和召回率的调和值,用于评估模型的稳健性,用于多分类问题和目标检测等。F1 分数位于 0 到 1 之间

    • F1 越接近 1 表示模型的性能越好,即模型在精确率和召回率上都表现得很好
    • F1 越接近 0 表示模型的性能越差

    F1=2×precision×recallprecision+recallF1=\frac{2\times precision\times recall}{precision+recall}

  • AUC(Area Under Curve):ROC 曲线下的面积,主要用于评估样本不均衡的情况。ROC 曲线以假正例率(FPR)为横轴,真正例率(TPR)为纵轴绘制

    • 假正例率:被错误分类为正样本的负样本占所有实际负样本的比例
    • 真正例率:被正确分类为正样本的正样本占所有实际正样本的比例
    • 取值范围为 0.5 到 1,AUC 值越接近 1,表示模型性能越好,即模型能更好的区分正负样本
  • 混淆矩阵:一个二维矩阵,用于战士模型预测结果与实际标签之间的关系。通过混淆矩阵,可以计算出准确率,精确率和召回率等指标,并且诊断模型问题。混淆矩阵一般包括以下四个元素

    • 真正例(True Positives, TP):模型正确地将正类预测为正类的数量
    • 假正例(False Positives, FP):模型错误地将负类预测为正类的数量
    • 假负例(False Negatives, FN):模型错误地将正类预测为负类的数量
    • 真负例(True Negatives, TN):模型正确地将负类预测为负类的数量

过拟合

是机器学习和统计建模中常见的问题,指的是模型在训练数据上表现很好,但在未见过的测试数据上表现较差的现象。过拟合的本质是模型过度学习了训练数据中的噪声和细节,导致其泛化能力下降


表现

  • 训练误差与测试误差差距过大
    • 训练误差很低
    • 测试误差显著高于训练误差
  • 模型复杂度过高,过于复杂
  • 对数据过度拟合,捕捉到了数据中的噪声
  • 泛化能力差,模型在新数据上的预测性能显著下降

原因

  • 模型复杂度过高,模型参数过多,能够拟合训练数据中的噪声
  • 训练数据不足,模型无法学习到数据的真实分布
  • 特征数量过多,尤其是无关特征或冗余特征
  • 训练时间过长,在迭代训练中,模型过度拟合训练数据

检测方式

  • 将数据集划分为训练集和测试集,评估模型在测试集上的表现,如果测试误差显著高于训练误差,可能存在过拟合
  • 使用 K 折交叉验证评估模型的泛化能力,如果模型在不同折上的表现差异较大,可能存在过拟合
  • 绘制学习曲线,如果训练误差很低而测试误差很高,可能存在过拟合
  • 绘制验证曲线,如果测试误差随复杂度增加而上升,可能存在过拟合

解决

  • 增加数据量,帮助模型学习到数据的真实分布,可以使用数据增强
  • 减少模型参数数量,限制模型的学习能力
  • 在损失函数中加入正则化项,限制模型参数的大小
  • 在训练过程中监控验证误差,当验证误差不再下降时停止训练
  • 选择重要特征,去除无关或冗余特征
  • 使用集成学习方法降低模型的方差
  • 在训练过程中随机丢弃部分神经元,防止模型过度依赖某些特征

欠拟合

欠拟合(Underfitting)是机器学习和统计建模中的另一个常见问题,指的是模型在训练数据和测试数据上表现都不佳的现象。欠拟合的本质是模型过于简单,无法捕捉数据中的潜在规律,导致其预测能力不足


表现

  • 训练误差与测试误差都较高
  • 模型参数过少,过于简单
  • 模型无法捕捉数据中的主要趋势或模式
  • 模型在新数据上的预测性能较差
  • 训练误差和测试误差都较高,且随着模型复杂度增加,误差逐渐下降

原因

  • 模型参数过少,无法捕捉数据中的复杂关系
  • 特征数量过少,无法充分描述数据
  • 模型未充分训练,未能学习到数据的规律
  • 正则化参数过大,限制了模型的学习能力

检测

  • 将数据集划分为训练集和测试集,评估模型在测试集上的表现,如果训练误差和测试误差都较高,可能存在欠拟合
  • 使用 K 折交叉验证评估模型的泛化能力,如果模型在不同折上的表现都较差,可能存在欠拟合
  • 绘制学习曲线,如果训练误差和测试误差都较高且差距较小,可能存在欠拟合
  • 绘制验证曲线,如果训练误差和测试误差都较高且随复杂度增加而下降,可能存在欠拟合

解决

  • 使用更复杂的模型,增加模型参数数量
  • 添加更多特征,帮助模型捕捉数据中的规律
  • 降低正则化参数,减少对模型的限制
  • 延长训练时间,让模型充分学习数据
  • 使用集成学习方法提升模型性能