机器学习,模式识别中很重要的一环,就是分类,因为计算机其实无法深层次地理解文字图片目标的意思,只能回答是或者不是。当然现在卷积神经网络正在希望计算机能够看懂东西,这次我们先来看一些一些简单的分类算法。
说到朴素贝叶斯,先说一下贝叶斯定理,首先要解释的就是条件概率,非常简单,P(A|B)表示事件B发生的情况下,事件A发生的概率,
先通俗地解释一下原理,对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
朴素贝叶斯的定义如下:
1. 设 x={a1,a2,a3,a4,a5,....am} 为一个代分类项,而每个a为x的一个属性
2. 类别集合 C={y1,y2,y3,y4,...yn}
3. 计算 P(y1|x),P(y2|x),...P(yn|x)
4. 如果 P(yk)=maxP(y1|x),P(y2|x),...P(yn|x) 那么x就属于 yk
这些过程都非常简单,现在就需要计算第三步的各个条件概率,这其实也是一个训练过程
1. 找到一个训练样本,也就是一个已知分类的待分类项集合
2. 统计计算在各个类别下各个特征属性的条件概率估计
整个朴素贝叶斯的分类过程中,计算P(a|y)是一个关键一步,当特征属性为离散值时,只要很方便的统计训练样本中各个划分在每个类别中出现的频率即可用来估计P(a|y),下面重点讨论特征属性是连续值的情况。
当特征属性为连续值时,通常假定其值服从高斯分布(也称正态分布)。 因此只要计算出训练样本中各个类别中此特征项划分的各均值和标准差,就可以得到相应的概率。
另一个需要讨论的问题就是当P(a|y)=0怎么办,当某个类别下某个特征项划分没有出现时,就是产生这种现象,这会令分类器质量大大降低。为了解决这个问题,我们引入Laplace校准,它的思想非常简单,就是对没类别(概率为0的类别)下所有划分的计数加1,这样如果训练样本集数量充分大时,并不会对结果产生影响,并且解决了上述频率为0的尴尬局面。
决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。
决策数有两大优点:1)决策树模型可以读性好,具有描述性,有助于人工分析;2)效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。
决策树ID3算法,该算法是一信息为基础,以信息熵和信息增益度为衡量标准,从而实现对数据的归纳分类。
C4.5 算法一种分类决策树算法 , 其核心算法是 ID3 算法。C4.5 算法继承了 ID3 算法的优点,并在以下几方面对 ID3 算法进行了改进:
- 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值- 多的属性的不足;
- 在树构造过程中进行剪枝;
- 能够完成对连续属性的离散化处理;
- 能够对不完整数据进行处理。
C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效
Logistic Regression别看它名字里带了回归,但是它其实是一种分类的方法,用于两分类的问题。
K Nearest Neighbor算法,又称K近邻算法。
1. 计算训练样本和测试样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);
2. 对上面所有的距离值进行排序;
3. 选前k个最小距离的样本;
4. 根据这k个样本的标签进行投票,得到最后的分类类别;
如何选择一个最佳的K值,这取决于数据。一般情况下,在分类时较大的K值能够减小噪声的影响。但会使类别之间的界限变得模糊。一个较好的K值可通过各种启发式技术来获取,比如,交叉验证。另外噪声和非相关性特征向量的存在会使K近邻算法的准确性减小。
近邻算法具有较强的一致性结果。随着数据趋于无限,算法保证错误率不会超过贝叶斯算法错误率的两倍。对于一些好的K值,K近邻保证错误率不会超过贝叶斯理论误差率。
注:马氏距离一定要先给出样本集的统计性质,比如均值向量,协方差矩阵等。
SVM最基本的应用就是分类,求解一个最优的分类面,用于分类。
最优分类面的定义:存在一个分类面,使得两个点集到此平面的最小距离最大,两个个点集中的边缘点到此平面的距离最大,也就是样本中到平面最近的点的距离最远
为什么这样定义呢?如果一个平面离样本太近,那么它就会对噪声敏感,所以它需要离所有的样本点都尽量的远,并且它到它最近的训练样本的距离要大。
对于线性可分,总能找到样本正确的划分界面,而且有无穷多个,哪个是最优?必须寻找一种最优的分界准则,是两类模式分开的间隔最大。
两分类的问题的线性判别函数的一般表达方式为: g(x)=wTx+b 。其中方程 g(x)=0 定义了一个超平面H,把两类的训练样本完全分开。
设有N个样本: (x1,y1),(x2,y2),...,(xN,yn),xi∈Rn,yi∈{+1,−1} ,则有分类规则:
因为本人只学习了adboost,所以就以来看Boosting吧。
首先adaboost这个算法和以上的算法,思路都不太一样,上面的那些方法都是提高自身的性能,让自己变成强分类器,但是adaboost的思路却是,这个分类器较弱,这里想插一句,分类器弱,一般是这个分类器适应能力不行,就是我只在一些特定的情况,或者特征下表现比较好,但一旦情况复杂,数据量大的时候,这些分类器的表现就不好了,然后adaboost就想了一个方法,我多找一些分类器,它们各自都能在一些情况下表现良好,把它们组合起来,那么最终不就变成一个强分类器了吗。
那么adaBoost要做的就是怎样找到这些分类器的擅长区域,或者说他们的分类能力,也就表现是在adaboost中各个分类器的权值、比例。
迭代M次,亦即训练M个弱分类器:
训练当前弱分类器,使得训练样例的加权误差 Jm 最小。
求得当前弱分类器的加权误差率ε,如果ε>0.5,则当前分类器效果太差,算法终止,否则计算 α=1/2ln((1−ε)/ε) , α 就是该分类器的权重。
对于所有被当前弱分类器分错类的训练样例,增大其权重,以便在训练下一个弱分类器时重视这些被分错类的训练样例
最终得到的强分类器利用M个弱分类器的分类结果的加权和作为测试训练样例的分类结果。
这次机器学习分类算法的笔记主要参考了下面一篇博客http://www.cnblogs.com/tornadomeet/p/3395593.html