易语言资源网 - 做最全的易语言资源下载社区
<易语言软件开发工程师>特训 第14期(预报名) 精易论坛授权登录

【精易首发】【k-means】【聚类】【非监督学习】【算法】   [复制链接]

    2022-08-13 09:06:55
    高级教程源码
    易语言资源网
    525 次浏览
    来源链接

闲着没事花了点时间写了个【k-means】聚类算法演示(示例),论坛上好像没有,分享一下

什么是聚类?

说到聚类,应先理解聚类和分类的区别,很多业务人员在日常分析时候不是很严谨,混为一谈,其实二者有本质的区别。

分类:分类其实是从特定的数据中挖掘模式,作出判断的过程。比如Gmail邮箱里有垃圾邮件分类器,一开始的时候可能什么都不过滤,在日常使用过程中,我人工对于每一封邮件点选“垃圾”或“不是垃圾”,过一段时间,Gmail就体现出一定的智能,能够自动过滤掉一些垃圾邮件了。这是因为在点选的过程中,其实是给每一条邮件打了一个“标签”,这个标签只有两个值,要么是“垃圾”,要么“不是垃圾”,Gmail就会不断研究哪些特点的邮件是垃圾,哪些特点的不是垃圾,形成一些判别的模式,这样当一封信的邮件到来,就可以自动把邮件分到“垃圾”和“不是垃圾”这两个我们人工设定的分类的其中一个。

聚类:聚类的目的也是把数据分类,但是事先我是不知道如何去分的,完全是算法自己来判断各条数据之间的相似性,相似的就放在一起。在聚类的结论出来之前,我完全不知道每一类有什么特点,一定要根据聚类的结果通过人的经验来分析,看看聚成的这一类大概有什么特点。

聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来。

K-Means

聚类算法有很多种(几十种),K-Means是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。

下面,我们描述一下K-means算法的过程,为了尽量不用数学符号,所以描述的不是很严谨,大概就是这个意思,“物以类聚、人以群分”:

  • 首先输入k的值,即我们希望将数据集经过聚类得到k个分组。
  • 从数据集中随机选择k个数据点作为初始大哥(质心,Centroid)
  • 对集合中每一个小弟,计算与每一个大哥的距离(距离的含义后面会讲),离哪个大哥距离近,就跟定哪个大哥。
  • 这时每一个大哥手下都聚集了一票小弟,这时候召开人民代表大会,每一群选出新的大哥(其实是通过算法选出新的质心)。
  • 如果新大哥和老大哥之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。
  • 如果新大哥和老大哥距离变化很大,需要迭代3~5步骤。

程序演示:

随机生成点集,并自动聚合。

先看效果图



点我下载 (已有 20 次下载)

引用模块





引用支持库


源码文件名 支持库文件名 支持库标识
k-means.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
多线程支持库 2.0 5F99C1642A2F4e03850721B4F5D7C3F8
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0
扩展界面支持库一 2.0 27bb20fdd3e145e4bee3db39ddd6e64c


[错误报告]   上一篇:输入法中英文切换纯源码2.0...     下一篇:【nlohmann json】为火山新增...