• python聚类分析


    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.cluster import KMeans
    from sklearn import preprocessing
    from scipy.spatial.distance import cdist
    from sklearn import metrics
    
    # 读取原始数据
    X = []
    y_true = []
    id = []
    
    f = open('data/wina.data')
    for line in f:
        y = []
        for index,item in enumerate(line.split(",")):
            if index == 0:
                id.append(int(item))
                continue
            y.append(float(item))
        X.append(y)
    # 转化为numpy array
    X = np.array(X)
    y_true = np.array(id)
    
    
    min_max_scaler = preprocessing.MinMaxScaler()
    X = min_max_scaler.fit_transform(X)
    
    
    K = range(1, 10)
    meandistortions = []
    for k in K:
        kmeans = KMeans(n_clusters=k)
        kmeans.fit(X)
        meandistortions.append(sum(np.min(cdist(X, kmeans.cluster_centers_, 'euclidean'), axis=1)) / X.shape[0])
    plt.plot(K, meandistortions, 'bx-')
    plt.xlabel('k')
    plt.ylabel('meandistortions')
    plt.title('best K of the model')
    plt.show()
    n_clusters = 3
    
    
    cls = KMeans(n_clusters).fit(X)
    y_pre = cls.predict(X)
    
    n_samples,n_features=X.shape     #总样本量,总特征数
    inertias = cls.inertia_   #样本距离最近的聚类中心的总和
    adjusted_rand_s=metrics.adjusted_rand_score(y_true,y_pre)           #调整后的兰德指数
    homogeneity_s=metrics.homogeneity_score(y_true,y_pre)               #同质化得分
    silhouette_s=metrics.silhouette_score(X,y_pre,metric='euclidean')   #平均轮廓系数
    print("兰德指数ART",adjusted_rand_s)
    print("同质化得分homo",homogeneity_s)
    print("平均轮廓系数",silhouette_s)
    
    centers=cls.cluster_centers_  #各类别中心
    
    colors=['#ff0000','#00ff00','#0000ff']   #设置不同类别的颜色
    plt.figure()    #建立画布
    for i in range(n_clusters):    #循环读取类别
        index_sets=np.where(y_pre==i)  #找到相同类的索引集合、
        cluster=X[index_sets]   #将相同类的数据划分为一个聚类子集
        plt.scatter(cluster[:,0],cluster[:,0],c=colors[i],marker='.')   #展示聚类子集内的样本点
        plt.plot(centers[i][0],centers[i][0],'*',markerfacecolor=colors[i],markeredgecolor='k',markersize=6)
    plt.show()

     

  • 相关阅读:
    VSCode编辑器在开发时常用的插件
    表单的数据校验规则及使用记录
    Vuex的插件保持状态持久化
    VueCli3项目中模拟数据及配置代理转发
    CSS 模块化
    Vue中静态地址的使用方式
    Vue中自动化引入样式及组件样式穿透
    Vue中的全局混入或局部混入
    让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
    刚学玩原生JS,自己写了一个小游戏,希望在以后能不断地进步加以改善
  • 原文地址:https://www.cnblogs.com/msdog/p/12638965.html
Copyright © 2020-2023  润新知