当前位置:   article > 正文

机器学习中的 K-Means算法及其优缺点(包含Python代码样例)_k-means处理大模型有什么问题吗

k-means处理大模型有什么问题吗

目录

一、简介

二、优缺点介绍

三、Python代码示例

四、总结


一、简介

K-Means算法是一种经典的无监督学习算法,用于将数据集中的样本分为 K 个不同的类别。K-均值聚类算法的工作原理如下:

  • 随机选择 K 个中心点作为初始聚类中心。
  • 将每个样本点分配到离其最近的聚类中心,形成 K 个初始聚类。
  • 通过计算每个聚类中心的均值,更新聚类中心的位置。
  • 重复步骤2和步骤3,直到聚类中心不再发生变化或达到预定迭代次数。

二、优缺点介绍

优点:

  • 实现简单,计算快速,适用于处理大规模数据集。
  • 可用于聚类分析,发现数据中的隐藏模式和组织结构。
  • 算法的结果具有可解释性,即每个样本点都属于唯一的一个聚类。

缺点:

  • 需要预先指定聚类数量 K,这对于一些数据集来说可能是困难的,而错误的选择聚类数量可能导致结果不准确。
  • 对初始聚类中心的选择敏感,初始点的选择不同可能导致得到不同的聚类结果。
  • 对于非凸形状的聚类,K-均值算法可能表现不佳,会将非凸形状的聚类误认为多个凸形状的聚类。

三、Python代码示例

1.K-Means类代码:

  1. import numpy as np
  2. class KMeans:
  3. def __init__(self, n_clusters=2, max_iters=100):
  4. self.n_clusters = n_clusters
  5. self.max_iters = max_iters
  6. def fit(self, X):
  7. # 随机初始化聚类中心
  8. self.centroids = X[np.random.choice(range(len(X)), self.n_clusters, replace=False)]
  9. for _ in range(self.max_iters):
  10. # 分配样本到最近的聚类中心
  11. clusters = [[] for _ in range(self.n_clusters)]
  12. for x in X:
  13. distances = [np.linalg.norm(x - centroid) for centroid in self.centroids]
  14. closest_cluster = np.argmin(distances)
  15. clusters[closest_cluster].append(x)
  16. # 更新聚类中心
  17. new_centroids = []
  18. for cluster in clusters:
  19. new_centroids.append(np.mean(cluster, axis=0))
  20. new_centroids = np.array(new_centroids)
  21. # 判断聚类中心是否变化不再变化,如果是则停止迭代
  22. if np.all(self.centroids == new_centroids):
  23. break
  24. self.centroids = new_centroids
  25. def predict(self, X):
  26. predictions = []
  27. for x in X:
  28. distances = [np.linalg.norm(x - centroid) for centroid in self.centroids]
  29. closest_cluster = np.argmin(distances)
  30. predictions.append(closest_cluster)
  31. return predictions

2.调用代码

  1. from Kmeans import KMeans
  2. from sklearn.datasets import make_blobs
  3. import matplotlib.pyplot as plt
  4. # 生成样本数据
  5. X, y = make_blobs(n_samples=200, centers=4, random_state=0)
  6. # 实例化KMeans对象,并进行训练和预测
  7. kmeans = KMeans(n_clusters=4)
  8. kmeans.fit(X)
  9. predictions = kmeans.predict(X)
  10. # 绘制聚类结果
  11. plt.scatter(X[:, 0], X[:, 1], c=predictions)
  12. plt.scatter(kmeans.centroids[:, 0], kmeans.centroids[:, 1], c='red', marker='X')
  13. plt.show()
  14. plt.savefig(fname="Kmeans_result.png")

3.效果

 下方InsCode选择查看文件里的Kmeans_result.png即可查看可视化结果

四、总结

        K-均值聚类算法是一种简单而高效的聚类算法,适用于处理大规模数据集。但需要注意选择合适的聚类数量和初始聚类中心,以及对数据集的形状有一定的限制。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/548958
推荐阅读
相关标签
  

闽ICP备14008679号