第九章.聚类算法—K-MEANS,Mini Batch K-Means
创始人
2025-06-01 11:27:27
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值

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

相关内容

热门资讯

41辆电动车烧毁   □记者 钟起的  本报讯 5月31日1时11分,海口市消防救援支队119指挥中心接到群众报警称,...
周深祝毕业生们来财周深演唱快乐... 【#周深祝毕业生们来财##周深演唱快乐星球主题曲#】这是一个永远22岁的青春之夜。6月2日晚,在毕业...
合肥市首例存量商品房转作保障性... 星报讯 记者从合肥市房产部门了解到,近日,合肥市安居集团先后完成蜀山西宸原著项目的产权转移、资金支...
过敏性鼻炎患者应避免哪些食物以...   过敏性鼻炎是一种常见的过敏反应,它可能由多种因素触发,包括吸入性过敏原和食物过敏原。对于过敏性鼻...
希捷旗下 4TB 容量款 Xb... IT之家 6 月 2 日消息,希捷旗下一款高达4TB容量的Xbox存储扩展卡现已现身美国Best B...
招商局蛇口控股2024年年度股... 来源:中访网财观中访网数据  招商局蛇口工业区控股股份有限公司(以下简称“招商局蛇口”)于2025年...
“中国民间控烟第一人”走进央企... 星报讯 2025年5月31日是第三十八个“世界无烟日”。为了积极践行“健康中国”战略和“拒绝烟草诱...
保险金信托迎机构跑步入场 “前... 转自:经济日报6月1日,《关于规范信托公司信托业务分类的通知》(“三分类”新规)正式实施将满两周年。...
狼疮肾炎患者如何避免病情恶化?...   狼疮肾炎,作为系统性红斑狼疮的一种常见并发症,对患者的肾脏健康构成了严重威胁。对于狼疮肾炎患者而...
庆阳创业,庆阳创业补贴申领机构... 关于西峰区童得梦幼儿园等61所民办幼儿园评为普惠性幼儿园的公示根据《甘肃省普惠性民办幼儿园认定扶持管...
大学生赚钱小项目,一般来说在校... 一:豆腐店豆制品是人们日常饮食中不可缺少的,所以豆腐坊有很大的市场空间。加入一个好的农村项目,可以投...
创业养牛具备哪些条件,牛根生谈... 周文强:蒙牛创始人的成功是关键!-周文强_周文强官网_惠城集团官网周文强_惠城蔡上_周文强蔡上_惠城...
今天创业板注册新股,创业板注册... 自资本市场建立以来,改革的步伐并未停止,近期仍有加速的趋势。随着创业板注册制改革,监管拟合并深交所主...
文博会深圳展区:南山以科技赋能... “各位嘉宾好,欢迎莅临文博会深圳主舞台,我是南山区‘八大金刚’之一,数字华夏研发的机器人夏澜,我成长...
创业机会评价的三个维度,创业机... qvj2l q49k 0/ed 85 d2ae 32 cc 4 E3 db 60697 ...
创业板注册风险评估,创业板风险... ****。新浪。www.com//http://新浪。www.com/p http://新浪。ww...
没有本钱做点什么小生意赚钱,1... (结尾有视频链接)他来自湖北咸宁。放弃稳定的建筑装饰业务。2017年,我回老家创业。现在是当地生姜种...
股价上涨正反馈 银行可转债接连... 转自:经济日报近日,杭州银行发布关于提前赎回杭银转债的公告称,该行发行的杭银转债已触发强制赎回条件,...
创业指数股票行情,创业指数最新... 01走势分析昨天a股大跌,近3000只股票下跌,很多人对市场失去了信心。今天市场转红,近3000只股...
深夜!美股下跌,黄金白银原油飙... 北京时间6月2日晚间,美股低开低走。截至22:02,道琼斯跌0.89%,纳斯达克跌0.51%,标普5...