您的位置:首页 > 其它

机器学习之无监督学习(K-means)

2019-07-21 23:20 309 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_44953902/article/details/96755159

什么是无监督学习

  • 一家广告平台需要根据相似的人口学特征和购买习惯将美国人口扽成不同的小组,以便广告客户可以通过有关联的广告接触到它们的目标客户。
  • Airbnb需要将自己的方误清单分组成不同的社区,以便用户能更轻松地查询这些问题清单。
  • 一个数据科团队需要降低一个大型数据集的维度和数量,以便简化建模和降低文件大小。
          如何最有用的对其进行归纳和分组?以一种怎样的压缩格式有效地表示数据?这都是无监督学习的目标,之所以称为无监督,是因为这是从无标签的数据集开始学习的。

无监督学习所包含的算法

  • 聚类
    K-means(K均值聚类)
  • 降维
    PCA
K-means原理


K-means聚类步骤:

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

sklearn.cluster KMeans(n_cluters=8,init='k-means++')

  • k-means聚类
  • n_cluters:开始的聚类中心数量
  • init:初始化方法,默认为‘k-means++’
  • labels_:默认标记的类型,可以和真实值比较(不是值比较)
案例:K-means对Instacart Market用户聚类
  1. 分析:
    (1)降维之后的数据
    (2)k-means聚类
    (3)聚类结果显示
    第一步的降维过程在这里:https://blog.csdn.net/weixin_44953902/article/details/96302671
#聚类分析
from sklearn.cluster import KMeans
estimator = KMeans(n_clusters = 3)
estimator.fit(data)
y_predict = estimator.predict(data)
y_predict

结果:

K-means性能评估指标(高内聚,低耦合)

  1. 轮廓系数

注:对于每个点i为已聚类数据中的样本,b_i为i到其他簇群的所有样本的距离最小值,a_i为i到本身簇的距离平均值。最终计算出所有样本点的轮廓系数平均值。

  1. 轮廓系数值分析

    分析过程(以蓝点为例):
    (1)计算蓝点离本身簇所有点的距离的平均值a_i
    (2)蓝点到其他两个簇的样本距离的最小值为b_i
    根据公式:极端值:如果b_i>>a_i;趋近于1;如果b_i<<a_i;趋近于-1
  2. 结论
    如果b_i>>a_i,结果趋近于1,效果越好,b_i<<a_i,趋近于-1,效果越不好。轮廓系数的值是介于[-1,1],越趋近于1代表内聚度和分离度都相对较优。
  3. 轮廓系数API
    sklearn.metrics silhouette_score(X,labels)

    计算所有样本的平均轮廓系数
    X:特征值
    labels:被聚类标记的目标值
  4. 用户聚类结果评估----和上面的案例使用的同一个数据
#模型评估-轮廓系数
from sklearn.metrics import silhouette_score
silhouette_score(data,y_predict)

结果:

K-means总结
  • 特点分析:采用迭代式算法,只管易懂并且非常实用
  • 缺点:容易收敛到局部最优解(多次聚类)
  • 应用场景:没有目标值,有目标之后就可以直接用聚类的结果再分类(聚类一般做在分类之前)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: