聚类算法Kmeans的工作原理和sklearn实现

聚类算法出现的原因:手里没有标签,也就是没有Y值了,聚类是把相似的东西分为一组。
Kmeans算法输入的参数:

  1. 要得到的簇的个数,也就是分成几类,也就是需要指定K值
  2. 质心(不需要输入):各个向量维度取平均值
  3. 欧几里得距离。两个点之间的距离。
  4. 优化的目标就是,不同的质心与同一个点的距离,谁最近,这个店就属于哪一类。
    Kmeans算法的执行流程在这里插入图片描述
    1.对于两类数据点,首先输入分类的k为2,会随机找到两个点作为质心。
    2 对每个样本点计算欧几里得距离,然后算出属于哪一类
    3 获取第一次迭代的分类结果
    4 对第一次的结果寻找新的质心,重新聚类。
    5 获得第二次的结果
    6 依次不停循环往复,直到质心不再发生变化为止。
    Kmeans算法的优劣性:
    优点:简单快速, 适合常规数据集
    缺点:K值难确定,复杂度与样本呈线性关系,很难发现任意形状的簇。
    在这里插入图片描述
    python实现对鸢尾花数据集进行聚类
from sklearn import datasets  
import pandas  as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
iris=datasets.load_iris()
iris_x=iris.data[:,0:2]#z只取前两个维度
iris_x
#绘制数据分布图
plt.scatter(iris_x[:, 0], iris_x[:, 1], c = "green", marker='o', label='see')   
plt.show()

结果如下:
在这里插入图片描述
接下来进行聚类:

estimator = KMeans(n_clusters=2)#构造聚类器
estimator.fit(iris_x)
label_pred = estimator.labels_ #获取聚类标签
#绘制k-means结果
x0 = iris_x[label_pred == 0]
x1 = iris_x[label_pred == 1]
plt.scatter(x0[:, 0], x0[:, 1], c = "red", marker='o', label='label0')  
plt.scatter(x1[:, 0], x1[:, 1], c = "green", marker='*', label='label1')   
plt.show()  

聚类后结果如下
在这里插入图片描述

聚类的结果评估:
用轮廓系数去评估聚类的结果。在这里插入图片描述
也就是说结果值越接近1,证明样本聚类合理。

from sklearn import metrics
score=metrics.silhouette_score(iris_x,label_pred)
score

结果值为0.46

猜你喜欢

转载自blog.csdn.net/qq_41302130/article/details/82951286