当前位置:   article > 正文

Python 机器学习8:sklearn 聚类算法_from sklearn.cluster import kmeans

from sklearn.cluster import kmeans

1. K-Means算法是一种广泛使用的聚类算法。

from sklearn.cluster import KMeans

K-Means是聚焦于相似的无监督的算法,以距离作为数据对象间相似性度量的标准,即数据对象间的距离越小,则它们的相似性越高,则它们越有可能在同一个类。K值指的是把数据划分成多少个类别。

算法步骤:随机设置K个特征空间内的点作为初始的聚类中心。对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别。接着,对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)。如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程。

KMeans(n_clusters=8,init=‘k-means++’)

参数:

n_clusters:开始的聚类中心数量

init:初始化方法,默认为k-means++

例:用户对物品类别的喜好分类

需求:将PCA案例中用户数据特征(商品信息、订单与商品信息、用户的订单信息、商品所属具体物品类别)使用K-Means进行分类。

链接:https://pan.baidu.com/s/1THkh7j3-PH7HoZbwxVnmTg
提取码:51d7

products.csv 商品信息

order_products__prior.csv 订单与商品信息

orders.csv 用户的订单信息

aisles.csv 商品所属具体物品类别

 

  1. import pandas as pd
  2. from sklearn.decomposition import PCA
  3. from sklearn.cluster import KMeans
  4. import matplotlib.pyplot as plt
  5. from sklearn.metrics import silhouette_score
  6. # 读取四张表的数据
  7. prior = pd.read_csv("order_products__prior.csv")
  8. products = pd.read_csv("products.csv")
  9. orders = pd.read_csv("orders.csv")
  10. aisles = pd.read_csv("aisles.csv")
  11. # 合并四张表到一张表 (用户-物品类别)
  12. _mg = pd.merge(prior, products, on=['product_id', 'product_id'])
  13. _mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
  14. mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])
  15. cross = pd.crosstab(mt['user_id'], mt['aisle'])
  16. # 进行主成分分析
  17. pca = PCA(n_components=0.9)
  18. x = pca.fit_transform(cross)
  19. # 假设用户一共分为四个类别
  20. km = KMeans(n_clusters=4)
  21. km.fit(x)
  22. predict = km.predict(x)
  23. print(predict)
  24. # 显示聚类的结果
  25. plt.figure(figsize=(10, 10))
  26. # 建立四个颜色的列表
  27. colored = ['orange', 'green', 'blue', 'purple']
  28. colr = [colored[i] for i in predict]
  29. plt.scatter(x[:, 1], x[:, 20], color=colr)
  30. plt.xlabel("1")
  31. plt.ylabel("20")
  32. plt.show()

输出:

[3 0 3 ... 0 2 3]

聚类性能评估指标:轮廓系数

from sklearn.metrics import silhouette_score

 

对于每个点i为已聚类数据中的样本,bi为i到其它族群的所有样本的平均距离,ai为i到本身簇的距离平均值,最终计算出所有的样本点的轮廓系数平均值。

如果sci小于0,说明ai的平均距离大于最近的其他簇。 聚类效果不好。

如果sci越大,说明ai的平均距离小于最近的其他簇。 聚类效果好。

轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。

计算上面用户消费案例的轮廓系数:

  1. # 评判聚类效果,轮廓系数
  2. print(silhouette_score(x, predict))

sklearn.metrics.silhouette_score(X, labels) 计算所有样本的平均轮廓系数

参数:

X:特征值

labels:被聚类标记的目标值

输出:

0.43602642864601127

K-Means的优点:采用迭代式算法,直观易懂并且非常实用

K-Means的缺点:容易收敛到局部最优解;需要预先设定簇的数量(解决方法分别可以是:多次聚类、K-means++)。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号