本文写作目的在于备考模式识别课程,对关键性知识进行总结,不会包含详细的数学推导过程,仅限于理解、记忆与相关知识的应用。部分知识点分散在几次实践作业中,本文只做拉取,不重复赘述。最后,本文不按教学顺序编排文章结构!本文不按教学顺序编排文章结构!本文不按教学顺序编排文章结构!
一、模式识别绪论
1.前置概念
模式和模式类的概念:存在于时间和空间中可观察的事物,如果我们可以区别它们是否相同或是否相似,都可以称之为模式。模式所指不是事物本身,而是我们从事物获得的信息,是我们要让机器自动识别的事物。用模式识别的术语来说,所见的具体事物是样本,通过对具体的个别事物进行观测所得到的具有时间和空间分布的信息称为模式,把模式所属的类别或同一类中模式的总体称为模式类(或简称类)。
模式识别的关键,就是找到有效地度量不同类事物的差异的方法。让机器辨别事物的最基本方法是计算,原则上讲是对计算机要分析的事物与作为标准的称之为“模板”的相似程度进行计算。
2.系统典型构成(行文结构)
文章结构按模式识别的典型过程编排,先说监督,后说非监督。监督学习与非监督学习最大的区别就在于训练样本是否有类别标号。
- 监督学习:用已知类别的样本训练分类器,以求对训练集的数据达到某种最优,并能推广到对新数据的分类;
- 非监督学习:样本数据类别未知,需要根据样本间的相似性对样本集进行分类(聚类);
二、特征选择与提取
特征选择和特征提取是两种用于提取特征有效信息、压缩特征空间的不同方法,因为后者涉及到新特征的生成。
- 特征选择:从原始特征中挑选出一些最有代表性,分类性能最好的特征。
- 特征提取:用映射(或变换)的方法把原始特征变换为较少的新特征。
1.特征选择
(1)选择准则——类别可分离性判据
常见的类别可分离性判据有三种:基于距离、基于概率和基于熵函数。
- 基于距离的可分性判据:就是看这一组特征下所有样本间的离散程度,概念直观,计算方便,但与错误率没有直接联系。
- 基于概率的可分性判据:用两类的概率密度函数间的距离来度量。
- 基于熵函数的可分性判据:在特征的某个取值下,如果样本属于各类的后验概率越平均,则该特征越不利于分类;如果后验概率越集中于某一类,则特征越有利于分类。
(2)选择方法
选择方法大体可以分为 Filter 方法和 Wrapper 方法两类。
- Filter 方法:根据独立于分类器的指标 J 来评价所选择的特征子集 S,然后在所有可能的特征子集中搜索出使 J 最大的特征子集作为最优特征子集,不考虑使用的学习算法。
- Wrapper 方法:将特征选择和分类器结合在一起,在学习过程中表现优异的特征子集会被选中。
2.特征提取
常见的特征提取方法有主成分分析(PCA)、K-L变换。K-L变换在某种意义上可以近似看作是PCA的别称,但二者又不完全等同。
PCA的具体情况参见 手写数字识别实践(二):基于线性SVM与PyQt5 的理论基础。
三、分类器设计
1.基于概率的决策方法——贝叶斯分类器
(1)分类器设计
贝叶斯分类器的具体情况参见 手写数字识别实践(一):基于朴素贝叶斯分类器与PyQt5 理论基础与复习阶段追加,最小错误率、最小风险率、朴素贝叶斯和正态分布概率模型贝叶斯都有提及。
(2)分类器概率密度函数的估计
在贝叶斯分类器的设计中需要获取类条件概率密度。对此有两种估计方法:参数估计和非参数估计。
- 参数估计方法,就是先假定研究的问题具有某种数学模型,如正态分布、二项分布等,再利用已知类别的学习样本估计里面的参数。包含有极大似然估计和贝叶斯估计两大分支。
- 非参数估计方法,就是不假定数学模型,直接用已知类别的学习样本的先验知识直接估计数学模型(说白了就是统计分析,因此对样本的数量需求会比较大)。包含直方图、Parzen窗、 K N K_N KN近邻估计这三种方法。
a.极大似然估计
极大似然估计的基本假设:
- 要估计的参数记为 θ \theta θ,它是确定但未知的量(多个参数时是向量);
- 从每类样本中抽取出来的样本间都满足独立同分布条件;
- 类条件概率密度具有确定的函数形式,只是其中的参数 θ \theta θ 未知;
- 不同类别间的参数独立,即对每一类样本单独处理。
求极大似然函数估计值的一般步骤:
- 写出似然函数;( θ \theta θ 为未知数的概率计算表达式)
- 对似然函数取对数,并整理;
- 求似然函数的导数,令其为0,得到似然方程;
- 解似然方程,得到待估计参数 θ \theta θ 的值。
PS:由于基本假设中存在独立同分布假设,因此似然函数会以累乘的形式出现。相乘的项数较多时直接求导会比较麻烦,所以中间插一步取对数,把累乘转换成累加就会好算很多。当然项数少的时候直接求导也是可以的。
b.贝叶斯估计
贝叶斯估计的基本假设:
- 要估计的参数记为 θ \theta θ,它是一个具有某种先验分布的随机变量,以一定的概率分布取所有可能的值;
- 从每类样本中抽取出来的样本间都满足独立同分布条件;
- 类条件概率密度具有确定的函数形式,只是其中的参数 θ \theta θ 未知;
- 不同类别间的参数独立,即对每一类样本单独处理。
求贝叶斯估计值的一般步骤:
- 根据对问题的认识或猜测确定 θ \theta θ 的先验分布 P ( θ ) P(\theta) P(θ);
- 确定每一类样本的联合概率密度分布;( θ \theta θ 的函数)
- 利用贝叶斯公式求 θ \theta θ 的后验概率分布 P ( θ ∣ X i ) P(\theta|X_i) P(θ∣Xi);
- 求得贝叶斯估计值 θ ^ \hat{\theta} θ^(后验概率分布的条件期望)。
PS: θ ^ = ∫ θ θ P ( θ ∣ X i ) d θ \hat{\theta}=\int_\theta{\theta P(\theta|X_i)} \,{\rm d}\theta θ^=∫θθP(θ∣Xi)dθ
c.极大似然估计法和贝叶斯估计法选择标准
- 方法的计算复杂度:选择极大似然估计法。因为前者仅涉及一些微分运算或梯度搜索技术,而后者要计算非常复杂的多重积分。
- 可理解性:选择极大似然估计法。前者比后者更容易理解和掌握,因为前者结果是基于设计者所提供的训练样本的一个最佳答案,而后者得到的结果则是许多可行解的加权平均,反映出对各种可行解的不确定程度。
- 信息可靠程度:选择贝叶斯估计法。因为后者使用到了 P ( θ ∣ X i ) P(\theta|X_i) P(θ∣Xi) 中的全部信息,如果这些信息可靠,就有理由认为后者比前者能得到更准确的结果。
- 在没有特别先验知识(如均匀分布)情况下,二者较为相似。
d.期望最大算法(EM算法)
适用条件与基本思想:
EM算法是一种从不完全数据或有数据缺失的数据集中求解概率模型参数的极大似然估计法。所谓不完全数据或数据缺失的情况,可描述为缺乏已知训练样本的类标签,不知道混合体中的每一个样本所属的类。此时需要估计的就有两项,一项是训练样本所属的类,另一项则是所有类条件概率密度函数的参数。
由于这两项信息之间是相通的(都可以由此及彼)因此可以先对一项信息作出假设,从而推出另一项信息,然后再从另一项信息反推回第一项信息,再从第一项信息推到另一项信息,就这样循环往复地套娃到收敛(参数不再发生变化)。
算法流程:
- 首先初始化分布参数 θ \theta θ;
- 重复以下步骤直到收敛:
E步骤:根据参数初始值或上一次迭代的模型参数计算出隐性变量的后验概率,即隐性变量的期望,得到隐性变量的现估计值;
M步骤:将似然函数最大化,得到新的参数值。
PS:EM算法无疑是具备收敛性的,不过只能保证收敛于似然函数的极值点而不能保证收敛于全局最优点。
e.直方图法
- 把样本 x x x 的每个分量在其取值范围内分成 k k k 个等间隔的小窗。如果 x x x 是 d d d 维向量,则可得到 k d k^d kd 个小舱,每个小舱的体积记为 V V V;
- 统计落入每个小舱内的样本数量 q i q_i qi;
- 把每个小舱内的概率密度看作常数,直接用 q i N V \frac{q_i}{NV} NVqi 作为其估计值,其中 N N N 为样本总数。
PS:考虑到样本在实际分布上的随机性,固定小舱宽度的直方图法取得的效果很有限。因此,后续的两种非参数估计方法在不同的角度上对原本的估计方法进行了优化。
f.Parzen窗法
和直方图法相比,Parzen窗法不需要分出很多个小舱并把它们局限在特定的位置,而是使用一个滑动的、体积固定的小舱来估计每个点的概率密度,就像做图像的边缘提取时,拿着
s
o
b
e
l
sobel
sobel 算子遍历整张图这样子。
这个小舱也叫窗函数(核函数)。显然,为保证估计出的概率密度函数的函数值非负且积分为1,窗函数不是随便选的,其自身也应满足密度函数的要求。常用的窗函数有方窗、高斯窗(正态窗)以及超球窗。
g. K N K_N KN近邻估计法
K
N
K_N
KN近邻估计法简单来说就是固定一个点对应的范围内只要
k
N
k_N
kN 个样本点,然后每个点的小舱根据实际情况调整小舱的体积,使小舱内刚好只有
k
N
k_N
kN 个样本点,那么这个位置的概率密度估计值就是
k
N
N
V
\frac{k_N}{NV}
NVkN
需要注意的是:以上介绍的所有方法最后都是得到类条件概率密度,应用到实际中要接上贝叶斯决策才能完成分类任务。
2.基于几何的决策方法——线性分类器
从本质上看,贝叶斯分类器设计都是围绕统计概率的方法进行分类决策,因此绕不开贝叶斯公式,之前介绍的所有内容都是围绕求取后验概率及类条件概率密度的求取展开的。而到了线性分类器这里,目标就从求取概率分布转变为求取分类决策面(的方程中的所有参数),这样即便没有掌握全局信息也能顺利做出决策(当然需要用EM算法的那种阴间情况是不算的,EM那是半只脚踩进聚类分析里去了)。
(1)感知器
a.基本思想
判别函数为下式形式
d
(
X
)
=
W
T
X
=
X
W
d(X)=W^TX=XW
d(X)=WTX=XW 然后定义关于
W
W
W 的准则函数
J
(
W
)
J(W)
J(W)(比如所有的被错分的样本到分界面的距离
W
T
x
i
W^Tx_i
WTxi 之和),使
W
W
W 最优时,准则函数取得极小值。这样就可以使用梯度下降法求准则函数的极小值(权矩阵
W
W
W) 。这里的
W
、
X
W、X
W、X 都是增广矩阵,也就是把偏置
B
B
B 给并进去了。
经典数值优化算法(梯度下降和牛顿迭代):参见 手写数字识别实践(三):基于BP神经网络与PyQt5 复习阶段追加部分。
b.算法实现步骤
- 随机初始化权矩阵 W W W,设置学习率(步长) η \eta η;
- 读取全部训练集样本,得到一个准则函数的值,更新一次权矩阵
W k + 1 = W k − η ∇ ( J ( W k ) ) = W k + η ∑ W T x i ≤ 0 x i W_{k+1}=W_k-\eta\nabla(J(W_k))=W_k+\eta\sum_{W^Tx_i\leq0 } x_i Wk+1=Wk−η∇(J(Wk))=Wk+ηWTxi≤0∑xi - 不断执行上一步,直到输入所有样本,权矩阵都不需要修正为止(判定终止的条件注定感知器在样本线性不可分时无法收敛)。
PS:也可以使用固定增量法来逐个考察样本,即对于某一个样本,每次权矩阵都在迭代中增加一个固定数值,直到该样本不再被错分,然后按同样的做法开始处理下一个样本点。
(2)最小平方误差算法(LMSE)
a,基本思想
如果样本集线性不可分,那么使用形如感知器的判别函数就无法使样本被全部正确分类。因此在感知器的基础上增加一个裕量
B
B
B,目的变更为使被错分的样本尽可能少。取均方误差
e
e
e 的长度的平方作为准则函数
J
(
W
,
X
,
B
)
=
1
2
∣
W
T
X
−
B
∣
2
=
1
2
∑
i
=
1
N
e
i
2
J(W,X,B)=\frac{1}{2}|W^TX-B|^2=\frac{1}{2}\sum_{i=1}^Ne_i^2
J(W,X,B)=21∣WTX−B∣2=21i=1∑Nei2 后面就跟感知器的解决方法差不多了。如果还要说有什么地方是不同的话,那应该就是梯度下降法的停止条件不同了吧(参见算法实现步骤)。
b.算法实现步骤
- 随机初始化权矩阵 W W W,设置学习率(步长) η 1 \eta_1 η1;
- 读取全部训练集样本,得到一个准则函数的值,更新一次权矩阵
W k + 1 = W k − η k ∇ ( J ( W k ) ) = W k − η k X T ( X W k − B ) W_{k+1}=W_k-\eta_k\nabla(J(W_k))=W_k-\eta_kX^T(XW_k-B) Wk+1=Wk−ηk∇(J(Wk))=Wk−ηkXT(XWk−B) - 不断执行上一步,权矩阵基本不再变化为止。
当然 LMSE 也是可以和感知器一样使用错分类样本逐个修正方法的。
PS:LMSE 算法的收敛依靠学习率 η k \eta_k ηk 的衰减,一般取 η k = η 1 k \eta_k=\frac{\eta_1}{k} ηk=kη1,这样即便训练样本线性不可分也能收敛于一个均方误差最小解。
(3)Fisher线性判别分析(LDA)
a.基本思想
找一个合适的直线方向,将样本点投影到这条直线上,在实现降维的同时也使同一类的样本点尽可能地投影到一起,不同类的样本点投影后则被分开,从而方便地实现分类。找到最好的投影方向以及实现这个投影变换就是 Fisher 要干的事。
投影以后,样本就变成了
Y
=
W
T
X
Y=W^TX
Y=WTX 而根据其目的,以二维投影到一维为例,易知投影后的类内离散度
S
w
~
2
\tilde{S_w}^2
Sw~2 (类方差之和)要尽可能小,而类间离散度
S
b
~
2
\tilde{S_b}^2
Sb~2 (类均值的差的平方)要尽可能大,由此构造准则函数
m
a
x
J
(
W
)
=
S
b
~
2
S
w
~
2
=
W
T
S
b
W
W
T
S
w
W
max\quad J(W)=\frac{\tilde{S_b}^2}{\tilde{S_w}^2}=\frac{W^TS_bW}{W^TS_wW}
maxJ(W)=Sw~2Sb~2=WTSwWWTSbW 式中
S
b
、
S
w
S_b、S_w
Sb、Sw 为投影前的样本类间离散度矩阵和类内离散度矩阵。使用拉格朗日乘数法解得最优投影方向
W
∗
=
S
w
−
1
(
m
1
−
m
2
)
W^*=S_w^{-1}(m_1-m_2)
W∗=Sw−1(m1−m2) 式中
m
1
、
m
2
m_1、m_2
m1、m2 为投影前的两个类均值向量。
PS:到这里为止只是用 Fisher 获得了最优的投影方向而已,还没有获得分类超平面。要得到分类面,就需要在投影后的方向上确定一个分类阈值(可以简单地选择所有样本投影后的均值),将一维空间划分为两个部分。
b.算法实现步骤
- 计算样本中各类的类内离散度矩阵 S 1 、 S 2 S_1、S_2 S1、S2 和类均值向量 m 1 、 m 2 m_1、m_2 m1、m2
- 计算样本的总类内离散度矩阵 S w = S 1 + S 2 S_w=S_1+S_2 Sw=S1+S2
- 获取投影方向 W ∗ = S w − 1 ( m 1 − m 2 ) W^*=S_w^{-1}(m_1-m_2) W∗=Sw−1(m1−m2)
- 经训练集内所有样本进行投影,并设定投影空间的分割阈值
- 对于给定的样本点,计算出它在 W ∗ W^* W∗ 方向上的投影点
- 根据决策规则(分割阈值)进行分类
3.其他决策方法
(1)支持向量机(SVM)
SVM(线性为主)详细内容参见 手写数字识别实践(二):基于线性SVM与PyQt5 理论基础与复习阶段追加部分。
(2)Logistic 回归
Logistic 回归是一种针对线性回归模型产生的预测值使用 Logistic 函数(BP神经网络部分提到的一种典型的激活函数)进行二分类的分类方法。两个类别很明显对应 Logistic 函数两端的饱和值: 0 和 1。Logistic 函数不像阶跃函数那样存在 0 到 1 的跃变,其单调可微的函数曲线赋予了 Logistic 函数一种能力:将一个具体的线性预测值
z
z
z 映射到 Logistic 函数上,就能将值转化为概率(0~1之间嘛)。
略去相关的数学推导,可以得到对数几率表达式
l
n
y
1
−
y
=
w
T
x
ln\frac{y}{1-y}=w^Tx
ln1−yy=wTx 式中
y
y
y 表示样本
x
x
x 为正例的概率(
1
−
y
1-y
1−y 就是反例了)。这样不仅能得到分类结果,还能得到近似概率预测。
Logistics 回归关于参数
w
w
w 的确定方法也和线性分类器确定
w
w
w 一样,可以采用梯度下降法进行训练。
PS:在 Logistics 回归这里想了很久,线性分类器从本质上来说就是专门做二分类的啊,所以一直不明白为什么有这么多线性分类器了干啥还要整个与众不同的 Logistics 回归分类方法出来。后来干脆就把 Logistics 回归当成是一种取特殊损失函数(交叉熵)的线性分类器设计过程的一个附加步骤,支持把预测值转换为预测概率后输出,或是应用于对预测结果输出有特殊要求的场合。
(3)K-近邻分类
K-近邻分类详细内容参见 手写数字识别实践补充:基于KNN与PyQt5 理论基础部分。
(4)决策树
决策树详细内容参见 手写数字识别实践补充:基于KNN与PyQt5 复习阶段追加部分。
(5)集成学习
简单来说就是把几个分类器给整到一起,然后对于一个输入的测试样本,几个分类器“就该样本归属类别的问题提出指导意见并进行投票表决”(还可人为设置每个分类器的权重)。
而对于这些模型的训练方式大体可以分为两类方法:Bagging类和Boostin类。
- Bagging类方法中对于每个模型的训练集都是从训练总集中随机抽取(有放回)生成的,以此提高每个模型的独立性。
- Boosting类方法则是按照一定的先后顺序训练不同的模型,每个模型都针对前序模型的错误进行专门训练。根据前序模型的结果,来调整训练样本的权重,从而增加不同模型之间的差异性。
(6)随机森林
决策树模型的集成形态。在Bagging类方法的基础上引入了随机特征,进一步提高了不同模型之间的独立性。
四、模型评估与选择
1.基本概念
- 泛化误差:在测试样本上的误差。
- 经验误差:经验误差,在训练集上的误差。
- 过拟合:将训练样本自身的一些特点作为所有潜在样本的一般性质而被学习,就会导致泛化能力降低,一般表现为经验误差收敛值很小,而泛化误差收敛值较大。可以通过增大正则项、减少特征维数减缓过拟合。
- 欠拟合:没有准确学习到训练样本的一般性质,一般表现为经验误差收敛值较大。可以通过增加训练轮数、增加特征维数以及减小正则项解决,单纯地增加训练集数据量不起作用。
- 学习曲线:横坐标为训练集的中训练样本的数量,纵坐标为交叉验证的准确率,可以直观看出模型是否存在过拟合与欠拟合现象。
2.数据集划分(只有一个数据总集)
在手上只有一个数据集的时候,通常不可能将全部的数据集用于训练,因此需要对数据集进行划分以获取训练集和测试集。常用的数据集划分方法有留出法、交叉验证法和自助法三种。
(1)留出法
数据集中每一类的数据单独存放而不是混杂在一起的时候,可以采用留出法,对每一类的样本以分层抽样的方式抽取一定数量(1/5~1/3)的样本,组合成测试集,这样能够确保数据分布比例平衡。
(2)k折交叉验证
- 将数据总集 D 均分成 k 个大小相似、不相交的子集
- 每次从分好的子集中取出一个作为测试集,其他子集作为训练集
- 训练出模型或者假设函数
- 将测试集投入模型,得到分类(正确)率
- 计算 k 次求得的分类率均值,作为该模型或者假设函数的真实分类率
(3)自助法
留出法和交叉验证法都是使用分层抽样且不放回的方式进行数据采样与划分。而自助法则是使用有放回重复采样的方式进行数据采样,重复抽取一定次数后得到训练集,然后把没有抽取到过的样本作为测试集。适用于数据集小且难以有效划分训练集和测试集的情况。
3.混淆矩阵与ROC曲线
ROC与AUC详细内容参见 手写数字识别实践(二):基于线性SVM与PyQt5 复习阶段追加部分。
五、人工神经网络
人工神经网络大致可以分为三种结构:
- 前馈神经网络:节点按照一定的层次排列,信号按照单一的方向从一层节点传递到下一层节点,网络连接是单向的。
- 反馈神经网络:输入信号作用于神经元节点上后,各个节点的输出又作为输入反馈到各节点,形成一个动态系统,当系统稳定后读取其输出。
- 竞争学习型神经网络:神经元节点通常排列在同一层次上,没有反馈连接,但是神经网络之间有横向的连接或相互影响,在学习时通过神经元之间的竞争实现特定的映射。
其中前馈神经网络与反向传播算法为主要学习内容。BP神经网络详细内容参见 手写数字识别实践(三):基于BP神经网络与PyQt5 理论基础部分。
六、聚类
为了完成一个聚类,必须遵循以下步骤:
- 特征选择:必须适合的选择特征,尽可能多的包含任务关心的信息。在特征中,使信息冗余减少和最小化是主要目标。
- 近邻测度:用于定量的测量两个特征向量如何相似或不相似。
- 聚类准则:这依赖于专家对“可判断”的解释,聚类准则一蕴涵在数据集中类的类型为基础。
- 聚类算法:已经采用近邻测度和聚类准则,这一步涉及到选择特定的算法,用于揭示数据集的聚类结构。
- 结果验证:一旦聚类算法得到结果,就必须验证其正确性。
- 结果判定:在许多情况下,应用领域的专家必须用其他实验证据和分析判定聚类结果,最后得出正确的结论。
七、半监督学习与深度学习
喵的复习不完了,这几分我不要了QAQ,把前面的东西重新温习一下拿分更稳它不香嘛!