分类算法概述

2023-10-30

摘 要:分类是数据挖掘、机器学习和模式识别中一个重要的研究领域。通过对当前数据挖掘中具有代表性的优秀分类算法进行分析和比较,总结出了各种算法的特性,为使用者选择算法或研究者改进算法提供了依据。

1 概述

分类是一种重要的数据挖掘技术。分类的目的是根据数据集的特点构造一个分类函数或分类模型(也常常称作分类器),该模型能把未知类别的样本映射到给定类别中的某一个。分类和回归都可以用于预测。和回归方法不同的是,分类的输出是离散的类别值,而回归的输出是连续或有序值。本文只讨论分类。

构造模型的过程一般分为训练和测试两个阶段。在构造模型之前,要求将数据集随机地分为训练数据集和测试数据集。在训练阶段,使用训练数据集,通过分析由属性描述的数据库元组来构造模型,假定每个元组属于一个预定义的类,由一个称作类标号属性的属性来确定。训练数据集中的单个元组也称作训练样本,一个具体样本的形式可为:(u1,u2,……un;c);其中ui表示属性值,c表示类别。由于提供了每个训练样本的类标号,该阶段也称为有指导的学习,通常,模型用分类规则、判定树或数学公式的形式提供。在测试阶段,使用测试数据集来评估模型的分类准确率,如果认为模型的准确率可以接受,就可以用该模型对其它数据元组进行分类。一般来说,测试阶段的代价远远低于训练阶段。

为了提高分类的准确性、有效性和可伸缩性,在进行分类之前,通常要对数据进行预处理,包括:

(1) 数据清理。其目的是消除或减少数据噪声,处理空缺值。

(2) 相关性分析。由于数据集中的许多属性可能与分类任务不相关,若包含这些属性将减慢和可能误导学习过程。相关性分析的目的就是删除这些不相关或冗余的属性。

(3) 数据变换。数据可以概化到较高层概念。比如,连续值属性“收入”的数值可以概化为离散值:低,中,高。又比如,标称值属性“市”可概化到高层概念“省”。此外,数据也可以规范化,规范化将给定属性的值按比例缩放,落入较小的区间,比如[0,1]等。

2 分类算法的种类及特性

分类模型的构造方法有决策树、统计方法、机器学习方法、神经网络方法等。按大的方向分类主要有:决策树,关联规则,贝叶斯,神经网络,规则学习,k-临近法,遗传算法,粗糙集以及模糊逻辑技术。



2.1 决策树(decision tree)分类算法

决策树是以实例为基础的归纳学习算法。它从一组无次序、无规则的元组中推理出决策树表示形式的分类规则。它采用自顶向下的递归方式,在决策树的内部结点进行属性值的比较,并根据不同的属性值从该结点向下分支,叶结点是要学习划分的类。从根到叶结点的一条路径就对应着一条合取规则,整个决策树就对应着一组析取表达式规则。1986年

Quinlan提出了著名的ID3算法。在ID3算法的基础上,1993年Quinlan又提出了C4.5算法。为了适应处理大规模数据集的需要,后来又提出了若干改进的算法,其中SLIQ (super-vised learning in quest)和SPRINT (scalable parallelizableinduction of decision trees)是比较有代表性的两个算法。

       (1) ID3算法

ID3算法的核心是:在决策树各级结点上选择属性时,用信息增益(information gain)作为属性的选择标准,以使得在每一个非叶结点进行测试时,能获得关于被测试记录最大的类别信息。其具体方法是:检测所有的属性,选择信息增益最大的属性产生决策树结点,由该属性的不同取值建立分支,再对各分支的子集递归调用该方法建立决策树结点的分支,直到所有子集仅包含同一类别的数据为止。最后得到一棵决策树,它可以用来对新的样本进行分类。

某属性的信息增益按下列方法计算。通过计算每个属性的信息增益,并比较它们的大小,就不难获得具有最大信息增益的属性。

设S是s个数据样本的集合。假定类标号属性具有m个不同值,定义m个不同类Ci(i=1,…,m)。设si是类Ci中的样本数。对一个给定的样本分类所需的期望信息由下式给出:

其中pi=si/s是任意样本属于Ci的概率。注意,对数函数以2为底,其原因是信息用二进制编码。

       设属性A具有v个不同值{a1,a2,……,av}。可以用属性A将S划分为v个子集{S1,S2,……,Sv},其中Sj中的样本在属性A上具有相同的值aj(j=1,2,……,v)。设sij是子集Sj中类Ci的样本数。由A划分成子集的熵或信息期望由下式给出:

      

熵值越小,子集划分的纯度越高。对于给定的子集Sj,其信息期望为

