白铁时代 —— 机器学习进阶理解

混淆矩阵

-Positive PredictionsNegative Predictions
Positive LabelTPFN
Negative LabelFPTN
  • Accuracy(准确率)
    A C C = T P + T N F P + F N + T P + T N =  预测正确样本数   总样本数  A C C=\frac{T P+T N}{F P+F N+T P+T N}=\frac{\text { 预测正确样本数 }}{\text { 总样本数 }} ACC=FP+FN+TP+TNTP+TN= 总样本数  预测正确样本数 
  • Precision(精度)
    P R E = T P T P + F P =  预测正确的正样本数量   所有豹测为正样本(不论对错  )  的样本数量  P R E=\frac{T P}{T P+F P}=\frac{\text { 预测正确的正样本数量 }}{ \text { 所有豹测为正样本(不论对错 } ) \text { 的样本数量 }} PRE=TP+FPTP= 所有豹测为正样本(不论对错 ) 的样本数量  预测正确的正样本数量 
  • Recal(召回率 TPR)
    T P R = T P T P + F N = 预测正确的正样本数量   总的正样本数量  T P R=\frac{T P}{T P+F N}=\frac{\text {预测正确的正样本数量 }}{\text { 总的正样本数量 }} TPR=TP+FNTP= 总的正样本数量 预测正确的正样本数量 
  • FPR(误诊率, 误报率)
    F P R = F P F P + T N =  预测错误的负样本数量   总的负样本数量  F P R=\frac{F P}{F P+T N}=\frac{\text { 预测错误的负样本数量 }}{\text { 总的负样本数量 }} FPR=FP+TNFP= 总的负样本数量  预测错误的负样本数量 
  • FNR(漏报率):
    F N R = F N F N + T N =  将正样本错认成负样本的数量   获测成负样本的总数量  F N R=\frac{F N}{F N+T N}=\frac{\text { 将正样本错认成负样本的数量 }}{\text { 获测成负样本的总数量 }} FNR=FN+TNFN= 获测成负样本的总数量  将正样本错认成负样本的数量 

各指标的使用分析

  • Accuracy:当正负样本数量极度不均衡时, 准确率无法正确的反映出模型的好坏, 当不同类别的样本比例非常不均衡时, 占比大的类别往往成为影响准确率的最主要因素.
  • Precision: 在面对正负样本数量极度不均衡时的缺陷: 当负样本数量大幅增加时, FP 也会大幅增加, 这样, 就会使得 Precision 相对降低.
  • P-R曲线(Precision — Recall)
    在这里插入图片描述
  • PR曲线的特殊位置:(0,1):Precision = 0,阈值趋向无穷大,全部预测成负样本,召回率:0/0 = 1;(1,0):阈值趋向0,全部预测成正样本,Recall趋向0而不等于0
  • PR曲线和分类器择优:① 性能正相关与AUC ② 平衡点 (BEP, 查准率=查全率), BEP 越大越好 ③ F1 度量, F1 越大越好
  • ROC曲线:召回率(查全率, TPR)和假正率(误诊率, FPR),
    在这里插入图片描述
  • ROC一定经过(0,0)和(1,1)
  • ROC一定在y=x之上,否则反转1-p即可
  • ROC曲线如果不光滑判断可能是过拟合;如果是光滑的,AUC (area under curve) 来判断模型的好坏, AUC 越大的模型越好. 因为 AUC 越大, 说明模型可以在较低的误诊率下达到较高的召回率.
  • 绘制ROC曲线,设定一系列阈值,得到混淆矩阵,进而得到TPR和FPR。当出现相同的Score时,会出现梯形,否则一般都是矩形!
  • ROC的AUC含义:AUC 的值是处于 [0, 1] 区间内的, AUC 可以看做是一个概率值, 当前学习器对正样本的预测值大于负样本的概率, 也就是说当前学习器将这个正样本排在负样本前面的概率.
  • AUC计算方法:① 计算各个小矩阵面积 ② 结合AUC的含义,设有样本集N正样本M负样本O(N^2 M^2):
    A U C =  正样本得分大于负样本的pair个数  N × M A U C=\frac{\text { 正样本得分大于负样本的pair个数 }}{N \times M} AUC=N×M 正样本得分大于负样本的pair个数 
    ③ 简化第二种方法的复杂度,先对整个样本按照得分大小排序,排列组合方式简化复杂度*(分子中 rank 的值实际上代表了该样本能够产生多少种 前大后小 的组合, 而这些组合中需要减去 N(1+N)2 中 (正样本, 正样本) 的组合情况):
    A U C = ∑ i ∈ positive r a n k i − N ( 1 + N ) 2 M × N A U C=\frac{\sum_{i \in \text {positive}} r a n k_{i}-\frac{N(1+N)}{2}}{M \times N} AUC=M×Nipositiveranki2N(1+N)
  • ROC和PR曲线的区别:ROC 曲线有一个特点, 那就是当正负样本的分布发生变化时, ROC 曲线的形状能够基本保持不变, 而 PR 曲线的性质一般会发生剧烈的变化. 具体来说就是, Recall 和 FPR 受正负样本数量不均衡问题的影响较小, 而 Precision 受其影响大(负样本数量升高时, Precision 会大幅降低), 所以 PR 曲线会发生剧烈变化

