• 机器学习之K-Mean聚类算法


    知识点:

    # coding = utf-8
    import numpy as np
    import pandas as pd
    from sklearn.cluster import KMeans
    """
    非监督学习:
        聚类算法:
            1、随机再数据当中抽取三个样本,当作三个类别的中心点(k1,k2,k3)
            2、计算其余的点分别到这三个中心点的距离,每一个样本有三个距离(a,b,c)
                从中选出距离最近的一个点作为自己的标记形成三个族群
            3、分别计算这三个族群的平均值,把三个平均值与之前的三个旧中心点进行比较
                如果相同,结束聚类,如果不相同,把三个平均值当作新的中心点,重复第二步骤
    聚类的作用:做在分类之前,利用分类的数据进行预测
    
    API:sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’)
            k-means聚类
            n_clusters:开始的聚类中心数量
            init:初始化方法,默认为'k-means ++’
            labels_:默认标记的类型,可以和真实值比较(不是值比较)
    
    聚类算法评估标准:外部距离最大化,内部距离最小化
        轮廓系数:1、计算样本1到自身类别的点距离的平均值a_i  ---->内部距离
                  2、计算样本1分别到其他类别下的所有点的平均距离,b_1,c_1  ---->外部距离
                    取其中的最小的值当作b_i
                  3、sc_i = (bi-ai)/max(bi,ai)   
        若 b_i >> a_i  ,sc_i = 1  完美
        若 b_i << a_i  ,sc_i = -1 最差     
        
        API:sklearn.metrics.silhouette_score(X, labels)
                计算所有样本的平均轮廓系数
                X:特征值
                labels:被聚类标记的目标值
                
        类别的多少,可以通过查看轮廓系数判断 sc_i > 0 ,则表明聚类效果不错
    """

     代码:

    # coding = utf-8
    import numpy as np
    from sklearn.cluster import KMeans
    from sklearn.datasets import make_blobs
    import matplotlib.pyplot as plt
    from sklearn.metrics import silhouette_score
    def kmean():
        """
        Kmean测试
        :return:
        """
        #数据处理
        x_train, y_train = make_blobs(n_features=28)
        print(x_train.shape)
        print(type(x_train))
        print(x_train[1])
        print(y_train)
        #聚类
        km = KMeans(n_clusters=3)
        km.fit(x_train)
        y_pre = km.predict(x_train)
        print("预测结果",y_pre)
    
        ###############轮廓系数#####################
        var = silhouette_score(x_train,y_pre)
        print("轮廓系数:",var)  #轮廓系数越大,说明聚类的效果越好
    
        ############散点图展示######################
        plt.figure(figsize=(20,20))
       # colored = ['orange', 'green', 'blue', 'purple']
        colored = ['orange', 'green', 'blue']
        #colored = ['orange', 'green']
        colr = [colored[i] for i in y_pre]
    
        plt.scatter(x_train[:, 1], x_train[:, 2],color=colr)
        plt.show()
        return None
    
    if __name__ == '__main__':
        kmean()

    轮廓系数:

  • 相关阅读:
    (一)python 简单网页爬虫
    环形队列的应用
    AutoResetEvent 和 ManualResetEvent 多线程应用
    委托 和 事件
    Action 和 Func 的用法以及区别
    IIS 配置缓存
    IIS 发布双证书
    函数中返回局部变量的问题
    python函数2-函数参数
    Python基础语法6-冒泡排序
  • 原文地址:https://www.cnblogs.com/ywjfx/p/10898695.html
Copyright © 2020-2023  润新知