常用数据挖掘算法

article/2025/10/19 22:26:05

本文对数据挖掘的基础理论,做个框架性的总结概要,罗列一些通用的数据挖掘的算法和思路,对于自己来讲是一个回顾,同时也便于自己以后查阅。

频繁模式挖掘,关系挖掘,以及相互关系挖掘

所谓频繁模式挖掘,指的是比如在商品交易数据库记录中,找出一起出现的商品集合,这些商品集合出现的频率要高于一个阈值,这些经常出现的商品集合称之为频繁模式。

频繁模式的思路很简单,首先统计出每个单个商品出现的次数,这就构成了一个一维表。然后再根据一维表,商品两两组合产生一个二维表。然后再由二维表产生三维表,直至到n维表。其中可以利用apriori,进行剪枝,也就是说一维表中如果出现的频率低于阈值的商品,就可以直接去掉,应为包含该商品的高维商品集合的出现频率不可能高于该阈值,可以直接剪枝去掉。

频繁模式挖掘还有一种更加高效的方式,就是FP Growth,该方法通过扫描一遍数据库,在内存中构造一颗FP tree,基于这棵树就可以产生所有的频繁模式。很显然FP Growth算法的效率要高很多,但是其缺陷也很明显,在内存中维护一颗FP tree的开销也是很大的。为了解决这个问题,一个直接的思路是将数据库水平分表到各台机器上,在各台机器上执行本地的FP Growth,然后再将各台机器上的结果汇总起来,得到最终的FP Growth的结果。

所谓关系挖掘,值得是挖掘出各个项目之间的因果关系。关系挖掘的基础是频繁模式挖掘,通过频繁模式挖掘,很容易得出关系,举例就很容易明白,比如我们得到一个频繁集合:

 

那么通过排列组合可以得到l的子集集合:

 

那么很容易得到下面的推理集合,也就是挖掘出的关系:

 

所有的关系挖掘本质上都是基于频繁模式推导出来的。

在关系挖掘中,有一种非常有用的关系模式挖掘:mining quantitative association rules。所谓quantitative association rules是这样一种关系模式:

 

该关系模式的挖掘,首先是确定我们所感兴趣的属性:quan1,quan2,cat,然后根据事先确定的间隔,将quan1,quan2按照一定的间隔划分成一定的catorgory,然后进行频繁模式挖掘,得出一些关系,然后将这些关系按照grid进行聚合,生成最后的关系模式。

通过关系挖掘挖出的关系中往往有很多不是非常有用,因此需要通过另外的指标排除一些这样的关系,这个指标就是correlation,如下:

 

Correlation是用来衡量A,B之间的相关性,从而排除那些没有意义的规则。

对于上述所提到的关系挖掘,有一种称之为constraint-based association mining,这是一种特殊的关系挖掘,它对于所挖掘出的条件加了一些限制条件,这些限制条件可能是由用户提出的,其主要目的是排除一些不感兴趣的关系。对于这种关系挖掘,最直接的办法先按照最普通的关系挖掘方法进行挖掘,然后利用条件来对结果进行。但是还有更好的方法,就是在挖掘的过程中利用这些条件,从而缩小整个挖掘过程中的search space,从而提高效率。这些限制条件分为这么几种:antimonotonic,monotonic,succinct,convertible,inconvertible,针对每一种的限制条件,都有一些通用的方法或策略来缩小挖掘的search space,可参阅相关资料。

分类和预测

分类树

分类树是一种很常用的分类方法,它该算法的框架表述还是比较清晰的,从根节点开始不断得分治,递归,生长,直至得到最后的结果。根节点代表整个训练样本集,通过在每个节点对某个属性的测试验证,算法递归得将数据集分成更小的数据集.某一节点对应的子树对应着原数据集中满足某一属性测试的部分数据集.这个递归过程一直进行下去。

该算法是数据挖掘中常用的一类方法。

贝叶斯分类器

贝叶斯分类的思想很简单,就是计算属性和分类之间的条件概率,选择使得条件概率最大的分类作为最终的分类结果,这是一种基于统计的分类方法,得到了广泛的引用。

贝叶斯分类器分为两种,一种是朴素贝叶斯分类器,它基于贝叶斯理论:

 