其中pij=sij/sj 是Sj中样本属于Ci的概率。在属性A上分枝将获得的信息增益是

Gain(A)= I(s1, s2, …,sm)-E(A)

ID3算法的优点是:算法的理论清晰,方法简单,学习能力较强。其缺点是:只对比较小的数据集有效,且对噪声比较敏感,当训练数据集加大时,决策树可能会随之改变。

(2) C4.5算法

C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:

1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;

2) 在树构造过程中进行剪枝;

3) 能够完成对连续属性的离散化处理;

4) 能够对不完整数据进行处理。

C4.5算法与其它分类算法如统计方法、神经网络等比较起来有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。

(3) SLIQ算法

SLIQ算法对C4.5决策树分类算法的实现方法进行了改进,在决策树的构造过程中采用了“预排序”和“广度优先策略”两种技术。

1) 预排序。对于连续属性在每个内部结点寻找其最优分裂标准时,都需要对训练集按照该属性的取值进行排序,而排序是很浪费时间的操作。为此,SLIQ算法采用了预排序技术。所谓预排序,就是针对每个属性的取值,把所有的记录按照从小到大的顺序进行排序,以消除在决策树的每个结点对数据集进行的排序。具体实现时,需要为训练数据集的每个属性创建一个属性列表,为类别属性创建一个类别列表。

2) 广度优先策略。在C4.5算法中,树的构造是按照深度优先策略完成的,需要对每个属性列表在每个结点处都进行一遍扫描,费时很多,为此,SLIQ采用广度优先策略构造决策树,即在决策树的每一层只需对每个属性列表扫描一次,就可以为当前决策树中每个叶子结点找到最优分裂标准。

SLIQ算法由于采用了上述两种技术,使得该算法能够处理比C4.5大得多的训练集,在一定范围内具有良好的随记录个数和属性个数增长的可伸缩性。

然而它仍然存在如下缺点:

1)由于需要将类别列表存放于内存,而类别列表的元组数与训练集的元组数是相同的,这就一定程度上限制了可以处理的数据集的大小。

2) 由于采用了预排序技术,而排序算法的复杂度本身并不是与记录个数成线性关系,因此,使得SLIQ算法不可能达到随记录数目增长的线性可伸缩性。

(4) SPRINT算法

为了减少驻留于内存的数据量,SPRINT算法进一步改进了决策树算法的数据结构,去掉了在SLIQ中需要驻留于内存的类别列表,将它的类别列合并到每个属性列表中。这样,在遍历每个属性列表寻找当前结点的最优分裂标准时,不必参照其他信息,将对结点的分裂表现在对属性列表的分裂,即将每个属性列表分成两个,分别存放属于各个结点的记录。

SPRINT算法的优点是在寻找每个结点的最优分裂标准时变得更简单。其缺点是对非分裂属性的属性列表进行分裂变得很困难。解决的办法是对分裂属性进行分裂时用哈希表记录下每个记录属于哪个孩子结点,若内存能够容纳下整个哈希表,其他属性列表的分裂只需参照该哈希表即可。由于哈希表的大小与训练集的大小成正比,当训练集很大时,哈希表可能无法在内存容纳,此时分裂只能分批执行,这使得SPRINT算法的可伸缩性仍然不是很好。


贝叶斯分类是统计学分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Na?ve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,且方法简单、分类准确率高、速度快。由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。为此,就出现了许多降低独立性假设的贝叶斯分类算法,如TAN(tree augmented Bayes network)算法。

(1) 朴素贝叶斯算法

设每个数据样本用一个n维特征向量来描述n个属性的值,即:X={x1,x2,…,xn},假定有m个类,分别用C1, C2,…,Cm表示。给定一个未知的数据样本X(即没有类标号),若朴素贝叶斯分类法将未知的样本X分配给类Ci,则一定是

P(Ci|X)>P(Cj|X) 1≤j≤m,j≠i

根据贝叶斯定理

由于P(X)对于所有类为常数,最大化后验概率P(Ci|X)可转化为最大化先验概率P(X|Ci)P(Ci)。如果训练数据集有许多属性和元组,计算P(X|Ci)的开销可能非常大,为此,通常假设各属性的取值互相独立,这样

先验概率P(x1|Ci),P(x2|Ci),…,P(xn|Ci)可以从训练数据集求得。

根据此方法,对一个未知类别的样本X,可以先分别计算出X属于每一个类别Ci的概率P(X|Ci)P(Ci),然后选择其中概率最大的类别作为其类别。

朴素贝叶斯算法成立的前提是各属性之间互相独立。当数据集满足这种独立性假设时,分类的准确度较高,否则可能较低。另外,该算法没有分类规则输出。

