本周学习了机器学习kmeans算法,对科技成果项目进行聚类分析,将分类后的结果与行业进行比照。
K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽可能紧密的连在一起,而让簇间的距离尽量的大。
K-Means算法优缺点
优点
- 聚类效果较优。
- 原理简单,实现容易,收敛速度快。
- 需要调整的参数较少,通常只需要调整簇数K。
缺点
- K值选取不好把握。
- 对噪音和异常点比较敏感。
- 采用迭代方法,得到的结果是局部最优。
- 如果各隐含类别的数据不平衡,则聚类效果不佳。
import matplotlib.pyplot as plt from sklearn.datasets import make_blobs # 导入产生模拟数据的方法 from sklearn.cluster import KMeans # 1. 产生模拟数据 k = 5 X, Y = make_blobs(n_samples=1000, n_features=2, centers=k, random_state=1) # 2. 模型构建 km = KMeans(n_clusters=k, init='k-means++', max_iter=30) km.fit(X) # 获取簇心 centroids = km.cluster_centers_ # 获取归集后的样本所属簇对应值 y_kmean = km.predict(X) # 呈现未归集前的数据 plt.scatter(X[:, 0], X[:, 1], s=50) plt.yticks(()) plt.show() plt.scatter(X[:, 0], X[:, 1], c=y_kmean, s=50, cmap='viridis') plt.scatter(centroids[:, 0], centroids[:, 1], c='black', s=100, alpha=0.5) plt.show()