其中X代表特征向量, C代表分类.我们的目标就是找出使得这个后验概率最大的那个类.

 

其中需要注意的是X中的各个特征分量是分布独立的.这样就有:

 

 

 

朴素贝叶斯分类器最经典的应用场景就是垃圾邮件过滤。

朴素贝叶斯分类器的升级版本就是贝叶斯网络,因为朴素贝叶斯网络假设样本的特征向量的各个特征属性是独立的,但对于现实世界,这样的建模未必合理,因此有人就提出了贝叶斯网络,贝叶斯网络假设各个属性之间是存在条件概率的。贝叶斯网络是一个各个属性组成的有向拓扑网络,每条边代表条件概率,通过贝叶斯网络能够计算出各个属性相互组合的条件概率。

基于规则的分类器

这种分类器利用IF THEN的规则来进行分类。对于如何产生规则,有两种方法:

第一种方法,就是从决策树中生成规则。因为决策树天然的就是规则。

第二种方法,是采用Sequential Covering Algorithm,直接从训练样本中生成规则集。该方法的思路是一种general-to-specific的方法,该方法从一个空规则开始,然后向规则中依次逐渐增加属性测试条件,选择该属性测试值(也就是测试分界点,attr < val)的依据就是是否能够最大限度得改进规则的分类质量。

基于神经网络的分类器

神经网络分类器是依据属性构造一个网络拓扑结构,该拓扑结构的边具有权重值,我们的目的是不断得利用训练样本然后不断得更新神经网络的边权重值。然后利用该网络就可以得到输出的分类。

该算法模拟神经的组成结构,利用了单元之间的反馈机制。但该算法的缺点也很明显,网络拓扑结构的确定没有明确统一的方法论,很多只能靠规划者的经验,因此训练结果往往因人而异,限制了神经网络的使用。

支持向量机分类器

支持向量机是在训练样本空间中构造超平面来对样本进行分类,它的优势是对高维度不敏感。但效率较低,实施较为复杂。

关联分类器

关联分类器的思路很简单,前面我们提到频繁模式挖掘,我们将样本的某一属性的(属性,值)对作为一个条目,我们找出经常在一起出现的条目集合,然后找出这些频繁项目集合,这些频繁项目集合对应的样本集合中占主流的分类就作为关联规则的分类结果,该结果如下:

 

关联分类器有三种方法:CBA, CMAR和CPAR

Lazy Learner

Lazy Learner主要有两种分类器:Knn分类器和Cbr分类器。

Knn分类器思路很直接,找出和待分类样本最近的K的样本,然后将这k个样本中占主流的的类别作为分类结果分配给待分类样本。该分类器的关键在于如何确定k,一种思路是根据经验,另外一种思路是迭代,让k从1开始递增,计算每个k取值时对某一测试集的错误率,选择错误最小的那个k。另外一个关键就是如何快速得找出k个最近的邻居,这需要我们对各个样本点进行事先排序,并设计一个合适的数据结构,使得找出k个最近邻居的复杂度降为log|D|.

预测

所谓预测,就是根据既有的数据预测新出现的数据的预测值。预测有两种方法,线性回归和非线性回归。所谓线性回归,指的是

Y = b + wX 公式1

其中X可以是向量,比如(x1,x2),因此线性回归则变成

y=w0+w1*x1+w2*x2 公式2

对于公式1,其目标就是求出w向量。那么比较常用的方法就是最小二乘法,使得求出的w对于已有的样本使其方差和最小。方差和就是目标函数,目标函数就是自变量w的一个函数,通过求导求极值,很容易得到使得目标函数最小的w的值。通过一些软件包,如SAS,matlab,SPSS很容易做这种线性回归的w计算。

并不是所有的模型都是线性模型,实际的问题中很多模型是非线性的,比如多项式,如下

y = w0 +w1*x+w2*x*x + w3*x*x*x

解决这种问题的思路是将非线性模型转化为线性模型,然后再用线性回归的方法来解决。比如上面的多项式公式,我们令

x1=x x2=x*x x3=x*x*x

这样就变成了y = w0 + w1*x1 + w2*x2 + w3*x3,这就变成了线性回归的问题。

聚类