(2) TAN算法

TAN算法通过发现属性对之间的依赖关系来降低NB中任意属性之间独立的假设。它是在NB网络结构的基础上增加属性对之间的关联(边)来实现的。

实现方法是:用结点表示属性,用有向边表示属性之间的依赖关系,把类别属性作为根结点,其余所有属性都作为它的子节点。通常,用虚线代表NB所需的边,用实线代表新增的边。属性Ai与Aj之间的边意味着属性Ai对类别变量C的影响还取决于属性Aj的取值。

这些增加的边需满足下列条件:类别变量没有双亲结点,每个属性有一个类别变量双亲结点和最多另外一个属性作为其双亲结点。

找到这组关联边之后,就可以计算一组随机变量的联合概率分布如下:

其中ΠAi代表的是Ai的双亲结点。由于在TAN算法中考虑了n个属性中(n-1)个两两属性之间的关联性,该算法对属性之间独立性的假设有了一定程度的降低,但是属性之间可能存

在更多其它的关联性仍没有考虑,因此其适用范围仍然受到限制。

2.3 基于关联规则的分类算法

关联规则挖掘是数据挖掘研究的一个重要的、高度活跃的领域。近年来,数据挖掘技术己将关联规则挖掘用于分类问题,取得了很好的效果。

ARCS(Association Rule Clustering System)基于聚类挖掘关联规则,然后使用规则进行分类。将关联规则画在2-D栅格上,算法扫描栅格,搜索规则的矩形聚类。实践发现,当数据中存在孤立点时,ARCS比C4.5稍微精确一点。ARCS的准确性与离散化程度有关。从可伸缩性来说,不论数据库多大,ARCS需要的存储容量为常数。

CBA(classification based on association)是基于关联规则发现方法的分类算法。该算法分两个步骤构造分类器。第一步:发现所有形如xi1∧x => Ci 的关联规则,即右部为类别属性值的类别关联规则(classification association rules,CAR)。第二步:从已发现的CAR中选择高优先度的规则来覆盖训练集,也就是说,如果有多条关联规则的左部相同,而右部为不同的类,则选择具有最高置信度的规则作为可能规则。文献[4]对该过程进行了较深入的研究,使得算法在此步骤不需要对训练数据集进行过多的扫描。

CBA算法的优点是其分类准确度较高,在许多数据集上比C4.5更精确。此外,上述两步都具有线性可伸缩性。

CBA(Classification Based on Association)是关联分类。此算法把分类规则挖掘和关联规则挖掘整合到一起。与CART和C4.5只产生部分规则不同的是,CBA产生所有的类关联规则CARs(Class Association Rules),然后选择最好的规则去覆盖训练集。另外,在此算法的框架中,数据库可以驻留在磁盘中

CAEP使用项集支持度挖掘HV露模式(Emerging Pattern), 而EP用于构造分类。CAEP找出满足给定支持度和增长率阈值的EP。己经发现,在许多数据集上,CAEP比C4.5和基于关联的分类更精确。一种替代的、基于跳跃的HV露模式JEP(Jnmping Emerging Pattern)是一种特殊类型的EP,项集的支持度由在一个数据集中的0陡峭地增长到另一个数据集中的非0。在一此大的多维数据库中,JEP性能优于CAEP, 但在一些小型数据库中,CAEP比JEP优,这二种分类法被认为是互补的。

ADT(Association Decision Trec)分二步实现以精确度驱动为基础的过度适合规则的剪枝。第一步,运用置信度规则建立分类器。主要是采用某种置信度的单调性建立基于置信度的剪枝策略。第二步,为实现精确性,用关联规则建立一种平衡于DT(Dccision Tree)归纳的精确度驱动剪枝。这样的结果就是ADT(Association Based Decision Trec)。它联合了大量的关联规则和DT归纳精确性驱动剪枝技术。

基于多维关联规则的分类算法CMAR(Classification Based on Multiple Class-Association Rules)是利用FP-Growth算法挖掘关联规则,建立类关联分布树FP-树。采用CR-树(Classification Rulc Trcc)结构有效地存储关联规则。基于置信度、相关性和数据库覆盖来剪枝。分类的具体执行采用加权厂来分析。与CBA和C 4.5相比,CMAR性能优异且伸缩性较好。但CMAR优先生成的是长规则,对数据库的覆盖效果较差;利用加权x2统计量进行分类,会造成x2统计量的失真,致使分类值的准确程度降低。CPAR(Classification Based on Predictive Association Rules)整合了关联规则分类和传统的基于规则分类的优点。为避免过度适合,在规则生成时采用贪心算法,这比产生所有候选项集的效率高;采用一种动态方法避免在规则生成时的重复计算;采用顶期精确性评价规则,并在预测时应用最优的规则,避免产生冗余的规则。另外,MSR(Minimnm Set Rule)针对基于关联规则分类算法中产生的关联规则集可能太大的问题,在分类中运用最小关联规则集。在此算法中,CARS并不是通过置信度首先排序,因为高置信度规则对噪声是很敏感的。采用早期剪枝力方法可减少关联规则的数量,并保证在最小集中没有不相关的规则。实验证实,MSR比C45和CBA的错误率要低得多。


