机器学习基本算法总结
☞监督学习——分类
代码在这,基于python3(原书代码是python2)
这里只是一个总结,原书已经讲解很清楚了,不清楚的直接看代码,或者李航的统计学习方法也有公式推导。
目录1
==========================
一、k-近邻算法(kNN)
1.概述
k-NN算法是最简单的分类算法,主要的思想是计算待分类样本与训练样本之间的差异性,并将差异按照由小到大排序,选出前面K个差异最小的类别,并统计在K个中类别出现次数最多的类别为最相似的类,最终将待分类样本分到最相似的训练样本的类中。与投票(Vote)的机制类似。
k-近邻算法是基于实例的学习,使用算法时我们必须有接近实际数据的训练样本数
据。
- 优点:精度高,对异常值不敏感,无数据输入假定
- 缺点:时间和空间复杂度高,无法获取样本特征
- 数据:数值型和标称型
2.算法介绍
- 训练算法:此步骤不适用于k-临近算法
- 测试算法:计算错误率
- 使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k-临近算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续处理。
##2.1 错误率
error_rate=分错的样本数量 / 总样本数量
##2.2 归一化
newvalue=(oldvalue-min) / (mx-min)
3.伪代码
对未知类别属性的数据集中的每个点依次执行以下操作:
(1)计算已知类别数据集中的点与当前点之间的距离;
(2)按照距离递增次序排序;
(3)选取与当前点欧氏距离最小的k个点
;
(4)确定前k个点所在类别的出现频率;
(5)返回前k个点出现频率最高的类别
作为当前点的预测分类。
4.实例
1、约会网站配对案例
某人将对象分为三类人,不喜欢的人,魅力一般的人,极具魅力的人。
这里实现的过程是,给定一个人的数据,进行打分预测属于哪类人,从而帮助用户是否选择相亲进行决策。
2、手写数字识别实战案例
5.存在的问题及解决方法、总结
算法小结:
(1)如果我们改变训练样本的数目,调整相应的k值,都会对最后的预测错误率产生影响,我们可以根据错误率的情况,对这些变量进行调整,从而降低预测错误率
(2)k近邻算法是基于实例的学习,使用算法时我们必须有接近实际数据的训练样本数据。k近邻算法必须保存全部数据集,如果训练数据集很大,必须使用大量的存储空间。此外,由于必须对数据集中的每个数据计算距离,实际使用时也可能会非常耗时
(3)此外,k近邻算法无法给出数据的基础结构信息,因此我们无法知道平均实例样本和典型实例样本具有怎样的特征。
1、计算复杂度的问题
在K-NN算法中,每一个预测样本需要与所有的训练样本计算相似度,计算量比较大。比较常用的方法有K-D树,局部敏感哈希等等
2、K-NN的均匀投票
在上述的K-NN算法中,最终对标签的选择是通过投票的方式决定的,在投票的过程中,每一个训练样本的投票的权重是相等的,
(1)可以对每个训练样本的投票加权,以期望最相似的样本有更高的决策权。
(2)归一化。
===============================================================
二、决策树ID3
1.概述
k-近邻算法可以完成很多分类任务,但是它最大的缺点就是无法给出数据的内在含义,决策树的主要优势就在于数据形式非常容易理解。
决策树算法是从数据的属性(或者特征)出发,以属性作为基础,划分不同的类。
实现决策树的算法有很多种,有ID3、C4.5和CART等算法。
- 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。
- 缺点:可能会产生过度匹配问题。
- 数据:数值型和标称型
2.算法介绍
- 训练算法:构造树的数据结构。
- 测试算法:使用经验树计算错误率。
- 使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据
的内在含义。
2.1 ID3算法
ID3算法是由Quinlan首先提出的,该算法是以信息论为基础,以信息熵和信息增益为衡量标准,从而实现对数据的归纳分类。
(1) 在ID3算法中,选择信息增益最大的属性
作为当前的特征对数据集分类。
(2) 判断划分结束,第一种为划分出来的类属于同一个类,第二种为遍历完所有划分数据集的属性。
2.2 信息增益
ID3算法是以信息熵和信息增益作为衡量标准的分类算法。
熵的概念主要是指信息的混乱程度,变量的不确定性越大,熵的值也就越大,熵定义为信息的期望值。
符号 xi x i 的信息定义为:
其中 p(xi) p ( x i ) 是选择该分类的概率。
为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值,通过下面的公式得到:
划分数据集的大原则是:将无序的数据变得更加有序。在划分数据集之前之后信息发生的变化称为信息增益,,获得信息增益最高的特征就是最好的选择。
3.伪代码
对未知类别属性的数据集中的每个点依次执行以下操作:
(1)选择特征
(2)划分数据集——寻找划分数据集的最好特征,创建分支节点
(3)满足终止条件
(4)满足就结束,不满足则回到(1)
4.实例
4.1 预测眼镜蛇类型
存在过度匹配问题
5.存在的问题及解决方法
1、过度匹配数据集
裁剪决策树,合并相邻无法产生大量信息增益的叶节点,消除过度匹配问题。
当决策树的复杂度较大时,很可能会造成过拟合问题。此时,我们可以通过裁剪决策树的办法,降低决策树的复杂度,提高决策树的泛化能力。比如,如果决策树的某一叶子结点只能增加很少的信息,那么我们就可将该节点删掉,将其并入到相邻的结点中去,这样,降低了决策树的复杂度,消除过拟合问题。
===============================================================
三、基于概率论的分类方法:朴素贝叶斯
1.概述
前两章的KNN分类算法和决策树分类算法最终都是预测出实例的确定的分类结果,但是,有时候分类器会产生错误结果;本章要学的朴素贝叶斯分类算法则是给出一个最优的猜测结果,同时给出猜测的概率估计值。利用已知值估计未知概率
- 优点:在数据较少的情况下仍然有效,可以处理多类别问题。
- 缺点:对于输入数据的准备方式较为敏感。
- 适用数据类型:标称型数据
2.算法介绍
- 训练算法:计算不同的独立特征的条件概率。
- 测试算法:计算错误率。
- 使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使_用朴素贝叶斯命类器,不一定非要是文本。输入数据分别属于哪个分类,最后应用对计算出的分类执行后续处理。
2.1 条件概率
2.2 如何使用条件概率进行分类
假设这里要被分类的类别有两类,类c1和类c2,那么我们需要计算概率p(c1|x,y)和p(c2|x,y)的大小并进行比较:
如果:p(c1|x,y)>p(c2|x,y),则(x,y)属于类c1
p(c1|x,y)<p(c2|x,y),则(x,y)属于类c2
我们知道 p(x,y|c) p ( x , y | c ) 的条件概率所表示的含义为:已知类别c条件下,取到点(x,y)的概率;那么 p(c|x,y) p ( c | x , y ) 所要表达的含义呢?显然,我们同样可以按照条件概率的方法来对概率含义进行描述,即在给定点(x,y)的条件下,求该点属于类c的概率值。那么这样的概率该如何计算呢?显然,我们可以利用贝叶斯准则来进行变换计算:
上述公式写为: