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

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

相关内容

热门资讯

京东美团“暗战”具身智能,战火... 在科技赛道的激烈角逐中,具身智能正成为巨头们争夺的新焦点。王兴之后,刘强东也在具身智能领域强势出击。...
“未来已来”指数涨跌不一,关注... 截至收盘,国证机器人产业指数上涨2.1%,中证新能源指数上涨1.5%,中证人工智能主题指数下跌0.0...
“未来能源”指数上涨,关注新能... 截至收盘,中证上海环交所碳中和指数上涨1.9%,中证光伏产业指数上涨1.6%,中证新能源指数上涨1....
四川银行控股长城华西银行 助力... 长城华西银行实控权将花落四川银行。6月26日,中国长城资产公司及其全资子公司在北京产权交易所挂牌转让...
汇添富红利智选混合发起式A:2... AI基金汇添富红利智选混合发起式A(021515)披露2025年二季报,第二季度基金利润67.55万...
交通运输部:将谋划实施一批交通... 【大河财立方消息】7月21日,国务院新闻办公室举行“高质量完成‘十四五’规划”系列主题新闻发布会,介...
站在减肥药风口上的诺泰生物是怎... 界面新闻记者 | 黄华 界面新闻编辑 | 谢欣 7月19日,诺泰生物公告称,公司于7月18日收到...
原创 7... 周一,沪深A股主要的大盘指数分化明显,上证指数走强,创业板指数次之,科创50指数较弱。盘面上看,多数...
鸿星科技闯关沪主板,2023年... 作为苹果的重要代工厂,富士康在全球电子产业链中占据重要地位,一些给富士康供货的公司也陆续上市。汇成真...
小心,英伟达没安好“芯”! 黄仁勋在北京穿唐装,中文演讲,以及英伟达获得美国政府许可,可以重新向中国销售其专为中国设计的AI芯片...
专访清华大学靳卫萍:稳定币的关... 编者按:随着美国总统特朗普签署《天才法案》(Genius Act),中国香港的《稳定币条例》即将于8...
贺博生:7.21黄金原油晚间行... 做投资就像打一场战役,一定要在战役开始前定好策略,不仅要在战场上有优势的时候要怎么扩大优势,趁胜追击...
【2025链博会】前海粤十史伟... 【环球网科技报道 记者 秦耳】谈及食品消费市场近几年的变化,业内人大多会提到“保质期革命”。如果仔细...
董事会大换血,新实控人13亿元... 主营谷朊粉、酒精的上市公司包头华资实业股份有限公司(简称“华资实业”),迎来新“主人”。日前,其董事...
【财经早晚报】特朗普开始审查马... 今天值得关注的国内外新闻有: 1. 中国网民规模已达11.23亿人,中国互联网普及率达79.7% 2...
太平改革红利精选:2025年第... AI基金太平改革红利精选(005270)披露2025年二季报,第二季度基金利润334.79万元,加权...
博时基金赵宪成:资金面与基本面... 港股市场正在受到越来越多投资者的关注。在博时基金境外投资部基金经理赵宪成看来,今年上半年港股市场表现...
小红书聚光平台广告竟价原理分享... 作为小红书官方的一站式广告投放平台,“聚光”是广告主实现“产品种草、商品销量、客资收集、直播推广、抢...
原创 除... 2023年7月,咱们国家商务部,轻描淡写地发了个公告,说要对两种叫“镓”和“锗”的金属搞个出口管制。...
富达基金董事长变更;张坤最新持... 天赐良基日报第691期 一、今日基金新闻速览 1、富达基金董事长变更 近日,富达基金公告称,XIA...