本周学习了机器学习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()