聚类是数据挖掘需要解决的另外一个问题,分类是我们知道确切的分类结果,知道我们需要将样本分成具体的哪几类。而聚类问题是实现不知道我们的样本具体属于哪些类别,而需要我们从样本中发掘出这些类别。下面谈几种较为通用的聚类方法谈谈。

基于分区的聚类法

该方法的一个典型的方法就是K-means,该方法非常简单,首先确定我们需要将数据样本分成多少个类,这个需要确定,我们称之为k。然后从样本中任意选择k个样本作为k个类的中心,然后计算每个样本到这k个中心的距离,把他们分配到最相近的类。这样就得到k个聚类,然后重新计算这k个聚类的中心,然后再重复前面的过程,直至没有样本被重新分配从而达到收敛。下面是k-means的伪码

 

 

基于层次的分类法

基于层次的分类法有两种:凝聚和分裂。

凝聚:它基于一种自底而上的策略,在最开始的时候,每个样本都代表一个聚类,然后计算两两之间的区分度,然后进行合并,这个合并一直按照这样的方式持续下去,直至所有的样本都被合并为一个类。

分裂:它基于一种自上而下的策略,在最开始的时候,所有的样本都是一个类,然后会依据一些区分方法,进行分裂,直至每个样本都分裂成一个聚类。

基于层次的分类法,其意义在于其他的聚类方法引入这种基于层次的思路,可以被改造成一个多阶段的的聚类方法,可以大大改进聚类的质量。

基于密度的分类法

这种方法的一个代表就是DBSCAN。要理解DBSCAN,首先要明白这么几种概念:

某一样本在e半径内的邻居称之为e-邻居。

如果某一样本的e-邻居个数大于某一最小值,那该样本被称之为核心样本。

如果q是核心样本,p是q的e-邻居,那么p是q的直接密度可达。

对于一个样本链p1,p2,..pn,如果p1=q,pn=p,pi+1是pi的直接可达,那么p就是q的密度可达。

如果p,q都是o的密度可达,那么p,q就是密度连通的。

有了这些概念,算法就很简单了,首先找出样本中所有的核心样本,那么基于这些核心样本,这些核心样本就代表某一个聚类。遍历这些核心样本,不断找到他们的密度可达的样本,其间某些样本就会被不断合并,直至所有的样本分类趋于稳定,不会再有新的点被加入各个聚类。

基于grid的聚类法

该算法的代表是STING,它比较晦涩,从表面上来看,它似乎不是一种显然的聚类法。首先我们先划分一些层次,每个层次上我们根据维度或者概念分层不同的cell,实际上这里的每个层次对应的是样本的一个分辨率。每个高层的cell在其下一层中被对应得划分成多个cell,每个cell我们都计算出它的统计信息,估计出它的分布。利用这样的结构,我们很容易进行查询,比如我们查询具有某些属性的样本,我们从上到下开始,根据cell的统计信息计算query在每个cell的置信区间,找出最大的那个cell,然后到下一层,依次直至到最底层。这样的好处是,我们不用计算所有的样本,算法每进一层都会抛弃不相关的样本,所需的计算量会越来越少,那么速度就会很快。

这种方法虽然不是一种显然的聚类法,但它确实可以用来聚类,因为query返回的样本实际上就是某一聚类。Query本质上于聚类问题是有等价性的。

基于模型的聚类法

这种聚类法可以用来增强K-means。样本假设可以被分为K个聚类,每个聚类可以被看成一种分布,比如高斯分布(高斯分布很符合K-means),K个聚类就是K个高斯分布模型,但我们不知道K个模型的具体参数。由于这是k个不同的高斯模型的混合体,因此每个样本实际上除了本身属性值之外还包含了一个隐藏变量(该隐藏变量用以表示该样本是由哪个高斯模型产生的),这实际上就是一个典型的EM算法的应用场景,除了估计这k个模型的参数,还需要估计隐藏变量。接下来就是利用EM来估计这些参数(模型参数和隐藏变量),估计出的隐藏变量就代表样本的聚类。

对高维样本进行聚类

