• 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) #保存结果


  • 相关阅读:
    ARM 浮点运算
    手机微硬盘读取速度>50MB/s eMMC技术浅析
    Chrome 浏览器跨域和安全访问问题 使用 chrome的命令行标记:disable-web-security 参数联调线上数据
    Vue学习手札
    使用MouseWithoutBordersSetup共享鼠标键盘教程
    java使用POI获取sheet、行数、列数
    基于Spring MVC实现基于form表单上传Excel文件,批量导入数据
    org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML.
    [MYSQL]时间毫秒数转换
    springmvc 传递和接收数组参数
  • 原文地址:https://www.cnblogs.com/liu-304711/p/10931950.html
Copyright © 2020-2023  润新知