《Web安全之机器学习入门》笔记:第十章 10.2 K-Means hello world

本文介绍了如何使用sklearn库中的make_blobs函数生成聚类数据集,然后运用K-means算法进行分类,并通过Matplotlib展示结果。通过实例展示了从数据生成到可视化的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列目录

《Web安全之机器学习入门》笔记:第十章 10.2 K-Means hello world

《Web安全之机器学习入门》笔记:第十章 10.3 K-Means算法检测DGA域名

《Web安全之机器学习入门》笔记:第十章 10.5 DBSCAN hello world

目录

系列目录

一、K-means算法

二、数据集

三、Kmeans分类


本系列是《Web安全之机器学习入门》的笔记集合,包含书中第五章-第十七章的内容。本文这一小节主要内容是讲解第10章使用K-MEANS算法的基本用法,本小节是通过生成的聚类数据集,使用K-means方法进行分类,并将其可视化。

一、K-means算法

K-Means 算法是一种无监督的聚类算法,旨在将给定数据集划分为 K 个不同的簇。其基本原理是:首先随机选择 K 个点作为初始聚类中心,然后计算每个数据点到各个聚类中心的距离,将数据点分配到距离最近的聚类中心所在的簇。接着,重新计算每个簇的中心,即该簇内所有数据点的均值。不断重复上述过程,直到聚类中心不再发生变化或达到预设的迭代次数。

该算法的优点是简单、快速,对处理高维数据和大规模数据集表现较好。然而,它也存在一些缺点,例如对初始聚类中心的选择较为敏感,不同的初始值可能导致不同的聚类结果,且需要事先指定聚类的数量 K,而这个 K 值往往难以准确确定。K-Means 算法在数据挖掘、图像处理、市场细分等领域有着广泛的应用,能帮助人们发现数据中的潜在结构和规律。

算法名称K-Means 算法
算法类型无监督学习的聚类算法
核心思想基于距离度量,将数据点划分到离其最近的聚类中心所代表的簇中,通过不断更新聚类中心使簇内数据点的相似度最大化
工作流程1. 随机选择 K 个数据点作为初始聚类中心
2. 计算每个数据点到各个聚类中心的距离,将数据点分配到距离最近的聚类中心所在的簇
3. 重新计算每个簇的中心(簇内所有数据点的均值)
4. 重复步骤 2 和 3,直到聚类中心不再变化或达到预设的迭代次数
优点1. 原理简单,实现容易
2. 计算效率较高,对于大规模数据集能快速收敛
3. 对处理数值型数据效果较好
4. 对高维数据也有一定的适用性
缺点1. 需预先指定聚类数 K,而合适的 K 值难以确定
2. 对初始聚类中心的选择敏感,不同的初始值可能导致不同的聚类结果
3. 对噪声和离群点较为敏感,可能影响聚类效果
4. 只能发现球形的簇,对于非凸形状的簇聚类效果不佳
适用场景1. 数据挖掘中的数据探索,发现数据的潜在分组结构
2. 图像处理,如对图像中的像素进行聚类
3. 市场细分,将客户按照不同特征进行分组
4. 文档聚类,对文本进行分类管理

二、数据集

        本小节通过make_blobs产生数据集,该函数是 sklearn.datasets中的一个函数,主要是产生聚类数据集,代码如下所示。

    n_samples = 1500
    random_state = 170
    X, y = make_blobs(n_samples=n_samples, random_state=random_state)

这段代码生成模拟聚类数据:设置样本数量为 1500(n_samples表示样本的个数),随机数种子设置为 170(random_state是随机种子,可以固定生成的数据 ) 以确保结果可复现,调用 make_blobs 函数生成二维数据点 X 和对应的真实聚类标签 y,X 为 1500 个样本的特征矩阵,y 为各样本的真实类别。      

三、Kmeans分类

本文使用 K-Means 聚类分析模拟数据。生成 1500 个二维样本点,用 K-Means(聚成 3 类)聚类并获取标签,绘制散点图(按聚类标签着色),设置图形大小为 12x12,子图标题含拼写错误,最终展示聚类结果,直观呈现 K-Means 对模拟数据的分组效果。具体代码如下所示。

  • 数据生成:用 make_blobs 生成 1500 个模拟聚类样本
  • 聚类建模:初始化 K-Means(3 类),拟合数据并预测聚类标签
  • 图形设置:创建 12x12 英寸的图形窗口
  • 子图绘制:在子图中绘制散点图,按聚类标签着色
  • 标题设置:为子图添加标题(含拼写错误)
  • 图形显示:展示绘制的聚类结果散点图
  • 程序执行:主函数调用聚类展示函数,运行整个流程
# 导入 matplotlib 库的 pyplot 模块,用于绘制图形
import matplotlib.pyplot as plt
# 从 sklearn 库的 cluster 模块导入 KMeans 类,用于进行 K-Means 聚类
from sklearn.cluster import KMeans
# 从 sklearn 库的 datasets 模块导入 make_blobs 函数,用于生成模拟的聚类数据
from sklearn.datasets import make_blobs

# 定义一个名为 show_kmeans 的函数,用于展示 K-Means 聚类的结果
def show_kmeans():
    # 打印当前文件的文档字符串(如果有的话),这里一般用于调试或说明信息
    print(__doc__)
    # 设置图形窗口的大小为 12x12 英寸
    plt.figure(figsize=(12, 12))

    # 定义生成模拟数据的样本数量为 1500
    n_samples = 1500
    # 定义随机数种子为 170,确保每次运行代码生成的数据相同,保证结果可复现
    random_state = 170
    # 使用 make_blobs 函数生成模拟的聚类数据
    # X 是生成的数据点,是一个二维数组,每一行代表一个样本,每一列代表一个特征
    # y 是每个数据点的真实标签,用于后续验证聚类结果
    X, y = make_blobs(n_samples=n_samples, random_state=random_state)
    # 创建一个 K-Means 聚类模型,指定聚类的数量为 3,随机数种子为 170
    # 使用 fit_predict 方法对数据进行聚类,并返回每个数据点所属的聚类标签
    y_pred = KMeans(n_clusters=3, random_state=random_state).fit_predict(X)

    # 在一个 2x2 的子图布局中选择第一个子图
    plt.subplot(221)
    # 绘制散点图,将数据点 X 的第一列作为 x 坐标,第二列作为 y 坐标
    # c=y_pred 表示根据每个数据点所属的聚类标签来设置颜色
    plt.scatter(X[:, 0], X[:, 1], c=y_pred)
    # 设置当前子图的标题为 "hello word!",这里应该是拼写错误,正确的可能是 "hello world!"
    plt.title("hello word!")

    # 显示绘制的图形
    plt.show()

# 程序的入口点,当直接运行该脚本时会执行以下代码块
if __name__ == '__main__':
    # 调用 show_kmeans 函数来展示 K-Means 聚类的结果
    show_kmeans()

  3.运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mooyuan天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值