CLIQUE是这种方法的一个代表,其思想是从低维到高维(1维到n维)进行查询,首先在低维空间内找到densentiy unit,然后在低维空间的densentiy unit中在继续寻找较高维空间中的densentiy unit。它本质上也是grid聚类法,它不是一种显然的聚类法,也是通过query来实现隐式得聚类。

有限制条件的聚类

这种聚类方法需要有一些特别的策略,需要针对不同场景,不能一概而论。这里就不讲了。

奇点检测

检测奇点非常有用,用于检测那些不同寻常的数据。比如最常用的思路是基于距离的,如果一个样本在一定距离内的邻居很少,那么他就可以被认为是奇点。另外还有基于统计概率的,基于密度的等等。


http://chatgpt.dhexx.cn/article/gE9C5AXO.shtml

相关文章

【数据挖掘】数据挖掘简介及十大经典算法

数据挖掘十大经典算法系列&#xff0c;点击链接直接跳转&#xff1a; 数据挖掘简介及十大经典算法&#xff08;大纲索引&#xff09; 1. 数据挖掘十大经典算法之——C4.5 算法 2. 数据挖掘十大经典算法之——K-Means 算法 3. 数据挖掘十大经典算法之——SVM 算法 4. 数据挖掘十…

数据挖掘十大经典算法 整理

数据挖掘的主要任务是分类、聚类、关联分析、预测、时序模式和偏差分析。 &#xff08;一&#xff09;C4.5 算法 C4.5算法是机器学习中的一种分类决策树算法&#xff0c;其核心是ID3 算法&#xff0c;C4.5算法继承了ID3算法的优点&#xff0c;并在以下几方面对ID3算法进行了改…

数据挖掘领域十大经典算法之—SVM算法(超详细附代码)

相关文章&#xff1a; 数据挖掘领域十大经典算法之—C4.5算法&#xff08;超详细附代码&#xff09;数据挖掘领域十大经典算法之—K-Means算法&#xff08;超详细附代码&#xff09;数据挖掘领域十大经典算法之—Apriori算法数据挖掘领域十大经典算法之—EM算法数据挖掘领域十大…

数据挖掘十大算法--Apriori算法

一、Apriori 算法概述 Apriori 算法是一种最有影响力的挖掘布尔关联规则的频繁项集的 算法&#xff0c;它是由Rakesh Agrawal 和RamakrishnanSkrikant 提出的。它使用一种称作逐层搜索的迭代方法&#xff0c;k- 项集用于探索&#xff08;k1&#xff09;- 项集。首先&#xff0c…

数据挖掘领域十大经典算法之—AdaBoost算法(超详细附代码)

相关文章&#xff1a; 数据挖掘领域十大经典算法之—C4.5算法&#xff08;超详细附代码&#xff09;数据挖掘领域十大经典算法之—K-Means算法&#xff08;超详细附代码&#xff09;数据挖掘领域十大经典算法之—SVM算法&#xff08;超详细附代码&#xff09;数据挖掘领域十大经…

数据挖掘十大经典算法(包括各自优缺点 / 适用数据场景)

本文主要分析皆来自其他资料&#xff0c;借用较为权威的总结来对我已经学习的这些经典算法做一个极为精简的概述&#xff08;根据自身经验有一定修改&#xff09;&#xff0c;另外同时附上机器学习实战中作者对各种算法的评价。另外机器学习实战这本书是本人看了这么多书籍或者…

一文弄懂数据挖掘的十大算法,数据挖掘算法原理讲解

​一个优秀的数据分析师不仅要掌握基本的统计、数据库、数据分析方法、思维、数据分析工具和技能&#xff0c;还要掌握一些数据挖掘的思路&#xff0c;帮助我们挖掘出有价值的数据&#xff0c;这也是数据分析专家和一般数据分析师的差距之一。 数据挖掘主要分为三类&#xff1a…

数据挖掘领域十大经典算法

一、什么是数据挖掘&#xff1f; 数据挖掘是人工智能和数据库领域研究的热点问题&#xff0c;所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种决策支持过程&#xff0c;它主要基于人工智能、机器学习、模式识别、…

数据挖掘的10大算法

一个优秀的数据分析师,除了要掌握基本的统计学、数据库、数据分析方法、思维、数据分析工具技能之外,还需要掌握一些数据挖掘的思想,帮助我们挖掘出有价值的数据,这也是数据分析专家和一般数据分析师的差距之一。 数据挖掘主要分为分类算法,聚类算法和关联规则三大类,这…

