K_means聚类

K-means是一种基于距离的聚类算法,通过迭代找到使总体误差最小的聚类划分。它对离群点敏感,需要预设k值且初始聚类中心的选择影响结果。算法包括随机选择初始质心,分配样本到最近的聚类,然后更新质心。轮廓系数是评估聚类质量的指标,值接近1表示聚类效果好。在Python实例中,K值为2时,K-means表现最佳。
摘要由CSDN通过智能技术生成

概述

K-means采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。

该算法认为类簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。


核心思想

通过迭代寻找k个类簇的一种划分方案,使得用这k个类簇的均值来代表相应各类样本时所得的总体误差最小。

k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。

k-means算法的基础是最小误差平方和准则,

其代价函数是:
这里写图片描述
其中,μc(i)表示第i个聚类的均值。


优点和不足

优点:

  1. 算法快速、简单;
  2. 容易解释
  3. 聚类效果较好
  4. 适用于高维数据

不足:

  1. 对离群点敏感,对噪声点和孤立点很敏感(通过k-centers算法可以解决)
  2. 需要选取合适的k值
  3. 初始聚类中心的选择,不同的初始点选择可能导致完全不同的聚类结果。

算法实现步骤

k-means算法是将样本聚类成 k个簇(cluster),其中k是用户给定的,其求解过程非常直观简单,具体算法描述如下:

  • 随机选取 k个聚类质心点

  • 重复下面过程直到收敛

  1. 对于每一个样例 i,计算其应该属于的类:
  2. 对于每一个类 j,重新计算该类的质心:
>>>from sklearn.cluster import KMeans
>>>from sklearn.metrics import silhouette_samples, silhouette_score
>>>import numpy as np
>>>X = np.array([[1, 2], [1, 4], [1, 0],
               [4, 2], [4, 4], [4, 0]])
>>>kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
# 训练模型,默认为'k-means ++':以智能方式为k均值聚类选择初始聚类中心,以加速收敛。

>>>print(kmeans.labels_)
[0 0 0 1 1 1] # 每个点的标签

>>>print(kmeans.cluster_centers_)
[[1. 2.]
 [4. 2.]] # 集群中心的坐标

>>>print(kmeans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值