机器学习之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()
轮廓系数:
本文来自博客园,作者:小白啊小白,Fighting,转载请注明原文链接:https://www.cnblogs.com/ywjfx/p/10898695.html