基于weka的数据库挖掘➖聚类方法#DBSCAN算法

基于weka的数据库挖掘➖聚类方法#DBSCAN算法

关于作者

  • 作者介绍

🍓 博客主页:作者主页

🍓 简介:JAVA领域优质创作者🥇、一名初入职场小白🎓、曾在校期间参加各种省赛、国赛,斩获一系列荣誉 🏆

🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻


目标

掌握weka中数据聚类的具体流程

内容

利用weka实现K-means聚类和DBSCAN聚类

密度聚类方法

密度聚类方法的指导思想是,只要一个区域中的点的密度大于某个域值,就把它加到与之相近的聚类中去。

这类算法能克服基于距离的算法只能发现"类圆形"的聚类的缺点,可发现任意形状的聚类,且对噪声数据不敏感但计算密度单元的计算复杂度大,需要建立空间索引来降低计算量,且对数据维数的伸缩性较差。

这类方法需要扫描整个数据库,每个数据对象都可能引起一次查询,因此当数据量大时会造成频繁的I/O操作。代表算法有:DBSCAN、OPTICS、DENCLUE算法等。

DBSCAN算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在有"噪声"的空间数据库中发现任意形状的聚类。

概念初识

对象的ε-邻域:给定对象在半径ε内的区域。

核心对象:如果一个对象的ε-邻域至少包含最小数目MinPts个对象,则称该对象为核心对象。

例如,在图5-6中,ε=1cm,MinPts=5,q是一个核心对象。

直接密度可达:给定一个对象集合D,如果p是在q的ε-邻域内,而q是一个核心对象,我们说对象p从对象q出发是直接密度可达的。

例如,在图5-6中,ε=1cm,MinPts=5,q是一个核心对象,对象p从对象q出发是直接密度可达的。


密度可达 :如果存在一个对象链p1,p2,...,p~n~,p~1~=q,p~n~=p,对pi∈D,(1<=i<=n),p~i+1~是从p~i~关于ε和MitPts直接密度可达的,则对象p是从对象q关于ε和MinPts密度可达的。

例如,在图5-7中,ε=1cm,MinPts=5,q是一个核心对象,p1是从q关于ε和MitPts直接密度可达,p是从p~1~关于ε和MitPts直接密度可达,则对象p从对象q关于ε和MinPts密度可达的。


密度相连:如果对象集合D中存在一个对象o,使得对象p和q是从o关于ε和MinPts密度可达的,那么对象p和q是关于ε和MinPts密度相连的。

噪声:一个基于密度的簇是基于密度可达性的最大的密度相连对象的集合。不包含在任何簇中的对象被认为是"噪声"。

DBSCAN通过检查数据集中每个对象的ε-邻域来寻找聚类。如果一个点p的ε-邻域包含多于MinPts个对象,则创建一个p作为核心对象的新簇。然后,DBSCAN反复地寻找从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并。当没有新的点可以被添加到任何簇时,该过程结束。具体如下:

DBSCAN算法描述

输入:包含n个对象的数据库,半径ε,最少数目MinPts。

输出:所有生成的簇,达到密度要求。

  1. REPEAT
  2. 从数据库中抽取一个未处理过的点;
  3. IF 抽出的点是核心点 THEN找出所有从该点密度可达的对象,形成一个簇
  4. ELSE 抽出的点是边缘点(非核心对象),跳出本次循环,寻找下一点;
  5. UNTIL 所有点都被处理;

下面给出一个样本事务数据库(见左表),对它实施DBSCAN算法。 根据所给的数据通过对其进行DBSCAN算法,以下为算法的步骤(设n=12,用户输入ε=1,MinPts=4)

步骤:

第1步,在数据库中选择一点1,由于在以它为圆心的,以1为半径的圆内包含2个点(小于4),因此它不是核心点,选择下一个点。

第2步,在数据库中选择一点2,由于在以它为圆心的,以1为半径的圆内包含2个点,因此它不是核心点,选择下一个点。

第3步,在数据库中选择一点3,由于在以它为圆心的,以1为半径的圆内包含3个点,因此它不是核心点,选择下一个点。

第4步,在数据库中选择一点4,由于在以它为圆心的,以1为半径的圆内包含5个点,因此它是核心点,寻找从它出发可达的点(直接可达4个,间接可达2个),聚出的新类{1,3,4,5,9,10,12},选择下一个点。

第5步,在数据库中选择一点5,已经在簇1中,选择下一个点。

