机器学习之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()

轮廓系数:

原文地址:https://www.cnblogs.com/ywjfx/p/10898695.html