Skip to content

机器学习(ML )


概率近似正确 - PAC(Probably Approximately Correct)

最重要理论模型 :

P(|f(X)y|ϵ)1δ

其中:

  • X:data
  • f(X):X
  • y:
  • ϵ:
  • P:
  • δ:

NFL定理: 具体问题, 具体分析.

没有最好的算法,只有相对较优的算法

( 马哲贯彻人生🙃 )

误差

  • Underfitting(欠拟合)
  • Overfitting(过拟合)

image-20230925213330855

三个关键问题

1. 评估方法

  • 留出法(hold-out)

    将data切分为两个set,训练集和测试集(0.8:0.2 ...)

    • 保证数据分布一致性(分层采样)
    • 多次重复划分(百次测试求均值,去除切分数据的影响)
    • 最终预测模型为全数据训练
  • k-fold交叉验证法(cross calidation)

    进行k次划分,去除划分扰动,再根据k 划分 data后,循环训练 这k 个集合

    • 留一法(k=X1, 则得到 level-one-out, LOO )
  • 自助法(bootstrap)

    基于可重复采样, 约有36.8%的数据不会被抽中

    • 训练集与原样本集相同
    • 包外估计(out-of-bag estimation)
limm(11m)m=1e0.368

参数

  • 算法的参数: 一般由人设定,也称为 “超参数”
  • 模型的参数: 一般由学习确定

2. 性能度量

回归任务

常用均方误差Err :

E(f,X)=12mi=1m(f(xi)yi)2

分类任务

  • 错误率Err:

E(f,X)=1mi=1mI(f(xi)yi)

  • 精度Acc:

A(f,X)=1mi=1mI(f(xi)=yi)

=1E(f,X)

image-20230925224501316

  • 查准率: P=TPTP+FP
  • 查全率: R=TPTP+FN
  • F1度量: 1F1=12(1P+1R)
  • Fβ度量:

1Fβ=11+β2(1P+β2R)