模型评估方法

  • Holdout 检验
  • S-Fold交叉验证
  • 自助法(有放回随机抽样): 有36.8%不会被挑选到(用于训练)

超参数调参

  • 网格搜索,先大后小
  • 随机搜索
  • 贝叶斯估计,先用先验分布构造的搜索函数进行取样,再更新分布 . 缺:容易进入局部最优点

模型比较

三大损失函数

hinge损失: l h i n g e ( z ) = max ⁡ ( 0 , 1 − z ) l_{h i n g e}(z)=\max (0,1-z) lhinge(z)=max(0,1z)
指数损失(exponential loss): l e x p ( z ) = exp ⁡ ( − z ) l_{e x p}(z)=\exp (-z) lexp(z)=exp(z)
对率损失(logistic loss): l l o g ( z ) = log ⁡ ( 1 + exp ⁡ ( − z ) ) l_{l o g}(z)=\log (1+\exp (-z)) llog(z)=log(1+exp(z))

线性回归和逻辑回归

  • 线性回归解决回归问题,逻辑回归解决分类问题
  • 逻辑回归本质上还是线性回归, 只是在特征到结果的映射中加入了一层函数映射, 即先把特征线性求和, 然后使用Sigmoid函数将连续结果值映射到 (0, 1) 之间;逻辑回归实际上也可以看做是对 log ⁡ p 1 − p \log \frac{p}{1-p} log1pp的线性回归

逻辑回归和SVM

  • 都是分类算法
  • 损失函数:前者log函数,后者Hinge loss函数。这两个损失函数的目的都是增加对分类影响较大的数据点的权重, 减少与分类关系较小的数据点的权重.
  • LR为什么使用对数损失函数? 因为LR是从最大熵模型推出来的:最大熵模型的思想:

