python 调用sklearn.cluster.KMeans聚类

数据集:

代码:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans

filePath = 'F:/kdata.csv'

data_csv = pd.read_csv(filePath)
x = np.array(data_csv)[:,1:]
t = list(data_csv.iloc[0:0])[1:] #获取列标题
np.set_printoptions(suppress=True) #不使用科学计数法

est = KMeans(n_clusters=12,init='k-means++',n_init=20,max_iter=1000,
             precompute_distances='auto') #构造聚类器
est.fit(x) #计算k-means聚类
kc = est.cluster_centers_ #计算质心
y_kmeans = est.predict(x) #给每个样本计算最接近的簇
appraise = est.inertia_ #计算每个点到其簇的质心距离之和
data_csv['cluster'] = est.labels_ #生成分类标签

print(y_kmeans,kc,'\n')
print(kc.shape,y_kmeans.shape,np.shape,'\n')
print(appraise)

data_csv.to_csv('F:/out.csv',index=1) #追加分类标签
data_kc = pd.core.frame.DataFrame(kc,columns=t)
data_kc.to_csv('F:/out_kc.csv') #保存质心

ax = plt.figure().add_subplot(111,projection='3d')
ax.scatter(x[:,0],x[:,1],x[:,2],c=y_kmeans,s=30,cmap='rainbow')
plt.show()

散点图:

 Kmeans缺点:

  • 需要给定K值,K值不同,结果也不一样
  • 对初始簇中心点很敏感(Kmeans++优化初始中心点的选择)
  • 不适合非凸集、非正态分布或者大小差别较大的簇
  • 离群值对模型的影响比较大

sklearn.cluster.KMeans采用欧式距离度量相似度

参考文献:K-means和K-means++的算法原理及sklearn库中参数解释、选择

K-Means算法、层次聚类、密度聚类及谱聚类方法详述

 

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sklearn.cluster.kmeans 是 scikit-learn 中的一个聚类算法,它通过将给定的数据分组,以最小化每个组内数据之间的均方差来寻找最优的聚类结果。它的用法是,首先初始化一些类中心,然后将每个点分配到最近的类中心,接着更新每个类中心,直到最终的聚类结果满足停止条件。 ### 回答2: sklearn.cluster.kmeans是scikit-learn库中的一个聚类算法模块,用于实现K均值聚类算法。K均值聚类是一种无监督学习算法,用于将数据集划分为K个不同的类别。 使用sklearn.cluster.kmeans进行聚类时,首先需要导入相关的库和模块。然后通过实例化一个KMeans对象,可以设置一些参数,例如聚类的个数K,最大迭代次数等。之后,可以使用fit方法来拟合模型并进行聚类,传入待聚类的数据集。 聚类完成后,可以使用kmeans.labels_属性获取每个样本所属的类别。此外,还可以使用kmeans.cluster_centers_属性获取每个类别的中心点坐标。 sklearn.cluster.kmeans还可以用于预测新的数据点所属的类别。可以使用predict方法来进行预测,传入待预测的数据集即可。 在使用K均值聚类时,需要注意一些问题。首先,需要合理选择K的值,过小或过大都可能导致聚类效果不佳。其次,K均值算法对初始聚类中心的选择非常敏感,不同的初始值可能得到不同的结果。因此,建议多次运行算法并选择效果最好的结果。 总而言之,sklearn.cluster.kmeans提供了一种简单而有效的K均值聚类算法实现,可以用于数据聚类的任务。通过调整相关参数和合理使用API,可以实现对数据集的划分和预测。 ### 回答3: sklearn.cluster.kmeansPython编程语言中用于执行聚类分析的Scikit-learn库中的一个函数。聚类分析是一种无监督学习技术,用于将数据集中的样本划分为若干个类别或簇。k-means算法是一种常用的聚类算法,它通过将数据点分配给离其最近的质心,并迭代更新质心位置来确定聚类的最佳位置。 使用sklearn.cluster.kmeans函数进行聚类分析需要提供以下参数: 1. n_clusters(必需):指定要生成的聚类数量。通常通过观察数据来选择合适的聚类数量。 2. init(可选):指定初始化质心的方法。默认是'k-means++',表示使用一种更聪明的初始化方法,以提高算法的收敛速度。 3. n_init(可选):指定重新运行算法的次数,并选择产生最佳结果的运行。默认是10次,可以根据需要进行调整。 4. max_iter(可选):指定算法的最大迭代次数。默认是300次,可以根据数据集的大小和复杂度进行调整。 5. random_state(可选):指定用于初始化质心的随机种子。默认为None,表示使用不同的随机种子来运行算法。 调用sklearn.cluster.kmeans函数后,可以使用.fit方法来对数据进行聚类分析。然后,可以通过.cluster_centers_属性来获取最终得到的质心位置。通过.predict方法可以对新样本进行预测,并返回它们所属的簇。 需要注意的是,k-means算法对数据分布的假设是各个簇的大小相等,并且每个簇的数据点服从正态分布。如果数据不符合这些假设,可能会导致算法表现不佳。因此,在使用k-means算法进行聚类分析时,需要根据具体情况进行结果的解释和评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值