{β<1,查准率影响更大β>1,查全率影响更大

3. 比较检验

统计假设检验为学习器性能比较提供了重要依据

  • 交叉验证t检验(基于成对t检验)
    • k-fold交叉检验; 5×2 交叉验证
  • McNemar检验(基于列联表,卡方检验)

线性模型

1. 线性回归

yi=1mwixi+b=wTx+b

  • 离散变量
    • 有序: 0,1,2
    • 无序: 001,010,100 (k维向量)

令均方误差最小化:

(w,b)=argmin(w,b)i=1m(f(xi)yi)2

=argmin(w,b)i=1m(wxi+byi)2

E(w,b)=i=1m(wxi+byi)2

  • 最小二乘法估计

E(w,b)w=2(wi=1mxi2i=1m(yib)xi)

E(w,b)b=2(mbi=1m(yiwxi))

令导数为0,得到闭式(closed-form)解:

w=i=1myi(xix)i=1mxi21m(i=1mxi)2

b=1mi=1m(yiwxi)

2. 多元(multi-variate)线性回归

yw0+w1x1+w2x2++wnxn

=i=0mwixi=WTX

后面我们对观测集,采用下面记号:

XN×p=[x11x12x1px21x22x2pxN1xN2xNp]

=(x1,x2,x3,,xN)T

其中xi=(xi1,xi2,,xip)T(iN)

  • 最小二乘估计

w^=argminw^(yXw^)T(yXw^)

Ew^=(yXw^)T(yXw^)

w^求导: Ew^=2XT(Xw^y)令其为零可得w^

  • XTX 满秩或正定, 则w^=(XTX)1XTy
  • XTX不满秩, 则可以解出多个w^
    • 设置归纳偏好或表达为引入正则化

3. 广义线性模型

一般形式:

y=g1(WTX)

例如对于f(x)=eWTX 可以通过对其求ln 来降幂从而达到线性拟合,如下图


4. 对率回归:

对数几率回归(logistic regression) 简称对率回归

y1yP(postive|X)P(negetive|X) :几率(odds) 即 log odds logit

对于线性回归模型产生的实值输出z=WTX和期望输出y{0,1}

理想函数 y(z)={0,z<00.5,z=01,z>0的函数性质较差,因此寻找如下替代函数y=11+ez

相比之下,替代函数的性质更好

  • 对率函数(logistic function)与逻辑没有任何关系
  • 实值函数,在y(0,1) 连续
  • 用回归模型做分类

因此对 y=11+ez,z=WTX

y=11+e(WTX)lny1y=WTX

  • 无需事先进行假设数据分布
  • 可以得到“类别”的近似概率预测
  • 可直接应用现有数值优化算法求取最优解
通过极大似然法求解

不能通过求梯度为零得极值点,因为目标函数,并不是凸函数

maxln(P(True-Positive)P(Positive)+P(True-Negative)P(Negative))

maxln(yeWTX1+eWTX+(1y)1eWTX)

简化之后可得

max(ln(yeWTX+1y)ln(1+eWTX))

由于 y=0y=1

那么 max{WTXln(1+eWTX),if y=1ln(1+eWTX),if y=0

合并上述讨论可得函数 max(yWTXln(1+eWTX))

z=min(ln1+eWTXeyWTX)z=min(ln1+ef(x)eyf(x))

一般情况下,到此处使用梯度下降法求解,更适合计算机迭代,可以使用二阶导得到,但并不通用。

  • 梯度下降法 如果矩阵不是满秩,没有逆矩阵,就无法使用最小二乘法。

5. 线性鉴别分析

Linear Discriminant Analysis

目标:最大化广义瑞利商

尽可能的最小化同类之间的距离,最大化异类之间的距离

min(wTΣ0w+wTΣ1w)

max(|wTμ0wTμ1|22)

于是 可求解maxJ

maxJ=max(|wTμ0wTμ1|22wTΣ0w+wTΣ1w)=max(wT(μ0μ1)(μ0μ1)TwwT(Σ0+Σ1)w)

类内散度矩阵(within-class scatter matrix)

Sw=Σ0+Σ1

=xX0(xμ0)(xμ0)T+xX1(xμ1)(xμ1)T

类间散度矩阵(between-class scatter matrix)

Sb=(μ0μ1)(μ0μ1)T

因此就有:

maxJ=max(wTSbwwTSww)

其等价于

minwwTSbws.t.wTSww=1

由拉格朗日子乘法

g(x)=wTSbw+λ(wTSww1)

g(x)=0 且其相关系数矩阵是对称 即得 (Sb+SbT)w+λ(Sw+SwT)w=2Sbw+2λSww=0

易得Sbw=(μ0μ1)(μ0μ1)Tw

注意到求解的w关注的是线性方程的方向,而(μ0μ1)Tw为标量

于是可令λ=(μ0μ1)Tw

w=Sw1(μ0μ1)

通常情况下进行奇异值分解更加快速便捷Sw=UΣVT

然后可得:Sw1=VΣ1UT

6. 多分类问题

现实中常使用多分类来解决分类问题

OvO & OvR

对于N个类别C1,C2,C3,,CN,可以将其折分成二分类问题,这将会产生N(N1)2次分类

或者拆分成非均衡的二分类,即一对其余(One v.s. Rest),仅需N个分类器

虽然OvO进行多次分类,但OvR每个分类器都使用全部的样例,所以两者在多数情况下时间开销相近

MvM

多对多分类(Many v.s. Many)

OvO & OvR显然是MvM的特例

针对多对多的分类问题,常采用纠错输出码(error correction output codes ECOC)

ECOC

ECOC工作过程主要分为编码和解码两步

  • 编码 对N个类别做M次划分,每次划分,将一部分类别化为正类,一部分化为反类,从而形成一个二分类训练机;这样一共有M个训练集,可以训练出M个分类器
  • 解码 M个分类器分别对样本进行预测,这些预测标记组成一个编码,将这个预测编码与每个类别各自比较,返回其中距离最小的类别作为最终预测结果

7. 类别不平衡问题

之前的分类学习方法都有一个共同基本假设,不同类别的训练样例数目 相当

如果不同类别的训练样例数目稍稍不同,通常影响不大

但若是差别很大,会对学习过程造成困扰,例如十分极端的训练样例:=99:1998:2

模型的训练时,只需一直返回多数方即可达到99%,99.8% 但是这样的学习器没有任何价值,它无法预测任何反例。

类别不平衡 就是指在分类任务中不同类别的训练样例数目差别较大的情况。

在拿到新的数据进行预测时,预测结果的决策,需要依靠所训练出的分类规则

对于线性模型,当进行决策时,预测结果为正类,就是根据其预测为正类的概率大于负类的概率,换言之:

y1y>1

然而在类别不平衡的条件下,训练出的分类器并不是这样,如正类小于负类的情况下,当预测的符合y1y>?>1 才会被鉴别为正类,显然这样的分类器并不“公平”

因此在类别不平衡学习中,对于分类器的决策执行时,可以对其进行“再缩放”

y1y=y1y1?使之平衡

但实际上实现起来却很难,因为我们认为的训练集是总体的无偏采样,能够代表总体概率。但实际上训练集数据抽取是随机的,它的偏差可能很大。

  • 欠(下)采样——减少多的一方
  • 过(上)采样——增加少的一方
  • 阈值移动——采用缩放使之平衡

决策树模型

分而治之,对属性进行判断从而划分

停止条件

  • 当前结点包含的样本全属于同一类别,无需划分
  • 当前节点属性集为空,或者所有样本在属性上取值相同,无法划分
  • 当前结点包含的样本集为空,不能划分

决策树的核心在于,使用什么划分方式,能使得属性得到最优划分 决策树是从信息论的基础上发展而来

信息熵

Entropy 用于度量信息的混乱和纯净程度

在集合D中,第k类样本占比pk,则D的信息熵为

Ent(D)=k=1|y|pklog2pk

信息增益

信息增益是进行划分后信息熵减小所获得的收益量

对离散属性a:a1,a2,...,aVDv(a=av)D

Gain(D,a)=Ent(D)v=1V|Dv||D|Ent(Dv)

增益率

当编号考虑为属性,那么上述信息增益的划分方式泛化会非常糟糕,因此引入一个分支数目作为分母,抵消分支数目过多的问题

Gain_ratio(D,a)=Gain(D,a)IV(a)IV(a)=v=1V|Dv||D|log2|DV||D| (C4.5算法)

基尼指数(Gini index)

Gini(D)=1k=1|y|pk2

属性a的基尼指数:Giniindex(D,a)=v=1V|Dv||D|Gini(Dv)

剪枝

pruning 用于对抗过拟合

  • 预剪(pre-pruning):预先设置条件,防止生长
  • 后剪枝(post-pruning):生成后再剪枝

缺失值处理

直接丢弃的方式在高维度数据时十分浪费

  • 如何进行划分属性选择
  • 给定划分属性,若样本在该属性值缺失,如何划分

基本思路:样本赋权,权重划分

神经网络

简单的神经元模型:激活信号达到反应阈值,就产生输出。

y=f(i=1nwixiθj)

理想的映射法则是间断的y=sgn(x) , 然而更长用的是其替代函数:Sigmoid函数

多层网络:包含隐层的网络。前馈网络:神经元之间不存在同层连接、跨层连接。

隐层和输出层神经元也称为 功能单元

设置隐层数目需要进行试错

  • 万有逼近性 说明了 神经网络的可行性

BP算法

误差逆传播算法(BackPropagation),使用广义感知机学习规则:vv+Δv 基于梯度下降的策略,以负方向对参数进行调整

为方便讨论,做如下规定: 给定训练集D=(x1,y1),(x2,y2),,(xm,ym),xiRd,yiRl 输入:d维向量 输出:l个输出值 隐层:q个隐层神经元 输入层权值:v1h,v2h,,vih 隐层权值:wh1,wh2,,whj

h个隐层神经元的输入:αh=i=1dvihxih个隐层神经元的输出:bhj个输出神经元的输入:βj=h=1qwhjbh 网络实际输出y^k=(y^1k,y^2k,,y^lk)y^jk=f(βjθj) 均方误差:Ek=12j=1l(y^jkyjk)2

则共需学习的参数数目为(d+l+1)q+l

误差导致Δv需要进行改变,因此通过梯度下降的方式调整 Δwhj=ηEkwhj 其中η(0,1)表示每次进行改变的幅度不宜过大,否则在后期易发生振荡,也不宜过小,导致迭代次数过多

Ekwhj=Eky^jky^jkβjβjwhj

注意到

Eky^jk=(y^jkyjk)

y^jk=f(βjθj)

对Sigmoid函数有 f(x)=f(x)(1f(x))

gj=Eky^jky^jkβj=y^jk(1y^jk)(yjky^jk)

于是有 Δwhj=ηEkwhj=ηgjbh

类似地

Δθj=ηgj

eh=Ekbhbhαh=j=1lEkβjβjbhf(αhγh)=j=1lwhjgjf(αhγh)=bh(1bh)j=1lwhjgj

Δvih=ηehxi

Δγh=ηeh

其它算法

  • RBF算法
  • ART网络
  • SOM网络
  • 级联相关网络
  • Elman网络
  • Boltzmann机

支持向量机