① 根据现有观察样本, 计算现有的条件概率分布对应的熵. 条件熵是已知 X 的条件下, Y 的条件概率对应的熵, 如下:
H ( Y ∣ X ) = − ∑ x , y P ( x ) P ( y ∣ x ) log ⁡ P ( y ∣ x ) H(Y | X)=-\sum_{x, y} P(x) P(y | x) \log P(y | x) H(YX)=x,yP(x)P(yx)logP(yx)
② 让条件熵最大 max ⁡ ( H ( Y ∣ X ) ) \max (H(Y | X)) max(H(YX)),也可以说是让它的相反数最小 min ⁡ ( − H ( Y ∣ X ) ) \min (-H(Y | X)) min(H(YX))
③ 将最大条件熵转换成一个带约束的最优化问题, 然后用拉格朗日函数转换成对偶问题, 利用极大似然函数进行求解. 其二分类的最终形式与 sigmoid 函数相似, 同时也解释了为什么用极大似然估计来求解 LR.

  • 为什么采用极大似然函数求解LR? 最大熵模型的推导过程就是用的极大似然估计;因为这样构成的损失函数是高阶可导的凸函数, 比较方便用经典的数值优化算法(梯度下降, 牛顿)进行优化.
  • Logistic: 1 n ∑ i = 1 n − log ⁡ g ( y i [ w 0 + x i T w 1 ] ) + λ 2 ∥ w 1 ∥ ; g ( z ) = 1 1 + exp ⁡ ( − z ) \frac{1}{n} \sum_{i=1}^{n}-\log g\left(y_{i}\left[w_{0}+x_{i}^{T} w_{1}\right]\right)+\frac{\lambda}{2}\left\|w_{1}\right\|; g(z)=\frac{1}{1+\exp (-z)} n1i=1nlogg(yi[w0+xiTw1])+2λw1;g(z)=1+exp(z)1
  • SVM: 1 n ∑ i = 1 n ( 1 − y i [ w 0 + x i T w 1 ] ) + + λ 2 ∥ w 1 ∥ \frac{1}{n} \sum_{i=1}^{n}\left(1-y_{i}\left[w_{0}+x_{i}^{T} w_{1}\right]\right)^{+}+\frac{\lambda}{2}\left\|w_{1}\right\| n1i=1n(1yi[w0+xiTw1])++2λw1
  • SVM 的处理方法是只考虑支持向量, 也就是和分类最相关的少数点, 去学习分类器. 而逻辑回归通过非线性映射, 大大减小了离分类平面较远的点的权重, 相对提升了与分类最相关的数据点的权重.
  • ① 逻辑回归相对来说模型更加简单, 特别是大规模线性分类时比较方便. ② SVM 的实现和优化相对来说复杂一些, 但是 SVM 的理论基础更加牢固, 有一套结构化风险最小化的理论基础, 另外, SVM 转化成对偶问题后, 分类只需要计算与少数几个支持向量的距离即可, 这在进行复杂核函数计算时有时很明显, 能够大大简化模型和计算量
  • 逻辑回归产出的是概率值, 而 SVM 只能产出正负类, 因此 LR 的预估结果更容易解释.
  • SVM 主要关注的是 “支持向量”, 也就是和分类最相关的少数点, 即关注局部关键信息; 而逻辑回归是在全局进行优化的, 这导致 SVM 天然比逻辑回归有更好的泛化能力, 防止过拟合.

参数模型和非参数模型

  • 参数和非参数模型的区别不是模型种是否有参数,而是对问题建模时时候对总体分布已知,是否对总体分布进行假设
  • LR是参数,SVM不是参数
参数模型优缺点
  • 参数算法包括两部分: (1) 选择目标函数的形式; (2) 从训练数据中学习目标函数的系数. LR 会预先假设目标函数(直线或其他), 因此它是参数模型. 其他参数模型还有: 线性成分分析, 感知机.
  • 参数模型的优点:
    简单: 理论容易理解, 结果容易解释
    快速: 参数模型的学习和训练速度较快
    数据更少: 通常不需要大量的数据也可以较好的拟合?
  • 参数模型的缺点:
    约束: 以选定函数形式的方式来学习本身就限制了模型的解空间
    有限的复杂度: 通常只能应对简单的问题
    拟合度小: 实际中通常无法和潜在的目标函数温和.
非参数模型优缺点
  • 对于目标函数的形式不作过多的假设. 当有用许多数据而先验知识很少时, 非参数学习通常很有用, 因为此时不需要关注参数的选取. 常用的非参数算法包括: K 最近邻, 决策树, SVM, 朴素贝叶斯, 神经网络.
  • 非参数算法的优点:
    可变性: 可以拟合许多不同的函数形式
    模型强大: 对于目标函数不作假设或者作微小的假设
    表现良好: 对于预测结果表现通常较好
  • 非参数算法的局限性:
    需要更多数据: 对于拟合目标函数需要更多的训练数据
    速度慢: 参数更多, 所以训练通常较慢

