第九章.聚类算法—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值

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

相关内容

热门资讯

央行报告:北京等9个省区市辖内... 中国人民银行12月26日发布的报告显示,2025年上半年,中国人民银行对3529家银行机构开展央行金...
轻松搞定!电子税务局申报智能自... 电子税务局申报智能自检功能可以在纳税人完成税(费)种申报后,辅助进行税(费)种之间的逻辑关系、合规性...
霸王茶姬美股大跌!深夜回应“咖... 北京时间12月26日晚间美股开盘后,霸王茶姬美股大跌,盘中一度跌超14%,股价创上市以来新低。截至发...
34万亿银行理财“增与降” Jenny(化名)是一名散户投资者,平时主要通过某股份行App进行投资理财。“我是风险厌恶型投资者,...
中国人民银行发布《银行间外汇市... 记者12月26日从中国人民银行获悉,为规范和发展外汇市场,扩大高水平对外开放,保障各方合法权益,防范...
有色金属真的还能买吗? 昨天有读者朋友问我怎么看待白银基金和白银价格的问题,基金那是瞎搞,价格我说这种东西的涨和跌没法预测,...
国家创业投资引导基金启动 为新... 转自:央视网 央视网消息:12月26日,国家创业投资引导基金启动仪式在北京举行。目前,引导基金已经出...
原创 商... 小李最近陪朋友逛商场,真切感受到了“花钱如流水”的压迫感:一件普通的棉质T恤标价近千元,一杯网红奶茶...
解码2025年独角兽资本盛宴 文|财华社 2025年行将落幕,回望这一年的全球资本市场,“疯狂独角兽”无疑是最贴切的标签。 估值...
上市两月,八马茶业狠狠摔了一跤 来源:市值榜 作者:贾乐乐,编辑:赵元 从上市首日开盘大涨86.7%,次日股价一度冲上115港元的...
明年3月起施行!国家发改委、国... 《电力中长期市场基本规则》印发。 为加快推进全国统一电力市场体系建设,规范电力中长期交易行为,切实保...
【企业风采】甘肃民营企业100... 企业风采 【企业风采】是展现企业创新成果、发展动态和创业故事的栏目,通过分享企业的成功案例、技术突...
马斯克调整特斯拉使命:加速世界... 快科技12月26日消息,近日,马斯克调整了特斯拉的使命,从“可持续的富足”调整为“惊人的富足。 马斯...
Bitget升级应用,整合加密... 原标题:Bitget 推出重大应用升级,为 1.2 亿用户打造统一界面, 整合加密货币、股票、链上与...
Z Waves|踩准每个拐点,... 图片来源:36Kr投资界 2025年秋,随着短视频战场的硝烟弥散,比起流量狂欢,高质量内容与沉浸式用...
商业火箭企业IPO迎利好!上市... 商业火箭企业IPO迎来重磅利好。12月26日晚间,上交所发布《上海证券交易所发行上市审核规则适用指引...
不起眼的6个习惯,正在悄悄榨干... 当我们还在纳闷,自己为什么攒不下钱的时候,不如反观一下自己的消费习惯。 刚开工资没有几天,钱就不知花...
王思聪商业版图收缩史:从王健林... 这回咱们的"国民老公"王思聪又成焦点了,但这次的消息属实让人大跌眼镜! 他旗下公司持有的股权居然要...
比特币减半在即:区块链钱包资产... 2024 年 4 月比特币第四次减半已进入倒计时,回顾历史数据,前三次减半后比特币价格均迎来显著增长...