虽然数据挖掘的创始人主要是数据库领域的研究人员,然而提出的大多数算法则没有利用数据库的相关技术。在分类算法中,致力于解决此问题的算法有MIND (mining in database)和GAC-RDB(grouping and counting-relational database)。
(1) MIND算法
MIND 算法是采用数据库中用户定义的函数(user-defined function,UDF)实现发现分类规则的算法。MIND采用典型的决策树构造方法构建分类器。具体步骤与SLIQ类似。其主要区别在于它采用数据库提供的UDF方法和SQL语句实现树的构造。简而言之,就是在树的每一层,为每一个属性建立一个维表,存放各属性的每个取值属于各个类别的个数以及所属的结点编号。根据这些信息可以为当前结点计算每种分裂标准的值,选出最优的分裂标准,然后据此对结点进行分裂,修改维表中结点编号列的值。在上述过程中,对维表的创建和修改需要进行多次,若用SQL实现,耗时很多,因此用UDF实现。而分类标准的寻找过程则通过创建若干表和视图,利用连接查询实现。
该算法的优点是通过采用UDF实现决策树的构造过程使得分类算法易于与数据库系统集成。其缺点是算法用UDF完成主要的计算任务,而UDF一般是由用户利用高级语言实现的,无法使用数据库系统提供的查询处理机制,无法利用查询优化方法,且UDF的编写和维护相当复杂。此外,MIND中用SQL语句实现的那部分功能本身就是比较简单的操作,而采用SQL实现的方法却显得相当复杂。
(2) GAC-RDB算法
GAC -RDB算法是一种利用SQL语句实现的分类算法。该算法采用一种基于分组计数的方法统计训练数据集中各个属性取值组合的类别分布信息,通过最小置信度和最小支持度两个阈值找出有意义的分类规则。在该算法中,首先利用SQL语句计算每个属性进行类别判定的信息量,从而选择一个最优的分裂属性,并且按照信息量的大小对属性进行排序,随后重复地进行属性的选择、候选分类表的生成、剪裁以及分类误差的计算,直到满足结束条件为止,比如,直到小于误差阈值和误差没有改变为止。
该算法的优点是具有与现有的其他分类器相同的分类准确度,执行速度有较大提高,而且具有良好的伸缩性,应用程序易于与数据库系统集成。其缺点是参数的取值需用户完成等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分类算法概述 的相关文章

