第九章.聚类算法—K-MEANS,Mini Batch K-Means
创始人
2025-06-01 10:12:28
0

第九章.聚类算法

9.1 聚类算法

1.聚类和分类的区别:

分类样本是带标签的,聚类的样本是没有标签的。
在这里插入图片描述

2.K-MEANS

1).算法思想

以空间中k个点为中心进行聚类,对最靠近他们的对象归类,通过迭代的方法,逐次更新各据类中心值,直至得到最好的据类结果。

2).算法流程

1).先从没有标签的元素集合A中随机取k个元素,作为k个子集各自的重心。

2).分别计算剩下的元素到k个子集重心的距离(可以使用欧氏距离),根据距离将这些元素分别划归到最近的子集

3).根据聚类结果,重新计算重心(重心的计算方式:计算子集中所有元素各个维度的算数平均数)

4).将集合A中所有元素按照新的重心重新聚类

5).重复步骤4,直至聚类结果不在发生变化。

3).示例分析

  • 题干
    假设有4个坐标点(1,1),(2,1),(4,3),(5,4),取(1,1),(2,1)为两个分类中心点。

  • 计算:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 迭代过程中聚类的变化示意图:
    在这里插入图片描述

4).示例

·测试数据链接: kmeans.txt

·代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans# 绘制等高线图
def coutour(data, model, centers):x_min, x_max = data[:, 0].min() - 1, data[:, 0].max() + 1y_min, y_max = data[:, 1].min() - 1, data[:, 1].max() + 1# 生成网格矩阵xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))z = model.predict(np.c_[xx.ravel(), yy.ravel()])  ## ravel与flatten类似,多维数据转一维。flatten不会改变原始数据,ravel会改变原始数据zz = z.reshape(xx.shape)# 等高线图contour = plt.contourf(xx, yy, zz)# 画出各个数据点,用不同的颜色表示分类mark = ['or', 'ob', 'og', 'ok']for i, d in enumerate(data):  # 用于for循环中得到计数,并获得索引和值plt.plot(d[0], d[1], mark[result[i]])mark = ['*r', '*b', '*g', '*k']for i, center in enumerate(centers):plt.plot(center[0], center[1], mark[i], markersize=20)# 加载数据
data = np.genfromtxt('F:\\kmeans.txt', delimiter=' ')# 设置k值
k = 4# 训练模型
model = KMeans(n_clusters=k, n_init=4)
model.fit(data)# 分类重心坐标
centers = model.cluster_centers_
print(centers)# 预测结果
result = model.predict(data)#result = model.labels_coutour(data, model, centers)
plt.show()

·结果展示
在这里插入图片描述

3.Mini Batch K-Means

Mini Batch K-Means算法是K-Means算法的变种,采用小批量的数据子集减小计算时间。这里所谓的小批量是指每次训练算法时所随机抽取的数据子集,采用这些随机产生的子集进行训练算法,大大减小了计算时间,结果一般只略差于标准算法。

1). K-Means & Mini Batch K-Means差异

①.Mini Batch K-Means的数据更新是在每一个小的样本集上

②.Mini Batch K-Means比K-Means有更快的收敛速度,但同时也降低了聚类效果,但在实际项目中却表现得不明显。
在这里插入图片描述

2).算法的迭代流程

①.从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心。

②.更新质心

3).示例

·测试数据链接: kmeans.txt

·代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import MiniBatchKMeans# 绘制图像
def Imageshow(data, model, centers):x_min, x_max = data[:, 0].min() - 1, data[:, 0].max() + 1y_min, y_max = data[:, 1].min() - 1, data[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))z = model.predict(np.c_[xx.ravel(), yy.ravel()])zz = z.reshape(xx.shape)# 绘制等高线contour = plt.contourf(xx, yy, zz)# 预测结果result = model.labels_# 绘制散斑点mark = ['or', 'og', 'ob', 'ok']for i, d in enumerate(data):plt.plot(d[0], d[1], mark[result[i]])# 绘制分类重心mark = ['*r', '*g', '*b', '*k']for i, center in enumerate(centers):plt.plot(center[0], center[1], mark[i], markersize=20)# 载入数据
data = np.genfromtxt('F:\\kmeans.txt', delimiter=' ')# 设置K值
k = 4# 训练模型
model = MiniBatchKMeans(n_clusters=k, n_init=4)
model.fit(data)# 分类重心坐标
centers = model.cluster_centers_
print(centers)Imageshow(data, model, centers)
plt.show()

·结果展示
在这里插入图片描述

4.K-Means算法存在的问题

1).对k个初始质心的选择比较敏感,容易陷入局部最小值。

  • 例如,我们上面的算法运行的时候,有可能会得到不同的结果,如下面这两种情况,K-means也是收敛了, 只是收敛到了局部最小值:
    在这里插入图片描述

