• 吴裕雄 python 机器学习——K均值聚类KMeans模型


    import numpy as np
    import matplotlib.pyplot as plt
    
    from sklearn import  cluster
    from sklearn.metrics import adjusted_rand_score
    from sklearn.datasets.samples_generator import make_blobs
    
    def create_data(centers,num=100,std=0.7):
        X, labels_true = make_blobs(n_samples=num, centers=centers, cluster_std=std)
        return  X,labels_true
    
    # 用于产生聚类的中心点
    centers=[[1,1],[2,2],[1,2],[10,20]] 
    # 产生用于聚类的数据集
    X,labels_true=create_data(centers,1000,0.5)
    
    #K-MEANS聚类模型
    def test_Kmeans(*data):
        X,labels_true=data
        clst=cluster.KMeans()
        clst.fit(X)
        predicted_labels=clst.predict(X)
        print("ARI:%s"% adjusted_rand_score(labels_true,predicted_labels))
        print("Sum center distance %s"%clst.inertia_)
    
    # 用于产生聚类的中心点
    centers=[[1,1],[2,2],[1,2],[10,20]] 
    # 产生用于聚类的数据集
    X,labels_true=create_data(centers,1000,0.5)
    #  调用 test_Kmeans 函数
    test_Kmeans(X,labels_true)

    def test_Kmeans_nclusters(*data):
        '''
        测试 KMeans 的聚类结果随 n_clusters 参数的影响
        '''
        X,labels_true=data
        nums=range(1,50)
        ARIs=[]
        Distances=[]
        for num in nums:
            clst=cluster.KMeans(n_clusters=num)
            clst.fit(X)
            predicted_labels=clst.predict(X)
            ARIs.append(adjusted_rand_score(labels_true,predicted_labels))
            Distances.append(clst.inertia_)
        ## 绘图
        fig=plt.figure()
        ax=fig.add_subplot(1,2,1)
        ax.plot(nums,ARIs,marker="+")
        ax.set_xlabel("n_clusters")
        ax.set_ylabel("ARI")
        ax=fig.add_subplot(1,2,2)
        ax.plot(nums,Distances,marker='o')
        ax.set_xlabel("n_clusters")
        ax.set_ylabel("inertia_")
        fig.suptitle("KMeans")
        plt.show()
        
    test_Kmeans_nclusters(X,labels_true) #  调用 test_Kmeans_nclusters 函数

    def test_Kmeans_n_init(*data):
        '''
        测试 KMeans 的聚类结果随 n_init 和 init  参数的影响
        '''
        X,labels_true=data
        nums=range(1,50)
        ## 绘图
        fig=plt.figure()
    
        ARIs_k=[]
        Distances_k=[]
        ARIs_r=[]
        Distances_r=[]
        for num in nums:
                clst=cluster.KMeans(n_init=num,init='k-means++')
                clst.fit(X)
                predicted_labels=clst.predict(X)
                ARIs_k.append(adjusted_rand_score(labels_true,predicted_labels))
                Distances_k.append(clst.inertia_)
    
                clst=cluster.KMeans(n_init=num,init='random')
                clst.fit(X)
                predicted_labels=clst.predict(X)
                ARIs_r.append(adjusted_rand_score(labels_true,predicted_labels))
                Distances_r.append(clst.inertia_)
    
        ax=fig.add_subplot(1,2,1)
        ax.plot(nums,ARIs_k,marker="+",label="k-means++")
        ax.plot(nums,ARIs_r,marker="+",label="random")
        ax.set_xlabel("n_init")
        ax.set_ylabel("ARI")
        ax.set_ylim(0,1)
        ax.legend(loc='best')
        ax=fig.add_subplot(1,2,2)
        ax.plot(nums,Distances_k,marker='o',label="k-means++")
        ax.plot(nums,Distances_r,marker='o',label="random")
        ax.set_xlabel("n_init")
        ax.set_ylabel("inertia_")
        ax.legend(loc='best')
    
        fig.suptitle("KMeans")
        plt.show()
        
    test_Kmeans_n_init(X,labels_true) #  调用 test_Kmeans_n_init 函数

  • 相关阅读:
    centos安装docker-compose
    CentOS安装Docker
    【JPA】【笔记】GenerationType四中类型
    【maven】多个子项目、父项目之间的引用问题【转】
    一个页面多个echarts图表自适应
    jQuery操作单选按钮(radio)用法
    CASE WHEN .... THEN END 的用法
    遮罩层
    oracle 数据库的字段的增删改主键设定删除
    自动获取ROI-用于SFR算法的ROI获取
  • 原文地址:https://www.cnblogs.com/tszr/p/10798342.html
Copyright © 2020-2023  润新知