python中的K-means算法模块

上一篇文章https://blog.csdn.net/weixin_44239541/article/details/90669949写到k-meann算法的思想,其实python中有专门的算法模块,一上篇文章中的简单数据为例,来实现。数据如图所示:使用sklearn实现分类:import pandas as pdimport numpy as npfrom sklearn....
摘要由CSDN通过智能技术生成

上一篇文章https://blog.csdn.net/weixin_44239541/article/details/90669949写到k-meann算法的思想,其实python中有专门的算法模块,一上篇文章中的简单数据为例,来实现。

数据如图所示:

使用sklearn实现分类:

import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
data = pd.read_csv(r'C:\Users\Administrator\Desktop\company.csv', encoding='gbk')

x = data[['平均消费周期(天)','平均每次消费金额']]

# 聚类实现
# 进行分类,分为三类
kms = KMeans(n_clusters=3)
# 进行聚合,实现的是每一行的数据属于三类中的哪一类
y = kms.fit_predict(x)
print(y)

# 取不同类别
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本程序是在python完成,基于sklearn.clusterk-means聚类包来实现数据的聚类,对于里面使用的数据格式如下:(注意更改程序的相关参数) 138 0 124 1 127 2 129 3 119 4 127 5 124 6 120 7 123 8 147 9 188 10 212 11 229 12 240 13 240 14 241 15 240 16 242 17 174 18 130 19 132 20 119 21 48 22 37 23 49 0 42 1 34 2 26 3 20 4 21 5 23 6 13 7 19 8 18 9 36 10 25 11 20 12 19 13 19 14 5 15 29 16 22 17 13 18 46 19 15 20 8 21 33 22 41 23 69 0 56 1 49 2 40 3 52 4 62 5 54 6 32 7 38 8 44 9 55 10 70 11 74 12 105 13 107 14 56 15 55 16 65 17 100 18 195 19 136 20 87 21 64 22 77 23 61 0 53 1 47 2 33 3 34 4 28 5 41 6 40 7 38 8 33 9 26 10 31 11 31 12 13 13 17 14 17 15 25 16 17 17 17 18 14 19 16 20 17 21 29 22 44 23 37 0 32 1 34 2 26 3 23 4 25 5 25 6 27 7 30 8 25 9 17 10 12 11 12 12 12 13 7 14 6 15 6 16 12 17 12 18 39 19 34 20 32 21 34 22 35 23 33 0 57 1 81 2 77 3 68 4 61 5 60 6 56 7 67 8 102 9 89 10 62 11 57 12 57 13 64 14 62 15 69 16 81 17 77 18 64 19 62 20 79 21 75 22 57 23 73 0 88 1 75 2 70 3 77 4 73 5 72 6 76 7 76 8 74 9 98 10 90 11 90 12 85 13 79 14 79 15 88 16 88 17 81 18 84 19 89 20 79 21 68 22 55 23 63 0 62 1 58 2 58 3 56 4 60 5 56 6 56 7 58 8 56 9 65 10 61 11 60 12 60 13 61 14 65 15 55 16 56 17 61 18 64 19 69 20 83 21 87 22 84 23 41 0 35 1 38 2 45 3 44 4 49 5 55 6 47 7 47 8 29 9 14 10 12 11 4 12 10 13 9 14 7 15 7 16 11 17 12 18 14 19 22 20 29 21 23 22 33 23 34 0 38 1 38 2 37 3 37 4 34 5 24 6 47 7 70 8 41 9 6 10 23 11 4 12 15 13 3 14 28 15 17 16 31 17 39 18 42 19 54 20 47 21 68 22
### 回答1: 以下是Python实现的K-means算法代码: ```python import numpy as np import matplotlib.pyplot as plt def kmeans(X, K, max_iters=20): centroids = X[np.random.choice(np.arange(len(X)), K), :] for i in range(max_iters): C = np.zeros(len(X)) for j in range(len(X)): distances = np.linalg.norm(X[j] - centroids, axis=1) cluster = np.argmin(distances) C[j] = cluster for k in range(K): centroids[k] = X[C == k].mean(axis=0) return C, centroids # 生成数据 np.random.seed(0) X1 = np.random.randn(100, 2) + np.array([2, 2]) X2 = np.random.randn(100, 2) + np.array([-2, -2]) X3 = np.random.randn(100, 2) + np.array([2, -2]) X4 = np.random.randn(100, 2) + np.array([-2, 2]) X = np.vstack([X1, X2, X3, X4]) # 调用kmeans函数 C, centroids = kmeans(X, 4) # 绘制结果 plt.scatter(X[:, 0], X[:, 1], c=C) plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r') plt.show() ``` 其,`X`是一个$n\times m$的矩阵,其$n$是数据点的数量,$m$是每个数据点的维度。`K`是聚类的数量,`max_iters`是最大迭代次数。函数返回一个长度为$n$的向量`C`,其的每个元素表示该数据点所属的聚类编号,以及一个$K\times m$的矩阵`centroids`,其的每行表示一个聚类的心点。 ### 回答2: K-means算法是一种常用的聚类算法,在Python可以使用scikit-learn库的KMeans模块进行实现。以下是K-means算法Python代码示例: ``` # 导入所需的库 from sklearn.cluster import KMeans import numpy as np # 创建样本数据 X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) # 创建并拟合K-means模型 kmeans = KMeans(n_clusters=2, random_state=0).fit(X) # 获取每个样本所属的簇 labels = kmeans.labels_ # 获取每个簇的心点坐标 centroids = kmeans.cluster_centers_ # 输出结果 print("每个样本所属的簇:", labels) print("簇的心点坐标:", centroids) ``` 以上代码将创建一个包含6个样本的数据集X,其每个样本有2个特征。接下来,使用KMeans函数创建一个K-means模型,并使用fit函数拟合数据。通过调整n_clusters参数的值可以指定需要聚类的簇的数量。然后,可以使用labels_属性获取每个样本所属的簇,并使用cluster_centers_属性获取每个簇的心点坐标。最后,输出每个样本所属的簇和簇的心点坐标。 需要注意的是,K-means算法的结果可能受到初始聚类心的影响。可以通过设置random_state参数来固定随机种子,以使结果可重复。 ### 回答3: K-means算法是一种常用的聚类算法,可以将数据集分为k个不同的簇。下面是一个用Python实现K-means算法的示例代码: ```python import numpy as np def k_means(data, k, max_iters): # 随机选择k个样本作为初始聚类心 centers = data[np.random.choice(data.shape[0], k, replace=False)] for _ in range(max_iters): # 计算每个样本与聚类心的距离 distances = np.linalg.norm(data[:, np.newaxis] - centers, axis=-1) # 分配每个样本到离其最近的聚类心 labels = np.argmin(distances, axis=-1) # 更新聚类心为每个簇的平均值 centers = np.array([data[labels == i].mean(axis=0) for i in range(k)]) return centers, labels # 测试 data = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) k = 2 max_iters = 10 centers, labels = k_means(data, k, max_iters) print("聚类心:") print(centers) print("样本标签:") print(labels) ``` 该代码实现了K-means算法,首先随机选择k个样本作为初始聚类心,然后迭代更新聚类心和样本标签,直到达到最大迭代次数。最终输出聚类心和样本标签。在给定的数据集,将数据分为2个簇,并输出了每个簇的聚类心和样本标签。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值