2).K值的选择是用户指定的,不同的k得到的结果会有挺大的不同

  • 如下图所示,左边是k=3的结果,蓝色的簇太稀疏了,蓝色的簇应该可以再划分成两个簇。右边 是k=5的结果,红色和蓝色的簇应该合并为一个簇。
    请添加图片描述
    3).存在局限性,如下面这种非球状的数据分布就搞不定了(根据密度聚类可以解决这种问题)
    请添加图片描述

4).数据比较大的时候,收敛会比较慢(可以使用Mini Batch K-Means来可以解决这种问题)

5.K-Means算法优化

1).使用多次的随机初始化,计算每一次建模得到的代价函数 的值,选取代价函数最小结果作为聚类结果。

①.公式
在这里插入图片描述

  • 参数说明:
    xi:某个样本点
    uc(i):某个样本点所属类别的质心
    || ||:取模

2).使用肘部法则来选择k的值

①.图像
在这里插入图片描述

  • 不同的k值,对应不同的代价函数值,并且k值越大代价函数值越小,若存在一个肘部“Elbow”,则肘部所对对应的k值即为所选k值

  • 第二幅图中的肘部不太明显,需要根据具体的需要具体分析。

相关内容

热门资讯

走进小城看消费丨江西资溪:低碳...   夏日时节下午4点,江西省抚州市资溪县大觉山景区漂流终点依然热闹。来自南昌的游客余鑫漂流结束后没有...
【中原晨会0625】市场分析专... 来源:市场资讯 (来源:中原证券研究所) 本期重点研报目录 【中原策略】市场分析:电子半导体领涨 ...
南向资金连买4日!低费率+可月... 6月25日早盘,港股红利资产震荡整理。截至11时14分,港股红利低波ETF招商(520550)下跌0...
618成交破百万!紫荆花用一套... 一年一度的618年中大促,是消费市场的晴雨表,也是品牌间最激烈的角力场。当各大品牌在直播间里铆足了劲...
原创 黄... 2026年6月25日的国际金价已经从前期的5500美元高点跌到4200美元下方,累计跌幅超过22%,...
英伟达CEO:Vera Rub... 截至9:38,中证半导体材料设备主题指数(931743)涨2.36%创新高;权重股中,中微公司涨3....
再被催债16亿!“钢铁大王”戴... 澎湃新闻记者 贺梨萍 因“铁本事件”入狱五年的戴国芳重返钢铁行业,但他并没有完成从阶下囚再到“钢铁大...
周三原油价格下跌 随着美国和伊朗在和平谈判中取得进展,越来越多的油轮公开穿越霍尔木兹海峡,原油在战时的价格上涨已经蒸发...
这种蛋白是大脑衰老的开关 这种蛋白是大脑衰老的开关 清晨,假设一位五十岁左右的王女士发现自己常常把手机放在熟悉的抽屉里又找不到...
信通院牵头算力Token出海生... 盘面上,截至11:04,中证科创创业50指数(931643)涨1.68%,创历史新高;权重股中,芯原...
海外 774 亿营收背后:日本... 文 | 游戏价值论 6月23日,彭博社报道了腾讯正在围绕出售多家日本游戏工作室少数股权开展谈判,包...
餐饮“抢人”大战:把店开到公交... 作者 |餐饮老板内参 内参君 医院、公交站、演唱会…餐饮品牌,正在无孔不入 在北京儿童医院,肯德基...
快讯 | 外资扫货!陈翊庭:港... 港交所行政总裁陈翊庭在接受《中国证券报》专访时指出,国际资本对中国资产的看法已彻底扭转,布局中国市场...
2777.77元!A股“股王”... 25日早盘,昨天创下历史新高的A股“股王”联讯仪器,今天上午继续走强,盘中股价再度刷新历史新高。 截...
原创 今... 欧洲自己的媒体直接下结论,欧盟衰退躲不掉,内部分裂拦不住,现在就连欧洲顶尖工业巨头,都偷偷在用中国的...
黄仁勋股东大会放言:本轮AI基... 在当地时间6月24日的英伟达(NVDA.O)2026年度股东大会上,股东批准了该公司全部10名董事会...
国际油价大跌 新华社消息, 纽约原油期货主力合约价格24日盘中跌破每桶70美元,为伊朗战事爆发以来首次。 市场分析...
马云带队插秧,什么信号? 一场别开生面的“务农”,让外界看到了一个不一样的阿里巴巴。 近日,阿里巴巴合伙人、高德董事长刘振飞在...
全球最大产能,最高丰度达99.... 本文转自【科技日报】; 6月23日,高丰度硼-10同位素技术暨产业化成果发布会在山东省东营市举办,全...
黄金大跳水!金饰克价年内暴跌近... 25日,现货黄金盘中震荡,截至发稿,报3985.070美元/盎司,跌0.17%。 当地时间24日,...