返回 导航

Python / AI

hangge.com

Python - 机器学习算法库Scikit-Leran使用详解8(K-means聚类算法)

作者:hangge | 2022-09-16 08:10

九、K-means 聚类算法

1,基本介绍

(1)K-means 算法是一种无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。
有监督学习与无监督学习区别:
  • 有监督学习:有监督学习主要对有标签的数据集(即有“参考答案”)去构建机器学习模型,以尽可能对训练样本集外的数据进行标记(分类)预测。
  • 无监督学习:无监督机器学习不需要标记数据。它通过研究训练样本,并根据它们的共同特征自动将它们分为几类。聚类就是典型的无监督学习。

(2)K-means 聚类算法的聚类过程,其实就是不断寻找簇的质心的过程,该过程从随机设定 K 个质心开始,直到找到 K 个最合适的质心为止。具体步骤如下:
  • N 个训练样本中随机选取 个样本作为质心(聚类中心)
  • 对每个样本测量其到各个质心的距离,并把它归到最近的质心的所对应的类中
  • 重新计算已经得到的各个类的质心
  • 重复上面 23 两步操作,直到达到某个中止条件(迭代次数、新的质心与原质心相等或小于指定阈值等)

(3)K-means 的优缺点如下:
  • 优点:原理简单,实现容易,运算效率高。主要需要调参的参数仅仅是簇数 K
  • 缺点K 值的选取不好把握,设置簇的个数与随机初始化质心点可能影响聚类的最终效果。对噪音和异常点比较的敏感。

2,使用样例

(1)下面我们以 sklearn 库中自带的鸢尾花数据集对 K-means 聚类算法进行简单的应用。为了方便使用散点图绘制结果,这里我们只用了样本的两个特征(长度和宽度)来聚类。
#导入 sklearn 提供的鸢尾花数据
from sklearn.datasets import load_iris
#导入 导入skleran 提供的K-means算法
from  sklearn.cluster import KMeans
#导入 matplotlib 的pyplot 模块
import matplotlib.pyplot as plt 
#导入pandas
import pandas as pd
    
#加载数据集
iris = load_iris()
y = iris['target']
x = iris.data[:, :2]  # 通过花萼的两个特征(长度和宽度)来聚类
k = 3  # 假设聚类为 3 类(默认分为 8 个 簇)
#构建算法模型
model=KMeans(n_clusters=k) # n_clusters参数表示分成几个簇(此处k=3)
#训练模型
model.fit(x)
# 获取聚类后样本所属簇的对应编号(label_pred)
label_pred = model.labels_  # labels_属性表示每个点的分簇号,会得到一个关于簇编号的数组
centroids = model.cluster_centers_  #cluster_center 属性用来获取簇的质心点,得到一个关于质心的二维数组
print("样本集中各样本的原始标签:", y)
print("样本集聚类后各样本的分簇号:", label_pred)
print("簇的质心点:", centroids)

# 创建一个图像窗口
plt.figure() 
# 绘制样本点。c:表示颜色和色彩序列,此处与 cmap 颜色映射一起使用(cool是颜色映射值)s表示散点的的大小
plt.scatter(x[:, 0], x[:, 1], c=label_pred, s=50, cmap='cool')
# 绘制质心点
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=50)
plt.show()

(2)运行结果如下:
评论

全部评论(0)

回到顶部