第6步,在数据库中选择一点6,由于在以它为圆心的,以1为半径的圆内包含3个点,因此它不是核心点,选择下一个点。

第7步,在数据库中选择一点7,由于在以它为圆心的,以1为半径的圆内包含5个点,因此它是核心点,寻找从它出发可达的点,聚出的新类{2,6,7,8,11},选择下一个点。

第8步,在数据库中选择一点8,已经在簇2中,选择下一个点。

第9步,在数据库中选择一点9,已经在簇1中,选择下一个点。

第10步,在数据库中选择一点10,已经在簇1中,选择下一个点。

第11步,在数据库中选择一点11,已经在簇2中,选择下一个点。

第12步,选择12点,已经在簇1中,由于这已经是最后一点所有点都以处理,程序 终止。

具体实现

1)打开weka,加载weather.numeric.arff,切换至Cluster标签页,选择SimpleKMeans算法,保持默认参数,生成2个簇,单击Ignore attributes按钮,选择play属性为忽略属性,单击start运行。

2)得到如下结果,最终的聚类结果以表格形式显示(如下图):行对应属性名,列对应簇中心。如果是数值型属性,则显示平均值,若是标称型属性,显示簇所在列对应的属性标签。

3)选中结果列表中的SimpleKmeans算法,右键,选择Visualize cluster assignment,弹出可视化窗口,点击❌,查看每个点的情况,思考聚类的准确性

可以发现,聚类效果

4)加载鸢尾花,切换到cluster,choose-weka-DBSCAN,设置DBSCAN的参数如下,半径为0.2,minPoint为5

5)同样忽略类别属性,单击ignore atrributes,,选择class属性,,单击start运行,得如下结果,簇0有49个实例,簇1有98个实例,还有三个实例未能聚类,根据原始样本,我们知道总共有三个类别,山鸢尾、变色鸢尾、维吉尼亚鸢尾,但现在聚类结果聚成了两个簇

6)故更改DBSCAN的参数,将minPoints设为2,再观察结果,会发现生成了三个簇(自行完成),但根据原始文本,每个类别有 50个样本,所以聚成的结果依然不准确,分析结果,思考有多少样本被分错了

7)更改DBSCAN的参数,将minPoints设为2,选中结果列表中的DBSCAN算法,右键,选择Visualize cluster assignment,弹出可视化如下窗口

8)点击可视化窗口中的某一个点(叉号会弹出具体这个点的信息,

要求解释这个点的含义

所学新知

K-Means的主要优点在于原理比较简单,实现也是很容易,收敛速度快。聚类效果较优。算法的可解释度比较强。主要需要调参的参数仅仅是簇数k。DBSCAN聚类算法与K-Means 比较起来,不需要输入要划分的聚类个数;聚类簇的形状没有偏倚;可以在需要时输入过滤噪声的参数。DBSCAN可以处理不同大小和不同形状的簇,K-means很难处理非球形的簇和不同形状的簇。K-means可以发现不是明显分离的簇,即便簇有重叠也可以发现,但是DBSCAN会合并有重叠的簇。

相关推荐
江_小_白30 分钟前
自动驾驶之激光雷达
人工智能·机器学习·自动驾驶
yusaisai大鱼2 小时前
TensorFlow如何调用GPU?
人工智能·tensorflow
weixin_466202782 小时前
第31周:天气识别(Tensorflow实战第三周)
分类·数据挖掘·tensorflow
珠海新立电子科技有限公司4 小时前
FPC柔性线路板与智能生活的融合
人工智能·生活·制造
IT古董5 小时前
【机器学习】机器学习中用到的高等数学知识-8. 图论 (Graph Theory)
人工智能·机器学习·图论
曼城周杰伦5 小时前
自然语言处理:第六十三章 阿里Qwen2 & 2.5系列
人工智能·阿里云·语言模型·自然语言处理·chatgpt·nlp·gpt-3
山海青风5 小时前
使用 OpenAI 进行数据探索性分析(EDA)
信息可视化·数据挖掘·数据分析
余炜yw5 小时前
【LSTM实战】跨越千年,赋诗成文:用LSTM重现唐诗的韵律与情感
人工智能·rnn·深度学习
莫叫石榴姐6 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
如若1236 小时前
利用 `OpenCV` 和 `Matplotlib` 库进行图像读取、颜色空间转换、掩膜创建、颜色替换
人工智能·opencv·matplotlib