Kmeans算法及简单案例

Kmeans算法及简单案例

Kmeans算法流程

  1. 选择聚类的个数k.
  2. 任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心。
  3. 对每个点确定其聚类中心点。
  4. 再计算其聚类新中心。
  5. 重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变。)

Kmeans算法流程案例

将下列数据点用K-means方法进行聚类(这里使用欧式距离作为度量,K取值为2)
在这里插入图片描述
P1~P15这15个数据点的二维坐标图如下:
在这里插入图片描述

  1. 指定P1、P2为初始质心
    在这里插入图片描述

  2. 通过距离公式将分别计算各点到质心P1,P2数据点距离:
    在这里插入图片描述

  3. 选取距离较近的点整理进入相应队列:

  4. 计算出新一轮的每一簇队列中心(质心/平均值)

  5. 重复上述步骤2、3,开始新一轮迭代,算距离,取最近:
    算距离
    在这里插入图片描述
    取最近
    在这里插入图片描述
    再次选取距离较近的点整理进入相应队列:
    在这里插入图片描述

  6. 当每次迭代结果不变时,认为算法收敛,聚类完成:K-Means一定会停下,不可能陷入一直选质心的过程。
    在这里插入图片描述

代码案例1:不同数据集的k-means聚类

随机创建不同二维数据集作为训练集,并结合k-means算法将其聚类,你
可以尝试分别聚类不同数量的簇,并观察聚类效果:

  1. 生成数据
# 导包
import numpy as np
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs
# 生成数据展示
# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本4个特征,共4个簇,簇中心在[-1,-1], [0,0],[1,1], [2,2], 簇方差分别为[0.4, 0.2, 0.2]
X, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1,-1], [0,0], [1,1], [2,2]], cluster_std=[0.4, 0.2, 0.2, 0.2], 
                  random_state =9)
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()

在这里插入图片描述
2. 使用Kmeans聚类查看结果

from sklearn.cluster import KMeans

for k in range(2,6):
    y_pred = KMeans(n_clusters=k, random_state=9).fit_predict(X)
    plt.scatter(X[:, 0], X[:, 1], c=y_pred)
    plt.show()

在这里插入图片描述

SKlearn的K-means API参数简介:

KMeans中的默认参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Kmeans 总结:
事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。

  • 10
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值