python中kmeans求到类中心的平均距离_k-means算法python实现

1.k-means算法的思想

k-means算法是一种非监督学习方式,没有目标值,是一种聚类算法,因此要把数据划分成k个类别,那么一般k是知道的。

那么假设k=3,聚类过程如下:随机在数据当中抽取三个样本,当做三个类别的中心点(k1,k2,k3);

计算其余点(除3个中心点之外的点)到这三个中心点的距离,每一个样本应该有三个距离(a,b,c),然后选出与自己距离最近的中心点作为自己的标记,形成三个簇群;

分别计算这三个簇群的平均值,把三个平均值与之前的旧三个中心点比较,那么分两种情况:

如果相同:结束聚类。

如果不同:把这三个平均值当做新的中心点,然后重复第二步。

2.轮廓系数sci

那么,我们有一个评估标准:轮廓系数sci=(bi-ai)/max(bi,ai),其中i是样本,bi是i到其他簇群的所有样本距离的最小值,ai是i到本身簇群距离的平均值。需要注意:每一个样本都有一个轮廓系数,它的范围是[-1,1]。

那么以这个图为例,说明一下怎么计算轮廓系数:计算蓝1到自身类别的点距离的平均值ai;

计算蓝1分别到红、绿类别所有点的距离,求出平均值b1,b2,取其中最小值bi

那么蓝1的轮廓系数=(bi-ai)/max(bi,ai),我们希望做到外部距离最大化,内部距离最小化

sc

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
K-means是常用的聚算法之一,它的主要思想是将数据点分为K个簇,使得同一簇内的点相似度较高,不同簇之间的点相似度较低。在scikit-learnKMeans算法已经实现,可以方便地进行聚操作。 本文将介绍使用scikit-learnKMeans算法进行聚的步骤和实现方法,并介绍MiniBatchKMeans的使用。 ## 1. 数据准备 我们先生成一个随机数据集,用于演示KMeans: ```python import numpy as np # 生成随机数据 np.random.seed(0) X = np.random.randn(1000, 2) # 生成1000个二维数据点 ``` ## 2. 模型训练 接下来,我们使用KMeans模型对数据进行聚: ```python from sklearn.cluster import KMeans # 构建模型 kmeans = KMeans(n_clusters=3, random_state=0) # 训练模型 kmeans.fit(X) ``` 这里选择将数据分为3个簇,可以根据实际情况进行调整。训练完成后,我们可以查看簇中心点的位置: ```python print(kmeans.cluster_centers_) ``` 输出: ``` [[ 0.05161133 -0.96525049] [ 1.06359705 -0.02646225] [-0.9680658 0.04252211]] ``` ## 3. 预测和评估 训练完成后,我们可以使用训练好的模型对新数据进行预测: ```python # 预测新数据 y_pred = kmeans.predict(X) ``` 对于聚算法,我们可以使用轮廓系数(Silhouette Coefficient)评估聚效果。轮廓系数是一种衡量聚质量的指标,取值范围在[-1, 1]之间,越接近1表示聚效果越好。在scikit-learn,可以使用metrics.silhouette_score来计算轮廓系数: ```python from sklearn import metrics # 计算轮廓系数 score = metrics.silhouette_score(X, y_pred) print(score) ``` 输出: ``` 0.6011942331016043 ``` ## 4. MiniBatchKMeans KMeans算法的一个问题是它对于大规模数据的聚会比较慢。因此,scikit-learn还提供了MiniBatchKMeans算法,它可以加快聚速度。 MiniBatchKMeans的使用方法与KMeans似: ```python from sklearn.cluster import MiniBatchKMeans # 构建模型 mbkmeans = MiniBatchKMeans(n_clusters=3, random_state=0) # 训练模型 mbkmeans.fit(X) # 预测新数据 y_pred = mbkmeans.predict(X) # 计算轮廓系数 score = metrics.silhouette_score(X, y_pred) print(score) ``` 需要注意的是,MiniBatchKMeans算法在聚效果上可能会稍微劣于KMeans算法,但是速度更加快捷。在处理大规模数据时,可以优先考虑使用MiniBatchKMeans算法。 本文介绍了使用scikit-learnKMeans算法进行聚的步骤和实现方法,并介绍了MiniBatchKMeans的使用。在实际应用,可以根据实际情况选择不同的聚算法和参数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值