随机推荐

  • discuz x 个人空间及群组地址实现二级域名的方法(APACHE独立主机)

    按以下操作 1 在域名控制面板添加A解析 增加一个主机头为 的纪录解析到你的论坛所在服务器 即做下域名泛解析 2 修改服务器上的apache conf httpd conf 或 apache conf extra httpd vhosts
  • sharepoint 2016小白快速部署入门篇(2)-AD域服务器安装和部署

    千里之行始于足下 SharePoint在网上教程也有很多 不过看的再多不如自己实际操作 下面就带领大家快速入门 根据以往经验 通常简单分为三台服务器 1 SharePoint server前端服务器 2 AD域控制器 3 SQL serve
  • 第四章 JDBC

    1 JDBC定义 JDBC是Java数据库连接技术的简称 提供连接各种常用数据库的能力 2 为什么需要JDBC JDBC场景1 客户端 本机 应用服务器 JDBC 数据库 返回至客户端 JDBC JDBC场景2 本机 访问 应用服务器 JD
  • React三子棋教程后续练习

    1 在游戏历史记录列表显示每一步棋的坐标 格式为 列号 行号 game state history中不仅需要记录棋盘 还需要记录此步落子的坐标 class Game extends React Component 修改Game构造函数中的h
  • Ubuntu常用软件简单整理

    1浏览器 1 gt chrome 并不是chromium Ubuntu软件中心搜索出来的 要到Google官网去下载 因为chrome可以支持Flash 不像chromium还要自己安装Flash 2 gt Firefox 系统自带的 感觉
  • linux readelf &&strip && strings

    readelf可以查看该可执行程序包含哪些函数 readelf a boardagent 或者readelf s boardagent strip 可以将可执行文件的大小减小 原理是去除符号表 strip boardgaent cat pr
  • 如何调整plt.plot()线的粗细,linewidth

    ax plot np r 0 100 1 2 np r 0 100 0 2 color C1 linewidth 3 0 label GT ax plot np r 0 100 w np r 0 100 b color C2 linewid
  • 复盘-7.14号欢聚前端一面面经

    复盘 7 14号欢聚前端一面面经 复试45分钟左右 主要都在问css和js简述一下css盒模型元素怎么设置成垂直水平居中谈一下flex的理解吧谈一下对position的理解谈一下闭包 闭包的副作复盘 7 14号欢聚前端一面面经复试45分钟左
  • 微信小程序开发——wx:for形成列表,获得item信息

    1 获得循环下标 首先 从wx for的定义所在行处 获得此次循环的下标 解释 起作用的是wx for index categoryIndex 利用wx for index可以得到此次循环的下标 再利用该语句 就可以将下标存在变量categ
  • 软件测试/测试开发丨venv 环境管理 学习笔记

    点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接 https ceshiren com t topic 27070 venv 环境管理 venv 虚拟环境 虚拟环境是什么 单独隔离的开发环境 各个环境之间互不干扰
  • [CocosCreator 踩坑记录] 无法保存场景Failed to update asset db

    问题描述 无法保存场景 并出现以下报错 Failed to update asset db assets scences messages Error EISDIR illegal operation on a directory open
  • Vue3描述列表(Descriptions)

    整体功能效果与 ant design vue 保持高度一致 包含两种组件 Descriptions 和 DescriptionsItem 必须搭配使用 效果如下图 在线预览 APIs Descriptions 参数 说明 类型 默认值 必传
  • 解决4G网络移动打不开网站,WiFi可以正常访问

    一 解决4G网络移动打不开网站 WiFi可以打开1 把域名放进http ping chinaz com 看看解析IP延迟是否过高2 询问WiFi能打开网站 4G网络打不开网站的人 是不是本地网络出问题或者只有移动4g 其他运营商是不是都能访
  • esxi 无盘服务器,用ipxe网络启动打造无盘ESXi系统

    一 源码与链接 几个相关链接 相关源码 二 编译一个带 iSCSI 和 COMBOOT 功能的 iPXE 固件 这个参考 ipxe 官网或 iPXE 编译增加功能与自定义脚本 进行编译 在我的源码 netboot tftp 中有编译好可用的
  • MySQL高级篇(逻辑架构、存储引擎、用户与权限管理、索引优化、慢查询日志、主从复制等)

    MySQL高级 1 MySQL逻辑架构 1 1 概览 1 1 1 连接层 1 1 2 服务层 1 1 3 引擎层 1 1 4 存储层 1 2 查看SQL的执行周期 1 3 查询流程 1 4 SQL执行顺序 2 MySQL存储引擎 2 1 查
  • 百分百全开源的ERP项目,太赞了

    大家好 我是小编南风吹 每天推荐一个小工具 源码 装满你的收藏夹 让你轻松节省开发效率 实现不加班不熬夜不掉头发 今天小编推荐一款基于SpringBoot框架和SaaS模式的ERP 目前专注进销存 财务 生产功能 主要模块有零售管理 采购管
  • MySQL的字段属性,以及存储引擎和字符集

    目录 1 字段属性 1 1 zerofill 填充0 1 2 primary key 主键 1 3 auto increment 1 4 not null 1 5 foreign key 外键 1 6 comment 1 7 default
  • 5.类和对象的创建

    文章目录 1 面向过程和面向对象的理解 2 类和对象的理解 3 类和对象的创建 1 面向过程和面向对象的理解 1 二者都是一种思想 面向对象是相对于面向过程而言的 面向过程 强调的是功能行为 以函数为最小单位 考虑怎么做 面向对象 将功能封
  • 用Python手撸一个神经网络

    单隐藏层神经网络的实现 用Python实现用于分类任务的简单神经网络 神经网络简述 编程弯路 从矩阵视角看神经网络 反向传播及其实现 效果测试 用神经网络解决更复杂的分类任务 结语 用Python实现用于分类任务的简单神经网络 一年前接触
  • 分类算法概述

    摘 要 分类是数据挖掘 机器学习和模式识别中一个重要的研究领域 通过对当前数据挖掘中具有代表性的优秀分类算法进行分析和比较 总结出了各种算法的特性 为使用者选择算法或研究者改进算法提供了依据 1 概述分类是一种重要的数据挖掘技术 分类的目的