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(y∣x)=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))=(Y−f(X))2
- 绝对值损失函数(回归): L ( Y , f ( X ) ) = ∣ Y − f ( x ) ∣ L(Y,f(X)) = |Y-f(x)| L(Y,f(X))=∣Y−f(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(Y∣X))=−logP(Y∣X)
- 合页损失函数(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,1−yf(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)+(1−y)ln(1−f(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=1∑NL(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 过拟合与欠拟合
![](http://code-player-sliu.gitee.io/csdn-picture-bed/MachineLearning/过拟合与欠拟合.jpeg)
欠拟合
:- 表现:训练误差大,测试误差大
- 原因:特征少,模型复杂度较低
- 解决:
- 添加新特征。比如:组合特征;
- 添加多项式特征。比如:二次项或者三次项特征;
- 减少正则化参数;
- 使用非线性模型。
过拟合
:- 表现:训练误差小,测试误差大。
- 原因:参数太多,迭代次数太多,模型复杂度较高
- 解决:
- 增大数据集。估计参数分布并生成新样本、数据增强(图像的旋转,平移或缩放);
- 添加正则化项。 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} 32∼54的样本用于训练,剩余样本用于测试。
- 优点:操作简单,只需随机把原始数据分为三组即可。
- 缺点:保留一部分样本做测试集,模型在非全量数据上训练可能存在偏差。
交叉验证法
:- 场景:样本量不足时
- 要求:分层采样将训练集 D D D划分成 k k k份数据分布相似的互斥子集 D i = 1 ∼ k D_{i=1\sim k} Di=1∼k;一份数据做测试,剩余做训练。随机划分 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。 m↦∞lim(1−m1)m↦e1≈0.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=1∑m(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=1∑m−1(xi+1−xi)∗(yi+yi+1)
-
多分类问题:
- 思路1:每两两类别计算出查准率和查全率 ( P 1 , R 1 ) (P_1,R_1) (P1,R1),$ (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 micro−P)、微查全率( m i c r o − R micro-R micro−R),最后计算微 F 1 F_1 F1( m i c r o − F 1 micro-F_1 micro−F1)。
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 偏差与方差
![](http://code-player-sliu.gitee.io/csdn-picture-bed/MachineLearning/泛化误差偏差方差.png)
- 泛化误差:由
偏差
、方差
和噪声
组成: 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(N−1)/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 x−i之间的连线上合成新的样本。
- 再缩放:在进行类别判定时,同时考虑分类器的预测几率
y
/
(
1
−
y
)
y/(1-y)
y/(1−y)和数据集的观测几率(
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,则为正类 1−ynewynew=1−yy∗m+m−>1,则为正类