《R语言数据挖掘》读书笔记:四、高级分类算法
第四章、高级分类算法
1. 集成方法(策略:模型平均)
为了提升分类的准确率,提出了集成方法(EM)
集成方法就是基于多个基础分类器来构建组合的分类器(每个基学习器都犯不同的错误,综合起来犯错的可能性不大)
每个基础分类器的训练过程基于不同的数据集成或者是对源是训练数据集进行又放回的抽样得到的训练数据集进行训练。
1.1 Bagging算法(Boostrap aggregation)
Boostrap抽样方法:有放回抽样法
基本思想:分别训练几个不同的模型,然后用所有模型来表决测试样例的输出。
Bagging算法详解: https://blog.csdn.net/fontthrone/article/details/79074296
1.2 Boosting(提升)算法和AdaBoost算法
提升算法对分类错误的样本更为关注,通过改变错误样本所占的权值来改变分类边界,从而一步步提升算法的准确度。
与集成方法相反,Boosting算法对每个基础分类器的训练元组数据集进行甲醛表决和加权抽样,迭代地学习基础分类器。一旦学习了分类器,那就用基础分类器的下一次学习的新算法更新相关的权重(把前一轮分类错误的元素权重加大,以获得更多的关注)。这种连续模型学习将突出前一个分类器错误分类的元组,因此,当组合分类器面对未知的测试元组时,一个特定分类器的准确性在组合分类器中对于最后的投票分类结果起着非常重要的作用。
AdaBoost算法是Boosting算法代表性的一种,详细解析: https://blog.csdn.net/zwqjoy/article/details/80424783
超详细版: https://blog.csdn.net/guyuealian/article/details/70995333
1.3 随机森林算法(Random Forest在准确率方面还是相当有优势的)
随机森林算法是将不同的决策树组合在一起的集成方法,每个节点分裂时应用随机选择的属性选择策略生成决策树的策略。给定未知的元组,每个分类器表决,最受欢迎的一个表决将确定最后的结果。
ForestRI算法使用上述方式分裂。
ForestRC算法,在节点分裂时不采用上面随机的属性选择,而是采用现有属性的随机线性组合策略执行分裂。通过初始属性集的随机线性组合来构建新的属性。随着新属性的加入,分类器就会对这些新加入的属性和原始属性构成的更新过的属性集进行重新搜索,以获取最佳分裂。
随机森林算法详细解析: https://blog.csdn.net/yangyin007/article/details/82385967
1.4 R语言实现(上面网址已经给出)
2. 生物学特征和贝叶斯信念网络
2.1 贝叶斯信念网络算法
贝叶斯网络由两部分组成:有向无环图+每个变量的条件概率表(CPT)
使用该算法输出是一个BNN拓扑结构。
贝叶斯网络图形象地说明了各部分不确定性之间的相互关系。
在应用BNN算法分类之前,首先需要对网络进行训练。在训练过程中,专家知识(即先验知识)可以用来知道网络的设计,对于网络中直接依赖的变量,专家必须指定其条件概率。从训练数据即学习网络的方法有很多,可以采用自适应算法(逐渐逼近的方式,如梯度法)。
构造贝叶斯网络的两个步骤:根据构成可以有 1.先建立节点之间的拓扑结构 2.再训练(构造CPT表)
贝叶斯信念网络算法详解: https://blog.csdn.net/u014593570/article/details/77663897
2.2 R语言实现(略)
2.3 生物学特征
BNN算法的一个重要应用就是生物学特征分析。
3. 蛋白质分类和k近邻算法
3.1 kNN算法
k近邻算法(kNN)是一种懒惰学习算法,这种算法的学习过程是在测试实例(或测试元组)给出的前提下进行的。
在需要分类的测试元组到来之前,没有具体的训练元组。需要一些预处理步骤,如数据标准化。当某个属性值比其他属性值大时,通过需要进行标准化处理。这里在数据变换中应用数据标准化进行预处理。当给定具体的测试元组时,从训练元组空间中选取k近邻训练元组。这些k近邻的训练元组成为kNN。真实空间中常采用欧式距离,这种方法只适用数值属性。
对于名义属性,两个属性值之间的差可以定义为0或1,我们已经知道处理属性缺失值的许多办法。使用预定义的阈值,选择在所有训练元组中具有最低错误率的元组数作为k值。测试元组的类标签定义为kNN中得票数最高的类。
kNN算法详解: https://www.cnblogs.com/jyroy/p/9427977.html
kNN算法实例: https://blog.csdn.net/pengjunlee/article/details/82713047
3.2 R语言实现(略)
4. 文档检索和支持向量机
4.1 支持向量机算法
支持向量机(SVM)是可以同时应用于线性和非线性数据分类的分类算法。
算法基于的假设:若两类数据不能通过一个超平面分割(多维),那么就将源数据集映射到更高维空间后,必定存在最佳分割超平面。
必须清楚地定义两个概念:
1.线性可分:指根据训练元组的输入可以使用某线性方程将数据集中的不同类别进行分离。
2.非线性可分:空间中不存在和训练数据集位数一致的线性方程。
支持向量机的目标是找到最佳超平面,使得属于不同类的数据点之间的边缘距离最大。在将低维空间的向量映射到高维空间后,非线性可分的情形将变换为线性可分的情况。
超详细的支持向量机解析和拓展: https://blog.csdn.net/v_JULY_v/article/details/7624837#commentBox
支持向量机算法+原核支持向量机算法详解与实例: https://blog.csdn.net/fuqiuai/article/details/79483057
一般支持向量机算法通俗讲解: https://www.cnblogs.com/mantch/archive/2018/12/23/10165425.html
支持向量机例子: https://www.cnblogs.com/alan666/p/8311840.html
4.2 R语言实现(略)
4.3 文档检索
支持向量机的一个重要应用是文档检索,它有一个静态信息库,任务是获取文档排名作为用户请求的响应。向量模型是广泛使用的文档检索或信息检索模型。
5. 基于频繁模式的分类
基本思想:如果一个频繁模式X与类C有很强的关联性,那么X->C提供了一个很强的分类能力
基于频繁模式的分类有两种类型:①关联分类模型和关联规则,它们是从频繁模式中产生的并用于分类 ②基于判别频繁模式的分类
5.1 关联分类
两种常见算法:
基于关联规则算法概述(全): https://blog.csdn.net/baidu_15113429/article/details/70046990
①基于关联规则分类(Classification Based on Association,CBA):
CBA算法作为分类算法,他的分类情况也就是给定一些预先知道的属性,然后叫你判断出他的决策属性是哪个值。判断的依据就是Apriori算法挖掘出的频繁项,如果一个项集中包含预先知道的属性,同时也包含分类属性值,然后我们计算此频繁项能否导出已知属性值推出决策属性值的关联规则,如果满足规则的最小置信度的要求,那么可以把频繁项中的决策属性值作为最后的分类结果。
CBA 算法详细解析: https://blog.csdn.net/androidlushangderen/article/details/43818787
②基于多关联规则的分类(Classification Based on Multiple Association Ruler,CMAR):
使用改进的频繁模式增长算法FP-Growth来挖掘关联规则,并使用规则进行分类。
5.2 基于判别频繁模式的分类
5.3 R语言实现(略)
5.4 基于序列频繁项集的文本分类
CBA算法的一个重要应用就是文本分类。其关键在于构建文档或文本项和标签的矩阵。可以将任何分类算法应用于创建的矩阵。这里给出一个文档矩阵的例子,其中文本项可以包括字符、单词、短语或概念。
6. 基于反向传播算法的分类
6.1 BP算法(BackRropagation,BP):通过训练多层前馈神经网络来学习分类模型。
BP神经网络的通用架构:包含一个输入层、多个隐含层和一个输出层。每层包含多个单元或感知器。每个单元可能与其他单元通过权重连接。
与数值分析课程中的多次迭代以逐步逼近结果的思想一致。
在对网络训练之前,需要定义BP算法的输入参数、神经网络的拓扑结构、隐含层的数目以及单元之间的连接。
BP算法(推导加例子)详细解析: https://www.cnblogs.com/wlzy/p/7751297.html
6.2 R语言实现(略)
7.一些参考的博客(还有上面的,都写得很好):
https://blog.csdn.net/FontThrone
下一章将介绍没有预定义标签的另一种无监督分类算法——聚类算法