zoukankan      html  css  js  c++  java
  • k-means算法处理聚类标签不足的异常

    k-means算法在人群聚类场景中,是一个非常实用的工具。(该算法的原理可以参考K-Means算法的Python实现)

    常见调用方式

    该算法常规的调用方式如下:

    # 从sklearn引包
    from sklearn import cluster
    # 初始化并设定聚类数
    k_means = cluster.KMeans(n_clusters=9)
    # 指定聚类特征
    df_pct = stat_score['feature_1', 'feture_2', 'feature_3']
    k_means.fit(df_input.fillna(0))
    
    # 计算聚类标签
    labels = k_means.labels_
    # 获得聚类的质心
    C = k_means.cluster_centers_
    

    异常现象

    常规情况下,以上处理后,会根据dataframe上的索引列顺序的label(0~8的数值)。
    但是,我们在执行代码过程中,出现了raise ValueError('Length of values does not match length of ' 'index')错误,该错误是由于对label值进行翻译的时候出现了label个数不到8个的情况。也就是说,k-means算法最后给出少于8个的聚类标签。

    打印中间信息,确认只得到了3个聚类标签。

    >>>>>>>>>>>>>>>>>>>>labels<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    [4 4 4 4 4 2 4 4 4 0 4 4 4 0]
    14
    {0, 2, 4}
    

    异常原因

    在对原数据进行下钻维度上的聚类时,比如全公司下某个门店的订单,存在一定时间内订单过少的情况。上面异常就是因为在一个下钻维度上只有28条特征记录,造成k-means只得到3个标签,最后出现了dataframe行数不匹配的情况。

    处理方式

    在对下钻维度进行聚类前,对此维度的特征数量进行统计,若数量小于特定阈值则考虑:

    1. 使用特征分组聚类然后再对分组标签进行组合;
    2. 考虑其它聚类算法,如Spectral clustering。
  • 相关阅读:
    bootloader
    Arm中的c和汇编混合编程
    Linux学习笔记(一)
    java按所需格式获取当前时间
    java 串口通信 rxtx的使用
    Tomcat数据库连接池
    面试
    复习 模拟call apply
    复习 js闭包
    复习js中的原型及原型链
  • 原文地址:https://www.cnblogs.com/shenfeng/p/kmean_label_lacking.html
Copyright © 2011-2022 走看看