zoukankan      html  css  js  c++  java
  • python k-means聚类

    ""
    k-means聚类算法过程
    1)从N个样本数据中随机选取k个作为初始的聚类中心
    2)分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中
    3)所有对象分配完成后,重新计算K个聚类的中心
    4)与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化,转过程2),否则转过程5)
    5)当质心不发生变化时停止并输出聚类结果

    聚类的目标函数
    使用误差平方和SSE作为度量聚类质量的目标函数,对于两种不同的聚类结果,选择误差平方
    和较小的分类结果
    """
    ##使用K-Means算法聚类消费行为特征数据

    #加载程序包

    import pandas as pd
    from sklearn.cluster import KMeans
    import matplotlib.pyplot as plt
    #读取数据

    inputfile = '../data/consumption_data.xls' #销量及其他属性数据
    outputfile = '../data/data_type.xls' #保存结果的文件名

    data = pd.read_excel(inputfile, index_col = 'Id') #读取数据
    data_zs = 1.0*(data - data.mean())/data.std() #数据标准化
    """
    R:最近一次消费时间间隔
    F:消费频率
    M:消费总金额
    """

    # '利用SSE选择k'
    SSE = [] # 存放每次结果的误差平方和
    for k in range(1, 9):
    estimator = KMeans(n_clusters=k) # 构造聚类器
    estimator.fit(data_zs)
    SSE.append(estimator.inertia_)
    X = range(1, 9)
    plt.xlabel('k')
    plt.ylabel('SSE')
    plt.plot(X, SSE, 'o-')
    plt.show()

    k=5 #设定聚类数据为5类

    model = KMeans(n_clusters = k)
    model.fit(data_zs) #开始聚类

    #简单打印结果
    r1 = pd.Series(model.labels_).value_counts() #统计各个类别的数目
    r2 = pd.DataFrame(model.cluster_centers_) #找出聚类中心
    r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向),得到聚类中心对应的类别下的数目
    r.columns = list(data.columns) + [u'类别数目'] #重命名表头
    print(r)

    ##输出误差平方和SSE
    SSE = model.inertia_
    print(SSE)
    #详细输出原始数据及其类别
    data_new = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1) #详细输出每个样本对应的类别
    data_new.columns = list(data.columns) + [u'聚类类别'] #重命名表头
    data_new.to_excel(outputfile) #保存结果


  • 相关阅读:
    ThinkPHP Model+数据库的切换使用
    关于SSD安装系统的一些设置(PE安装win 7)
    PHP实现文件下载:header
    Thinkphp 使用PHPExcel导入,栗子
    Ueditor 的使用(这里以php+ci为例)
    js获取鼠标选中的文字内容
    WNMP 下 Nginx 配置 (使用了phpfind一键安装环境)
    javascript 实现 trim
    javascript 获取 CSS 样式表属性
    javascript 删除节点问题
  • 原文地址:https://www.cnblogs.com/liu-304711/p/10931950.html
Copyright © 2011-2022 走看看