SVM和LR的使用场景

令 n=特征数量, m=训练样本数量, 则:

  • 如果 n>m, 则使用 LR 或者不带核函数的 SVM, 因为特征数相对于训练样本数已经够大了, 使用线性模型就能取得不错的效果, 不需要过于复杂的模型;
  • 如果 n<m, 则使用 SVM(高斯核函数), 因为在训练样本数量足够大而特征数量较小的情况下, 可以通过复杂核函数的 SVM 来获得更好的预测性能, 而且因为训练样本数量并没有达到百万级, 使用复杂核函数的 SVM 也不会导致运算过慢;
  • 如果 n<<m, 此时因为训练样本数量特别大, 使用复杂核函数的 SVM 会导致训练过慢, 因此应该考虑通过引入更多特征, 然后使用 LR 或者不带核函数的 SVM 来训练更好的模型
  • 在实际使用中, 通常当数据非常非常大(几个 G, 几万维度特征), 跑不动 SVM 时, 用 LR. 如今数据量大幅增加, 相比来说 LR 反而用的更多了.

SVM

如何选取核函数

  • 吴恩达观点:① 如果 Feature 的数量很大, 跟样本数量差不多, 这时候可以使用 LR 或者是 Linear Kernel 的 SVM. (因为核函数需要计算内积, 两两样本都得算, 所以样本过多的话时间消耗太大, 很明显高斯核比线性核复杂的多) ② 如果 Feature 的数量比较小, 样本数量一般, 不算大也不算小, 就选用 SVM + Gaussian Kernel ③ 如果 Feature 的数量比较小, 而样本数量比较多, 就需要手工添加一些 feature, 使之变成第一种情况.

为什么说高斯核函数将原始特征空间映射成了无限维空间?

κ ( x , z ) = exp ⁡ ( − ∥ x − z ∥ 2 2 σ 2 ) \kappa(x, z)=\exp \left(-\frac{\|x-z\|^{2}}{2 \sigma^{2}}\right) κ(x,z)=exp(2σ2xz2)
高等数学中, 我们学过, 应用泰勒展开, 有:
e x = 1 + x 1 ! + x 2 2 ! + x 3 3 ! + … = ∑ n = 0 ∞ x n n ! e^{x}=1+\frac{x}{1 !}+\frac{x^{2}}{2 !}+\frac{x^{3}}{3 !}+\ldots=\sum_{n=0}^{\infty} \frac{x^{n}}{n !} ex=1+1!x+2!x2+3!x3+=n=0n!xn
所以有:
κ ( x , z ) = exp ⁡ ( − ∥ x − z ∥ 2 2 σ 2 ) = exp ⁡ [ − 1 2 σ 2 ⟨ x − z , x − z > ] = exp ⁡ [ − 1 2 σ 2 ( ∥ x ∥ 2 + ∥ z ∥ 2 − 2 x T z ) ] = exp ⁡ ( γ ∥ x ∥ 2 ) ∗ exp ⁡ ( γ ∥ z ∥ 2 ) ∗ exp ⁡ ( − 2 γ x T z ) , γ = − 1 2 σ 2 \begin{aligned} \kappa(x, z) &=\exp \left(-\frac{\|x-z\|^{2}}{2 \sigma^{2}}\right) \\ &=\exp \left[-\frac{1}{2 \sigma^{2}}\langle x-z, x-z>]\right.\\ &=\exp \left[-\frac{1}{2 \sigma^{2}}\left(\|x\|^{2}+\|z\|^{2}-2 x^{T} z\right)\right] \\ &=\exp \left(\gamma\|x\|^{2}\right) * \exp \left(\gamma\|z\|^{2}\right) * \exp \left(-2 \gamma x^{T} z\right), \gamma=-\frac{1}{2 \sigma^{2}} \end{aligned} κ(x,z)=exp(2σ2xz2)=exp[2σ21xz,xz>]=exp[2σ21(x2+z22xTz)]=exp(γx2)exp(γz2)exp(2γxTz),γ=2σ21
其中:
exp ⁡ ( γ ∥ x ∥ 2 ) = ∑ n = 0 ∞ ( γ ∣ ∣ x ∣ 2 ) n n ! = ∑ n = 0 ∞ γ n ( x 1 2 + x 2 + ⋯ x k 2 ) n n ! , x = ( x 1 , x 2 … x k ) T \begin{aligned} \exp \left(\gamma\|x\|^{2}\right) &=\sum_{n=0}^{\infty} \frac{\left(\left.\gamma|| x\right|^{2}\right)^{n}}{n !} \\ &=\sum_{n=0}^{\infty} \frac{\gamma^{n}\left(x_{1}^{2}+x_{2}^{+} \cdots x_{k}^{2}\right)^{n}}{n !}, x=\left(x_{1}, x_{2} \ldots x_{k}\right)^{T} \end{aligned} exp(γx2)=n=0n!(γx2)n=n=0n!γn(x12+x2+xk2)n,x=(x1,x2xk)T
也就是说, exp( γ ∥ x ∥ 2 ) \left.\gamma\|x\|^{2}\right) γx2) 含有了无穷多项的多项式, 对应的映射面数 Φ ( ⋅ ) \Phi(\cdot) Φ() 将に維空向映的成了无限维空间, 即: Φ : R k → R ∞ \Phi: R^{k} \rightarrow R^{\infty} Φ:RkR

高斯核 δ \delta δ的意义

  • σ很小的情况下(狄拉克分布),所有映射后的点彼此之间的距离均相等,即不存在聚类现象(聚类直观上理解就是各个点聚在一起,之间的距离较小)。这样一来每个样本点将被单独形成一个分类。
  • σ很大的情况下(均匀分布),两个不同的点经过映射后,成为高维空间上的同一个点(相互之间距离为0)。这样一来,所有的样本点将被划分成同一个类,无法区分开来。

K-Means

实现 anchor 划分

  • 实现对 anchor 的 K-Means 聚类算法, 核心思想和常规的聚类实现相同, 不同之处在于 “距离” 的定义, 和更新centers的方式, 具体来说就是:
    ① 距离的定义: 用1-IOU定义每个框与centers之间的距离, IOU越大, 距离越近
    ② 聚类点更新: centers更新时, 采用np.median选择当前类中的中位数box作为新的center. 经过实验验证, 使用mean的效果不如使用median. 这里由于我们使用的是median, 也就是众多boxes 中的某一个作为最终的聚类点, 因此我们不设置最大的迭代次数, 而是一直循环到聚类点不再更新为止.
    ③ 注意, 由于确定 anchor 时, 我们仅仅只需要样本框的宽和高这两个信息即可, 不需要知道样本的具体location, 所以, 在传入boxes时, 我们传入的是 [N, 2] 维度的数据, 其中 N 代表 box 的数量, 2 代表每个 box 的 (w, h)

机器学习算法的使用场景

  • 没有最好的算法,只有最合适的算法
  • 数据维度越高,随机森林就比AdaBoost强越多,但是整体不及SVM;数据量越大,神经网络就越强。

近邻算法/KNN

  • 适用情景:
  • 需要一个特别容易解释的模型的时候。
    比如需要向用户解释原因的推荐算法。

贝叶斯

典型的例子是Naive Bayes,核心思路是根据条件概率计算待判断点的类型。
是相对容易理解的一个模型,至今依然被垃圾邮件过滤器使用。

  • 适用情景:
  • 需要一个比较容易解释,而且不同维度之间相关性较小的模型的时候。
  • 可以高效处理高维数据,虽然结果可能不尽如人意。

决策时

  • 适用情景:因为它能够生成清晰的基于特征(feature)选择不同预测结果的树状结构,数据分析师希望更好的理解手上的数据的时候往往可以使用决策树。
  • 同时它也是相对容易被攻击的分类器。这里的攻击是指人为的改变一些特征,使得分类器判断错误。常见于垃圾邮件躲避检测中。因为决策树最终在底层判断是基于单个条件的,攻击者往往只需要改变很少的特征就可以逃过监测。
  • 受限于它的简单性,决策树更大的用处是作为一些更有用的算法的基石

随机森林

  • 适用情景:
    数据维度相对低(几十维),同时对准确性有较高要求时。
    因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

SVM

  • 适用情景:
    SVM在很多数据集上都有优秀的表现。
    相对来说,SVM尽量保持与样本间距离的性质导致它抗攻击的能力更强。
    和随机森林一样,这也是一个拿到数据就可以先尝试一下的算法。

逻辑回归

  • 适用情景:LR同样是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义。
  • 因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。虽然效果一般,却胜在模型清晰,背后的概率学经得住推敲。它拟合出来的参数就代表了每一个特征(feature)对结果的影响。也是一个理解数据的好工具

判别分析 (Discriminant analysis)

  • 线性判别分析(Linear discriminant analysis):LDA的核心思想是把高维的样本投射(project)到低维上,如果要分成两类,就投射到一维。要分三类就投射到二维平面上。这样的投射当然有很多种不同的方式,LDA投射的标准就是让同类的样本尽量靠近,而不同类的尽量分开。对于未来要预测的样本,用同样的方式投射之后就可以轻易地分辨类别了。
  • 判别分析适用于高维数据需要降维的情况,自带降维功能使得我们能方便地观察样本分布。
  • 它的正确性有数学公式可以证明,所以同样是很经得住推敲的方式。但是它的分类准确率往往不是很高,所以不是统计系的人就把它作为降维工具用吧。
  • 同时注意它是假定样本成正态分布的,所以那种同心圆形的数据就不要尝试了。

神经网络 (Neural network)

  • 使用情景:
    数据量庞大,参数之间存在内在联系的时候。
    当然现在神经网络不只是一个分类器,它还可以用来生成数据,用来做降维,这些就不在这里讨论了。

Boosting

  • 使用情景:
    好的Boosting算法,它的准确性不逊于随机森林。虽然在[1]的实验中只有一个挤进前十,但是实际使用中它还是很强的。因为自带特征选择(feature selection)所以对新手很友好,是一个“不知道用什么就试一下它吧”的算法。

Bagging

  • 使用情景:
    相较于经典的必使算法,Bagging使用的人更少一些。一部分的原因是Bagging的效果和参数的选择关系比较大,用默认参数往往没有很好的效果。
    虽然调对参数结果会比决策树和LR好,但是模型也变得复杂了,没事有特别的原因就别用它了。

Stacking

  • Stacking是Kaggle比赛中常见的集成学习框架。一般来说,就是训练一个多层(一般是两层,本文中默认两层)的学习器结构,第一层(也叫学习层)用n个不同的分类器(或者参数不同的模型)将得到预测结果合并为新的特征集,并作为下一层分类器的输入。一个简单的示意图如下:
    在这里插入图片描述
  • Stacking中的第一层可以等价于神经网络中的前 n-1层,而stacking中的最终分类层可以类比于神经网络中最后的输出层。不同点在于,stacking中不同的分类器通过异质来体现对于不同特征的表示,神经网络是从同质到异质的过程且有分布式表示的特点(distributed representation)。Stacking中应该也有分布式的特点,主要表现在多个分类器的结果并非完全不同,而有很大程度的相同之处。
  • 调参算法 …
  • 使用情景:没事就别用了,适合竞赛,不适合工程

多专家模型(Mixture of Experts)

隐马尔科夫 (Hidden Markov model)

  • 适用场景:
    可以用于序列的预测,可以用来生成序列。

条件随机场 (Conditional random field)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值