数据挖掘十大经典算法,你都知道哪些?

当前时代大数据炙手可热&#xff0c;数据挖掘也是人人有所耳闻&#xff0c;但是关于数据挖掘更具体的算法&#xff0c;外行人了解的就少之甚少了。 数据挖掘主要分为分类算法&#xff0c;聚类算法和关联规则三大类&#xff0c;这三类基本上涵盖了目前商业市场对算法的所有需求…

Vim编辑器(二)

Vim编辑器&#xff08;二&#xff09; 一、Vim编辑器概述1、vi编辑器2、vi与Vim编辑器 二、Vim编辑器的三种模式&#xff08;重点&#xff09;1、三种模式2、三种模式之间的关系&#xff1a;3、Vim打开文件的四种方式 三、命令模式1、光标移动① 光标移动到行首与行尾② 翻屏③…

Vim编辑器使用

什么是vim? Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。简单的来说&#xff0c; vi 是老式的字处理器&#xff0c;不过功能已经很齐全了&#xff0c;但是还是有可以进步的地方。 vim 则可以说…

Linux之vim编辑器的使用

目录 一、vim是什么&#xff1f; 试验1&#xff1a; 二.命令模式继承用法&#xff1a; vim命令模式的快捷键: 光标移动: vim文本复制相关操作: vim文本编辑操作: 三.末行模式命令用法 部分快捷键&#xff1a; 四.vim编辑器的配置原理 一、vim是什么&#xff1f; vi…

linux之《vim编辑器》

目录 一.vim的基本概念 ​编辑 命令模式&#xff08;Normal mode&#xff09; 插入模式&#xff08;Insert mode&#xff09; 末行模式&#xff08;last line mode&#xff09; 三者的转换图 二.vim的基本操作 1. 命令模式 2. 插入模式 3. 尾行模式 三. 简单vim配置…

Linux中vi与vim编辑器

初始化的Linux虚拟机是没有vim编辑器的&#xff0c;需要手动下载安装&#xff1a; vim安装命令&#xff1a; yum -y install vim vi profile 打开文件&#xff0c;并将光标置于第8行 vi 8 profile 打开最后一行 vi profile 按n查找下一个&#xff0c;按N查找上一个 打开…

Vim编辑器使用技巧

此文章适合学生、泛linux领域开发运维人员、linux爱好者阅读&#xff0c;希望通过此文章可以帮助大家更轻松的使用vim编辑器。 vim编辑器是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器&#xff0c;在Vi的基础上改进和增加了很多特性。vim是自由软件。vim普遍被推崇为…

编辑器之神——vim编辑器

编辑器之神——vim编辑器 一、vi介绍 Vi编辑器是所有Unix及Linux系统下标准的编辑器&#xff0c;类似于windows系统下的notepad&#xff08;记事本&#xff09;编辑器&#xff0c;由于在Unix及Linux系统的任何版本&#xff0c;Vi编辑器是完全相同的&#xff0c;因此可以在其他…

Linux之如何使用Vim编辑器

什么是Vim编辑器 Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。 Linux中必须要会使用Vim&#xff08;查看内容&#xff0c;编辑内容&#xff0c;保存内容&#xff09; 简单的来说&#xff0c; …

vim编辑器详细教程

目录 一&#xff0c;第一讲 第一节&#xff1a; 移动光标 第二节 vim的进入和退出 第三节 文本编辑之删除 第四节 文本编辑之插入 第五节 文本编辑之添加 第六节 编辑文件 第一讲小结 二&#xff0c;第二讲 第一节 删除类命令 第二节 更多删除类命令 第三节 关于命令和对象…

vim编辑器使用教程

文章目录 前言一、vim 的三种工作模式二、vim 基本操作1、编辑2、复制粘贴3、撤销4、跳转5、查找和替换6、自动缩进7、分屏8、其他 三、vim 配置文件 前言 vim 是 Linux 系统内置的「文本编辑器」&#xff0c;用于查看或编辑文件的内容&#xff0c;学会使用 vim 编辑器&#x…