ML0-算法基础

1.1 模型策略算法

  • 模型:在假设空间中,分类模型一般有无穷多个。

    • 生成式模型:通过数据学习联合概率分布 p ( x , y ) p(x,y) p(x,y),然后根据贝叶斯公式求出条件概率 p ( y ∣ x ) = p ( x , y ) / p ( x ) p(y|x) = p(x,y) / p(x) p(yx)=p(x,y)/p(x)作为预测模型。
      • 常见模型:朴素贝叶斯(Naive Bayes)、隐马尔可夫模型(HMM)、高斯混合模型(GMM)和 文档主题模型(LDA)等。
    • 判别式模型:通过数据学习决策函数 y = f ( x ) y=f(x) y=f(x)或者条件概率p(y|x)作为预测模型。
      • 常见模型:K近邻(KNN)、线性判别分析(LDA)、线性回归(Linear Regression)、逻辑回归(Logistic Regression)、感知机(PLA)、决策树(Decision Tree)、最大熵模型(MaxEnt)、支持向量机(SVM)、集成算法(Bagging、Boosting、Stacking)、神经网络(Neural Networks)和条件随机场(CRF)等。
    • 生成 VS 判别
    方面生成式模型判别式模型
    数据假设需满足一些假设
    “条件独立性假设”、“混合高斯分布”
    数据生成不能
    建模对象联合概率,学习数据分布条件概率,学习最优边界
    增量训练不能
    收敛速度快,更容易拟合数据慢,迭代求解凸优化问题
    泛化误差较高较低
  • 策略:按照什么样的规则选择最优模型。

    • 损失函数:评估单样本预测的好坏
      • 0 - 1损失函数(感知机): L ( Y , f ( X ) ) = { 1 , Y ≠ f ( x ) 0 , Y = f ( x ) L(Y,f(X)) = \left\{\begin{aligned} 1,&& Y \neq f(x) \\ 0,&& Y = f(x) \\ \end{aligned}\right. L(Y,f(X))={1,0,Y=f(x)Y=f(x)
      • 平方损失函数(回归): L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y,f(X)) =(Y-f(X))^2 L(Y,f(X))=(Yf(X))2
      • 绝对值损失函数(回归): L ( Y , f ( X ) ) = ∣ Y − f ( x ) ∣ L(Y,f(X)) = |Y-f(x)| L(Y,f(X))=Yf(x)
      • 指数损失函数(AdaBoost): L ( Y , f ( X ) ) = e x p [ − y f ( x ) ] L(Y,f(X)) =exp[-yf(x)] L(Y,f(X))=exp[yf(x)]
      • 对数损失函数(逻辑回归): L ( Y , P ( Y ∣ X ) ) = − l o g P ( Y ∣ X ) L(Y, P(Y|X))=-logP(Y|X) L(Y,P(YX))=logP(YX)
      • 合页损失函数(SVM): L ( w , b ) = m a x ( 0 , 1 − y f ( x ) ) L(w,b)=max(0,1−yf(x)) L(w,b)=max(0,1yf(x))
      • 交叉熵损失函数(神经网络): l o s s = − 1 n ∑ x [ y l n f ( x ) + ( 1 − y ) l n ( 1 − f ( x ) ) ] loss = -\frac{1}{n} \underset{x}{\sum} [ylnf(x)+(1-y)ln(1-f(x))] loss=n1x[ylnf(x)+(1y)ln(1f(x))]
    • 风险函数:评估整体预测的好坏
      • 期望风险:模型关于联合概率分布 p ( x , y ) p(x,y) p(x,y)的期望损失。联合概率分布未知的且无法学习到;
      • 经验风险:模型关于训练集的平均损失 R e x p = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) R_{exp} =\frac{1}{N} \overset{N}{\underset{i=1}{\sum}}L(y_i,f(x_i)) Rexp=N1i=1NL(yi,f(xi))。根据大数定律,当样本量 N N N趋于无穷时,经验风险趋于期望风险,但现实中训练样本有限,可能出现过拟合现象;
      • 结构风险:为防止过拟合提出的策略。 等价于经验风险 + 正则化项(模型复杂度)。
    • 目标函数:通常指结构风险最小化函数。
  • 算法:求解最优化问题的方法。

1.2 正则化

  • 定义:模型参数向量的范数。
  • 范数
    import numpy as np
    x_norm=np.linalg.norm(x, ord=None, axis=None, keepdims=False)
    	-x: 矩阵 or 向量
    	-ord: 范数0/1/2/np.inf
    	-axis: 0求多个列向量的范数;1求多个行向量的范数;None 求矩阵的范数。
    	-keepdims: 保持矩阵的二维特性
    
    • 向量
      • L0范数:非0元素的个数
      • L1范数:元素绝对值之和
      • L2范数:元素平方和的开方
    • 矩阵
      • L0范数:非0元素的个数
      • L1范数:列元素绝对值之和的最大值
      • L2范数 X T X X^TX XTX的最大特征值的算术平方根

1.3 误差

  • 训练误差:模型在训练集上的平均损失;
  • 测试误差:模型在测试集上的平均损失;
  • 泛化误差:模型对未知数据的预测能力,常用测试误差来预计。

1.4 过拟合与欠拟合

  • 欠拟合
    • 表现:训练误差大,测试误差大
    • 原因:特征少,模型复杂度较低
    • 解决:
      • 添加新特征。比如:组合特征;
      • 添加多项式特征。比如:二次项或者三次项特征;
      • 减少正则化参数;
      • 使用非线性模型。
  • 过拟合
    • 表现:训练误差小,测试误差大。
    • 原因:参数太多,迭代次数太多,模型复杂度较高
    • 解决:
      • 增大数据集。估计参数分布并生成新样本、数据增强(图像的旋转,平移或缩放);
      • 添加正则化项。 L 1 L1 L1正则、 L 2 L2 L2正则等;
      • 采用dropout方法。模型训练时随机让某些隐含层节点不参与权重计算;
      • Early stopping。提前停止迭代。

1.5 模型评估方法

  • 留出法
    • 场景:样本充足时,数据集 D D D划分训练集 S S S,测试集 T T T
    • 要求
      • 数据分布一致,比如:采用分层采样保证类别比例相似;
      • 单次评估结果不稳定,重复评估取均值;
      • 训练集 S S S太大,评估结果方差大;测试集 T T T太大,评估结果偏差大。因此,大约 2 3 ∼ 4 5 \frac{2}{3}\sim\frac{4}{5} 3254的样本用于训练,剩余样本用于测试。
    • 优点:操作简单,只需随机把原始数据分为三组即可。
    • 缺点:保留一部分样本做测试集,模型在非全量数据上训练可能存在偏差。
  • 交叉验证法
    • 场景:样本量不足时
    • 要求:分层采样将训练集 D D D划分成 k k k份数据分布相似的互斥子集 D i = 1 ∼ k D_{i=1\sim k} Di=1k;一份数据做测试,剩余做训练。随机划分 p p p次,取 p p p k k k折交叉验证结果的均值( p p p k k k折交叉验证)。
    • 优点:模型在不同的测试集上评估泛化能力更可靠
    • 缺点:保留了一部分样本做测试集,模型在非全量数据上训练可能存在偏差。
  • 留一法:交叉验证法的个例。
    • 场景:样本量不足时
    • 要求:1个样本测试,剩余样本训练
    • 优点:不受随机划分影响,模型更准确
    • 缺点:数据量太大时,计算开销大
  • 自助法:避免上述3中方法的缺点而来
    • 场景:样本量不足时
    • 要求:采用自助采样法(boostrap sampling)有放回随机采样 m m m次生成训练集 D ′ D^{'} D,剩余做测试集。36.8%的样本没有出现在训练集中: l i m m ↦ ∞ ( 1 − 1 m ) m ↦ 1 e ≈ 0.368 。 \underset{m\mapsto\infty}{lim}(1-\frac{1}{m})^m\mapsto\frac{1}{e}\approx0.368。 mlim(1m1)me10.368
    • 优点:类似于集成学习,有利于训练好的模型
    • 缺点:训练集改变了初始数据集的分布,引入了偏差

1.6 性能度量

  • 回归问题:均方误差 E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D)=\frac{1}{m}\overset{m}{\underset{i=1}{\sum}}(f(x_i)-y_i)^2 E(f;D)=m1i=1m(f(xi)yi)2

  • 二分类问题

    • 错误率:分类错误的样本数 / 样本总数;
    • 精 度:分类正确的样本数 / 样本总数;
    • 查准率:准确率 P r e c i s i o n = T P / ( T P + F P ) Precision= TP / (TP+FP) Precision=TP/(TP+FP)
    • 查全率:召回率 R e c a l l = T P / ( T P + F N ) Recall= TP / (TP+FN) Recall=TP/(TP+FN)
    • P R PR PR曲线:根据测试结果对样本排序,最前面“最有可能”是正例的样本。逐个把样本作为正例计算出当前的“查准率”和“查全率”。性能评价:完全包裹法曲线面积法平衡点法
    • F 1 F_1 F1值: 查准率和查全率的调和均值(又称倒数平均数:各变量倒数的平均数的倒数)
      1 F 1 = 1 2 ∗ ( 1 P + 1 R ) \frac{1}{F_1}=\frac{1}{2}*(\frac{1}{P}+\frac{1}{R}) F11=21(P1+R1)
    • F β F_β Fβ:加权调和均值。当 0 < β < 1 0<β<1 0<β<1时:偏重查准率;当 β > 1 β>1 β>1时:偏重查全率;
      L ( Y , f ( X ) ) = { 1 , Y ≠ f ( x ) 0 , Y = f ( x ) L(Y,f(X)) = \left\{\begin{aligned} 1,&& Y \neq f(x) \\ 0,&& Y = f(x) \\ \end{aligned}\right. L(Y,f(X))={1,0,Y=f(x)Y=f(x)
    • R O C ROC ROC曲线:受测试者工作特征曲线。排序并逐个将样本作为正类计算:
    • A U C AUC AUC R O C ROC ROC曲线下的面积
      A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ∗ ( y i + y i + 1 ) AUC = \frac{1}{2}\overset{m-1}{\underset{i=1}{\sum}}(x_{i+1}-x_i)*(y_i+y_{i+1}) AUC=21i=1m1(xi+1xi)(yi+yi+1)
  • 多分类问题

    • 思路1:每两两类别计算出查准率和查全率 ( P 1 , R 1 ) (P_1,R_1) (P1R1),$ (P_2,R_2) , . . . . . . , ,......, ......(P_n,R_n) ; 再 分 别 计 算 ;再分别计算 PR 均 值 , 宏 查 准 率 ( 均值,宏查准率( (macro-P ) 、 宏 查 全 率 ( )、宏查全率( )(macro-R ) 。 最 后 计 算 宏 )。最后计算宏 )F_1 ( ( (macro-F_1$)。
    • 思路2:先计算所有TP、FP、TN、FN的均值,再分别计算微查准率( m i c r o − P micro-P microP)、微查全率( m i c r o − R micro-R microR),最后计算微 F 1 F_1 F1( m i c r o − F 1 micro-F_1 microF1)。

1.7 假设检验

  • 假设检验的目的:从统计学的角度,判断不同算法的性能是否存在显著差异。
  • 交叉验证 t t t 检验:又称成对 t t t 检验。
    • 思想:根据成对算法性能差值的均值和方差计算服从 t t t分布的随机变量 t t t ,根据自由度、 t t t 分布临界值表判断性能是否存在差异;
    • 服从 t t t 分布;
    • 场景:两两算法在相同数据集上的两两比较。
  • Friedman检验
    • 思想:根据不同算法在不同数据集上的性能表现进行排序得到序值表,再计算服从卡方分布的随机变量,根据算法个数、数据集个数、 F分布的临界值表判断性能是否存在差异;
    • 服从:卡方分布(原始)、 F F F分布(修正);
    • 场景:多个算法在多个数据集上进行比较。

1.8 偏差与方差

  • 泛化误差:由偏差方差噪声组成: E ( f ; D ) = b i a s 2 ( x ) + v a r ( x ) + ε 2 E(f;D)=bias^2(x)+var(x)+\varepsilon^2 E(f;D)=bias2(x)+var(x)+ε2
    • 偏差:度量算法的期望预测与真实结果的偏离程度,刻画算法本身的拟合能力;
    • 方差:度量相同规模数据集变动所导致的性能变化,刻画数据扰动造成的影响;
    • 噪声:度量当前任务上所有算法的泛化误差的下界,刻画任务本身的难易程度;
  • 泛化性能:由算法能力数据是否充分问题难度共同决定。
  • 偏差方差关系
    • 训练不足时,拟合能力不足,训练集变化导致拟合能力变化不显著;偏差主导泛化错误率;
    • 训练充足时,拟合能力很强,训练集微小变化导致拟合能力发现显著变化,容易导致了过拟合。

1.9 多分类问题

  • 基本思想:将多分类任务拆为若干个二分类任务,每个二分类任务训练一个分类器。对所有分类器的预测结果进行集成获得最终的分类结果。
  • 拆分策略
    • One vs One:“一对一”。给定数据集 D D D,包含 N N N类。将 N N N个类别两两配对,产生 N ( N − 1 ) / 2 N(N-1)/2 N(N1)/2个分类。在测试阶段,新样本同时提交给所有分类器,最终结果通过多数投票产生:即把被预测最多的类别作为最终分类结果。

    • One vs Rest:“一对余”。一类样本作为正例,其余类别样本作为反例训练出N个分类器。在测试时若仅有一个分类器预测为正类,则对应的类别标记作为最终分类结果。若有多个分类器预测为正类,则通常考虑各分类器预测置信度,选择置信度最大的类别标记作为最终的预测结果。

    • Many vs Many:“多对多”。常采用 “纠错输出码”(Error Correcting Output Codes, 简称ECOC)策略,主要分两个阶段:

      • 编码阶段:对 N N N个类别做 M M M次划分,每次划分将一部分类别做为正类,一部分做为反类。训练得到M个二类分类器。类别划分通过“编码矩阵”指定:二元编码矩阵将每个类别分别指定为正类和反类,三元编码矩阵存在一些“停用类”。
      • 解码阶段 M M M个分类器分别对测试样本进行预测,这些预测标记组成一个编码,将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。
    • 策略总结

      • OvO的存储开销和测试时间开销比OvR大;
      • 在类别很多时,OvO的训练时间开销通常比OvR小;
      • “一对余”和“多对多”可能出现类别不平衡问题;
      • MVM缓解了类别不平衡问题,但编码策略相对比较复杂。

1.10 类别不平衡

  • 欠采样:去除一些多数类中的样本使得正例、反例数目接近。对于随机欠采样,由于采样的样本集合要少于原来的样本集合,因此会造成一些信息缺失。
    • EasyEnsemble:从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数。得到n个样本集合,训练得到n个模型进行集成分类。
  • 过采样:增加一些少数类样本使得正、反例数目接近。随机过采样重复样本比较多,可能造成过拟合问题。
    • SMOTE合成少数类:随机选中一个少数类样本 x i x_i xi,找出样本 x i x_i xi k k k个近邻,在少数类样本和某个近邻样本 x − i \overset{-}{x}_i xi之间的连线上合成新的样本。
  • 再缩放:在进行类别判定时,同时考虑分类器的预测几率 y / ( 1 − y ) y/(1-y) y/(1y)和数据集的观测几率( m + / m − m^+/m^- m+/m)。
    y n e w 1 − y n e w = y 1 − y ∗ m − m + > 1 , 则 为 正 类 \frac{y^{new}}{1-y^{new}} = \frac{y}{1-y}*\frac{m^-}{m^+}>1,则为正类 1ynewynew=1yym+m>1
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码大玩家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值