爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      【机器学习】任务七:聚类算法 (K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类)

      首页 知识中心 软件开发 文章详情页

      【机器学习】任务七:聚类算法 (K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类)

      2024-12-03 08:55:57 阅读次数:30

      代码,数据,聚类

      1.基础知识

      1.1 K-Means 算法

      • 定义:K-Means 是一种无监督学习算法,用于将数据集分成 K 个簇,簇内点尽可能相似,簇间点尽可能不同。通过反复计算簇中心和分配点到最近的簇中心来达到聚类效果。
      • 用途:
        • 客户细分:将客户按消费行为分组,如根据消费习惯、消费金额等分成高价值和低价值客户群体。
        • 图像压缩:通过聚类减少像素颜色的种类,压缩图像。
        • 文档分类:基于文档特征(如词频)将文档分成不同主题类别。
      • 适用场景:
        • 数据集较大时能快速聚类。
        • 数据的簇形状接近球形,适合分布规则的数据集。
        • 不适合簇形状不规则的复杂数据集。

      1.2 层次聚类(Hierarchical Clustering)

      • 定义:层次聚类基于构建层次结构分组数据,分为凝聚式(自下而上)和分裂式(自上而下)。凝聚式将每个点视为一个簇,逐步将最近的簇合并,分裂式则从一个大簇开始,不断细分。
      • 用途:
        • 基因表达分析:分析基因的表达模式,构建基因树或分类模型。
        • 市场细分:通过层次化分割市场,找到小而精确的目标客户群体。
        • 图像分类:构建图像分类树,分析不同类别的层次关系。
      • 适用场景:
        • 适用于小规模数据集或希望得到层次结构的聚类结果。
        • 当需要对数据进行层次结构的可视化展示时(例如树状图)。
        • 计算量较大,通常不适用于非常大的数据集。

      1.3 密度聚类(DBSCAN)

      • 定义:DBSCAN 基于密度来聚类数据,识别密度高的区域为簇,稀疏区域为噪声点。它可以发现任意形状的簇,无需指定簇的数量。
      • 用途:
        • 地理空间数据分析:可用于分析具有空间坐标的数据,如建筑物分布、人口密度等。
        • 异常检测:识别噪声和异常点,如信用卡欺诈检测和网络入侵检测。
        • 社交网络分析:发现社交网络中群体性高密度区域,分析社交群体的结构。
      • 适用场景:
        • 适用于含有噪声和形状不规则的簇,例如地理、空间数据库。
        • 当簇的形状较复杂,且希望自动处理噪声点时效果较好。
        • 对密度差异较大的簇不适用,并且对参数选择(邻域半径 ϵ\epsilonϵ 和最小样本数 MinPts)较敏感。

      1.4 距离和相似度度量方法

      • 定义:在聚类算法中,距离和相似度是衡量数据点之间关系的重要指标。选择合适的距离或相似度度量方法可以影响聚类结果的质量。
      • 用途:
        • 欧式距离:常用于几何上连续数值特征的距离计算,适合 K-Means 和层次聚类等需要计算几何距离的场景。
        • 曼哈顿距离:适合分隔在网格结构上的点(例如城市街道间的距离计算)。
        • 马氏距离:适合高维数据,能够考虑特征之间的相关性。
        • 汉明距离:常用于字符串或序列数据间的差异比较(如基因序列分析)。
      • 相似度度量:
        • 余弦相似度:用于度量两个向量的方向相似性,常用于文本数据或高维数据。
        • 皮尔逊相关系数:用于度量两个变量之间的线性关系,常用于统计分析。

      适用场景:

      • 欧式距离:适用于几何形状规则的数据,尤其是平面或多维空间中的数据。
      • 曼哈顿距离:适用于数据分布呈网格状或有明确方向的情况。
      • 马氏距离:适用于高维数据集,数据具有相关性时表现优越。
      • 汉明距离:适用于二进制向量、字符串或基因序列比对,主要应用于计算离散数据的相似度。

      1.5 总结:

      • K-Means:适合规则分布的大规模数据,快速聚类。
      • 层次聚类:适合小规模数据和需要层次结构的场景,如基因分析或市场细分。
      • DBSCAN:适合处理复杂形状簇和含有噪声的数据,如地理空间数据或异常检测。
      • 距离和相似度度量:用于选择合适的距离度量方式,根据数据的特征进行优化选择。

      这些算法在不同的应用场景中表现各异,建议根据数据特点选择合适的算法。如果有其他问题或需要深入探讨,可以随时提问!


      2.K-means 算法对鸢尾花(Iris)数据进行聚类

      2.1 导入所需的模块

      2.1.1 代码片段:

      import matplotlib.pyplot as plt
      from sklearn.datasets import load_iris
      from sklearn.cluster import KMeans
      from sklearn.preprocessing import StandardScaler
      

      2.1.2 实现目的:

      导入必要的库,用于数据加载、标准化处理、执行聚类算法以及绘图。

      2.1.3 代码解释:

      1. import matplotlib.pyplot as plt:导入 matplotlib 库中的 pyplot 模块,并将其命名为 plt,用于后续的可视化操作。pyplot 是 matplotlib 中的一个子模块,它提供了一组类似 MATLAB 风格的命令,用于创建图形、控制图形元素等。
      2. from sklearn.datasets import load_iris:从 sklearn.datasets 中导入 load_iris 函数,用于加载经典的鸢尾花数据集。load_iris() 会返回一个类似字典的对象,包含特征数据、目标标签以及数据描述。
      3. from sklearn.cluster import KMeans:从 sklearn.cluster 模块中导入 KMeans 类,K-Means 是一种常用的无监督聚类算法,用于将数据集分成预定义数量的簇。K-Means 会将数据分配到不同的簇,使得簇内数据相似度最大,簇间数据相似度最小。
      4. from sklearn.preprocessing import StandardScaler:从 sklearn.preprocessing 模块中导入 StandardScaler 类,用于对特征数据进行标准化。标准化的作用是使每个特征的数据均值为 0,标准差为 1,从而消除特征之间由于不同尺度带来的影响。

      2.2 加载并标准化鸢尾花数据集

      2.2.1 代码片段:

      iris = load_iris()
      X = iris.data  # 特征数据
      y = iris.target  # 实际标签(用于后续比较)
      scaler = StandardScaler()
      X_scaled = scaler.fit_transform(X)
      

      2.2.2 实现目的:

      加载鸢尾花数据集,并对数据进行标准化处理,使特征在同一尺度下便于进行聚类分析。

      2.2.3 代码解释:

      1. iris = load_iris():通过 load_iris() 函数加载鸢尾花数据集,并将其保存到变量 iris 中。该数据集是一个包含 150 条样本的数据集,每个样本有 4 个特征,并且分为 3 个类别(Setosa, Versicolor, Virginica)。
      2. X = iris.data:从 iris 数据集中提取特征数据,并赋值给变量 X。X 是一个 150 x 4 的数组,表示 150 个样本的 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)。
      3. y = iris.target:从 iris 数据集中提取目标标签,即每个样本所属的类别(0 表示 Setosa,1 表示 Versicolor,2 表示 Virginica)。这些标签将用于后续比较和评估聚类结果。
      4. scaler = StandardScaler():创建一个 StandardScaler 对象 scaler,用于对特征数据进行标准化。标准化是将数据转换为均值为 0,标准差为 1 的标准正态分布,以消除特征尺度不同对模型的影响。
      5. X_scaled = scaler.fit_transform(X):使用 scaler 对 X 中的数据进行标准化。fit_transform() 方法首先计算每个特征的均值和标准差,然后对数据进行标准化。标准化后的数据存储在 X_scaled 中,用于后续的聚类分析。

      2.3 使用“肘部法则”选择 K 值

      2.3.1 代码片段:

      inertia = []
      K_range = range(1, 11)
      for k in K_range:
          kmeans = KMeans(n_clusters=k, random_state=42)
          kmeans.fit(X_scaled)
          inertia.append(kmeans.inertia_)
      
      plt.figure(figsize=(8, 4))
      plt.plot(K_range, inertia, marker='o')
      plt.title('Elbow Method for Optimal K')
      plt.xlabel('Number of clusters (K)')
      plt.ylabel('Inertia')
      plt.grid()
      plt.show()
      

      2.3.2 实现目的:

      使用肘部法则通过观察簇内误差平方和 (inertia) 的变化,确定 K-Means 聚类中最合适的簇数量 KKK。

      2.3.3 代码解释:

      1. inertia = []:创建一个空列表 inertia,用于保存不同 K 值对应的簇内误差平方和 (inertia) 值。inertia 越小,表示簇内的数据点之间越紧密。
      2. K_range = range(1, 11):定义一个 K 值的范围,这里从 1 到 10。我们将尝试使用 1 到 10 个簇进行聚类,后续分析每个 K 值对应的聚类效果。
      3. for k in K_range::开始一个循环,遍历 K_range 中的每个 K 值,依次训练 K-Means 模型。
      4. kmeans = KMeans(n_clusters=k, random_state=42):为每个 K 值创建一个 K-Means 模型对象。n_clusters=k 表示簇的数量为当前的 K,random_state=42 是用于确保结果可复现的随机种子。
      5. kmeans.fit(X_scaled):使用 fit() 方法对标准化后的数据 X_scaled 进行训练,模型将找到 K 个簇的中心点,并将数据点分配到离其最近的中心点。
      6. inertia.append(kmeans.inertia_):训练完成后,提取当前模型的簇内误差平方和(kmeans.inertia_),并将其添加到 inertia 列表中。inertia_ 衡量了所有数据点到其最近的簇中心的距离和,是衡量聚类效果的指标。
      7. plt.figure(figsize=(8, 4)):创建一个大小为 8x4 英寸的绘图窗口,用于绘制肘部图。
      8. plt.plot(K_range, inertia, marker='o'):绘制 K 值与 inertia 之间的关系图。横轴是 K 值,纵轴是簇内误差平方和,marker='o' 表示在每个数据点上绘制圆形标记。
      9. plt.title('Elbow Method for Optimal K'):设置图表的标题为“肘部法则选择最优 K”。
      10. plt.xlabel('Number of clusters (K)'):设置横轴标签为“簇的数量 (K)”。
      11. plt.ylabel('Inertia'):设置纵轴标签为“簇内误差平方和 (Inertia)”。
      12. plt.grid():启用网格显示,便于观察数据变化。
      13. plt.show():显示绘制的肘部法则图。通常在图中找到“肘部”位置(即曲线开始变平的点)可以帮助我们选择最优的 K 值。

      2.4 使用选择后的 K 值初始化分类器

      2.4.1 代码片段:

      k = 3
      kmeans = KMeans(n_clusters=k, random_state=42)
      y_kmeans = kmeans.fit_predict(X_scaled)
      

       

      2.4.2 实现目的:

      根据肘部法则确定的最佳 K 值,初始化 K-Means 模型并进行聚类分析。

      2.4.3 代码解释:

      1. k = 3:根据之前的肘部法则图,选择最佳 K 值为 3,表示我们将数据分成 3 个簇。
      2. kmeans = KMeans(n_clusters=k, random_state=42):创建一个 K-Means 聚类模型,n_clusters=3 表示模型将数据划分为 3 个簇。random_state=42 确保结果的可复现性。
      3. y_kmeans = kmeans.fit_predict(X_scaled):使用 fit_predict() 方法对标准化后的数据 X_scaled 进行聚类:
      • fit() 部分对数据进行训练,找到聚类中心。
      • predict() 部分根据聚类结果为每个数据点分配一个簇标签。y_kmeans 保存了每个数据点的簇标签(0, 1, 2),表示该点所属的簇。

      2.5 绘制聚类结果

      2.5.1 代码片段:

      plt.figure(figsize=(8, 6))
      plt.scatter(X_scaled[y_kmeans == 0, 0], X_scaled[y_kmeans == 0, 1], s=100, c='red', label='Cluster 1')
      plt.scatter(X_scaled[y_kmeans == 1, 0], X_scaled[y_kmeans == 1, 1], s=100, c='blue', label='Cluster 2')
      plt.scatter(X_scaled[y_kmeans == 2, 0], X_scaled[y_kmeans == 2, 1], s=100, c='green', label='Cluster 3')
      
      # 绘制聚类中心
      plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='yellow', label='Centroids')
      plt.title('K-means Clustering of Iris Data')
      plt.xlabel('Feature 1 (scaled)')
      plt.ylabel('Feature 2 (scaled)')
      plt.legend()
      plt.grid()
      plt.show()
      

       

      2.5.2 实现目的:

      通过散点图显示每个簇的聚类结果,并展示 K-Means 模型中计算得到的聚类中心。

      2.5.3 代码解释:

      1. plt.figure(figsize=(8, 6)):创建一个大小为 8x6 英寸的图形窗口,准备绘制聚类结果。

      2. plt.scatter(X_scaled[y_kmeans == 0, 0], X_scaled[y_kmeans == 0, 1], s=100, c='red', label='Cluster 1'):

        • 使用 plt.scatter() 绘制属于第 0 簇的数据点。
        • X_scaled[y_kmeans == 0, 0] 选取所有第 0 簇数据点的第一个特征(横坐标)。
        • X_scaled[y_kmeans == 0, 1] 选取所有第 0 簇数据点的第二个特征(纵坐标)。
        • s=100 设置数据点的大小为 100。
        • c='red' 设置数据点的颜色为红色,label='Cluster 1' 为该簇添加标签(将用于图例)。
      3. plt.scatter(X_scaled[y_kmeans == 1, 0], X_scaled[y_kmeans == 1, 1], s=100, c='blue', label='Cluster 2'):

        • 同理,绘制属于第 1 簇的数据点,颜色为蓝色。
      4. plt.scatter(X_scaled[y_kmeans == 2, 0], X_scaled[y_kmeans == 2, 1], s=100, c='green', label='Cluster 3'):

        • 同理,绘制属于第 2 簇的数据点,颜色为绿色。
      5. plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='yellow', label='Centroids'):

        • 使用 plt.scatter() 绘制聚类中心点,大小设置为 300。
        • kmeans.cluster_centers_[:, 0] 表示所有簇中心的第一个特征值。
        • kmeans.cluster_centers_[:, 1] 表示所有簇中心的第二个特征值。
        • 颜色设置为黄色,标签为 Centroids,用于标识簇中心点。
      6. plt.title('K-means Clustering of Iris Data'):为图表设置标题为“K-means 聚类鸢尾花数据”。

      7. plt.xlabel('Feature 1 (scaled)'):设置横轴的标签为“特征 1(标准化后)”,代表第一个特征。

      8. plt.ylabel('Feature 2 (scaled)'):设置纵轴的标签为“特征 2(标准化后)”,代表第二个特征。

      9. plt.legend():显示图例,说明不同颜色代表的簇。

      10. plt.grid():启用网格,方便观察数据的分布。

      11. plt.show():显示绘制的散点图,展示 3 个簇的数据点分布及其中心。

      2.6 评价模型

      2.6.1 代码片段:

      import seaborn as sns
      from sklearn.metrics import confusion_matrix
      
      confusion_mat = confusion_matrix(y, y_kmeans)
      plt.figure(figsize=(8, 6))
      sns.heatmap(confusion_mat, annot=True, fmt='d', cmap='Blues',
                  xticklabels=['Cluster 0', 'Cluster 1', 'Cluster 2'],
                  yticklabels=['Class 0', 'Class 1', 'Class 2'])
      plt.title('Confusion Matrix')
      plt.xlabel('Predicted Clusters')
      plt.ylabel('True Classes')
      plt.show()
      

       

      2.6.2 实现目的:

      通过绘制混淆矩阵评估 K-Means 聚类的效果,比较聚类标签与真实标签之间的对应关系。

      2.6.3 代码解释:

      1. import seaborn as sns:导入 seaborn 库,seaborn 是一个高级数据可视化库,基于 matplotlib,提供了更美观和简洁的绘图接口。

      2. from sklearn.metrics import confusion_matrix:从 sklearn.metrics 模块中导入 confusion_matrix 函数,用于计算混淆矩阵。混淆矩阵是用于评估分类模型性能的表格,行表示实际类别,列表示预测类别。

      3. confusion_mat = confusion_matrix(y, y_kmeans):

        • 使用 confusion_matrix() 函数生成混淆矩阵。
        • y 是真实类别标签,y_kmeans 是聚类后的标签。
        • 该函数将返回一个矩阵,矩阵中的值表示每个类别中真实标签与预测标签的匹配情况。
      4. plt.figure(figsize=(8, 6)):创建一个大小为 8x6 英寸的图形窗口,准备绘制混淆矩阵。

      5. sns.heatmap(confusion_mat, annot=True, fmt='d', cmap='Blues', xticklabels=['Cluster 0', 'Cluster 1', 'Cluster 2'], yticklabels=['Class 0', 'Class 1', 'Class 2']):

        • 使用 sns.heatmap() 函数绘制混淆矩阵的热图。
        • confusion_mat 是混淆矩阵数据源。
        • annot=True 表示在每个单元格内显示具体的数值。
        • fmt='d' 指定数值以整数格式显示。
        • cmap='Blues' 指定热图的颜色映射为蓝色渐变。
        • xticklabels=['Cluster 0', 'Cluster 1', 'Cluster 2'] 和 yticklabels=['Class 0', 'Class 1', 'Class 2'] 分别为横轴和纵轴设置标签,表示聚类簇与真实类别的对应关系。
      6. plt.title('Confusion Matrix'):设置图的标题为“混淆矩阵”。

      7. plt.xlabel('Predicted Clusters'):设置横轴的标签为“预测簇”,表示 K-Means 聚类的结果。

      8. plt.ylabel('True Classes'):设置纵轴的标签为“真实类别”,表示鸢尾花的实际类别。

      9. plt.show():显示绘制的热图。通过观察混淆矩阵,可以评估 K-Means 聚类的准确性,特别是它与真实类别标签的对应关系。


      3.层次聚类对鸢尾花样本数据进行聚类

      3.1 导入所需的模块

      3.1.1 代码片段:

      import numpy as np
      import matplotlib.pyplot as plt
      from sklearn.datasets import load_iris
      from scipy.cluster.hierarchy import dendrogram, linkage
      from sklearn.preprocessing import StandardScaler
      

       

      3.1.2 实现目的:

      导入必要的库,用于数据加载、标准化处理、层次聚类和可视化树状图。

      3.1.3 代码解释:

      1. import numpy as np:导入 numpy 库,numpy 是 Python 中的基础科学计算库,支持多维数组和矩阵运算,虽然在这段代码中没有直接使用,但它通常是机器学习数据处理的基础库。

      2. import matplotlib.pyplot as plt:导入 matplotlib 库中的 pyplot 模块,用于绘制图形和数据可视化,并将其命名为 plt。

      3. from sklearn.datasets import load_iris:从 sklearn.datasets 中导入 load_iris 函数,用于加载鸢尾花数据集,方便进行聚类分析。

      4. from scipy.cluster.hierarchy import dendrogram, linkage:

        • dendrogram 用于绘制层次聚类的树状图(即“树形图”)。
        • linkage 是层次聚类的核心函数,它根据不同的聚类方法(如 ward、single、complete)计算聚类。
      5. from sklearn.preprocessing import StandardScaler:从 sklearn.preprocessing 中导入 StandardScaler 类,用于对特征数据进行标准化,使其均值为 0,标准差为 1,消除特征之间的尺度差异。

      3.2 加载鸢尾花数据并标准化

      3.2.1 代码片段:

      iris = load_iris()
      data = iris.data
      

       

      3.2.2 实现目的:

      加载鸢尾花数据集,并提取特征数据用于后续的聚类操作。

      3.2.3 代码解释:

      1. iris = load_iris():使用 load_iris() 函数加载鸢尾花数据集。鸢尾花数据集包含 150 个样本,每个样本有 4 个特征,并分为 3 类(Setosa、Versicolor、Virginica)。

      2. data = iris.data:提取数据集中的特征数据,存储在 data 中。这个数组的大小是 (150, 4),表示 150 个样本的 4 个特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度。

      3.3 数据标准化

      3.3.1 代码片段:

      scaler = StandardScaler()
      data_std = scaler.fit_transform(data)
      

       

      3.3.2 实现目的:

      对特征数据进行标准化处理,使其均值为 0,标准差为 1,消除不同特征之间的尺度差异。

      3.3.3 代码解释:

      1. scaler = StandardScaler():创建一个 StandardScaler 对象 scaler,用于后续的标准化处理。

      2. data_std = scaler.fit_transform(data):

        • fit_transform() 方法对数据进行标准化。首先计算特征的均值和标准差,然后将数据转换为标准化形式(即均值为 0,标准差为 1)。
        • data_std 是标准化后的数据,用于后续的层次聚类。

      3.4 进行层次聚类

      3.4.1 代码片段:

      linked = linkage(data_std, 'ward')

       

      3.4.2 实现目的:

      使用层次聚类算法对标准化后的数据进行聚类。

      3.4.3 代码解释:

      1. linked = linkage(data_std, 'ward'):
        • linkage() 函数用于执行层次聚类,data_std 是经过标准化的数据。
        • 'ward' 是一种聚类方法,称为“Ward 最小方差法”,它通过最小化方差来选择合并簇的方式,具有良好的聚类效果,常用于层次聚类。
        • linked 是聚类结果,包含了一系列数据点之间的聚类关系,用于后续绘制树状图。

      3.5 绘制树状图

      3.5.1 代码片段:

      plt.figure(figsize=(10, 7))
      dendrogram(linked,
                  orientation='top',
                  labels=iris.target,
                  distance_sort='descending',
                  show_leaf_counts=True)
      

       

      3.5.2 实现目的:

      通过树状图展示层次聚类的结果,显示每个数据点的合并顺序和距离。

      3.5.3 代码解释:

      1. plt.figure(figsize=(10, 7)):创建一个大小为 10x7 英寸的图形窗口,准备绘制树状图。

      2. dendrogram(linked, orientation='top', labels=iris.target, distance_sort='descending', show_leaf_counts=True):

        • dendrogram() 函数用于绘制树状图:
          • linked 是之前通过 linkage() 计算得到的聚类关系结果。
          • orientation='top' 表示将树状图的树顶置于上方,分支从上到下展开。
          • labels=iris.target:使用真实的类别标签(iris.target)作为树叶节点的标签。
          • distance_sort='descending':按距离降序排列聚类分支,距离越大的簇优先绘制。
          • show_leaf_counts=True:显示每个簇中的叶子节点数量,即该簇中的样本数量。

      3.6 添加红色水平线和显示图像

      3.6.1 代码片段:

      plt.axhline(y=10, color='r', linestyle='--')
      plt.show()
      

       

      3.6.2 实现目的:

      在树状图上添加一条水平的参考线,并显示最终的图像。

      3.6.3 代码解释:

      1. plt.axhline(y=10, color='r', linestyle='--'):

        • plt.axhline() 用于在图形中添加水平线。
        • y=10 指定水平线的纵坐标为 10,表示我们可以选择在此距离处切割树状图,确定簇的数量。
        • color='r' 指定水平线的颜色为红色,linestyle='--' 设置线条为虚线。
      2. plt.show():显示绘制好的树状图。通过观察树状图及其水平线,可以选择在不同的高度切割树状图,以确定不同的簇数量。

      总结

      • 这段代码实现了对鸢尾花数据集的层次聚类,并通过树状图可视化了数据点的合并过程。
      • 树状图的水平线可以帮助我们在特定距离处进行切割,从而确定适合的聚类簇数。

      4.密度聚类对鸢尾花样本数据进行聚类

      4.1 导入所需的模块

      4.1.1 代码片段:

      import numpy as np
      import matplotlib.pyplot as plt
      from sklearn.datasets import load_iris
      from sklearn.cluster import DBSCAN
      from sklearn.preprocessing import StandardScaler
      

       

      4.1.2 实现目的:

      导入必要的库,用于数据加载、标准化处理、执行 DBSCAN 密度聚类以及可视化聚类结果。

      4.1.3 代码解释:

      1. import numpy as np:导入 numpy 库,numpy 是用于科学计算的库,提供强大的多维数组处理能力,虽然在这段代码中没有直接使用,但 numpy 通常在数据处理和机器学习中被广泛应用。

      2. import matplotlib.pyplot as plt:导入 matplotlib 库中的 pyplot 模块,用于绘制图形和数据可视化,命名为 plt。

      3. from sklearn.datasets import load_iris:从 sklearn.datasets 中导入 load_iris 函数,用于加载经典的鸢尾花数据集。

      4. from sklearn.cluster import DBSCAN:从 sklearn.cluster 中导入 DBSCAN 类,用于执行 DBSCAN 聚类算法。DBSCAN 是基于密度的聚类方法,能够识别任意形状的簇,并且对噪声和异常值具有很好的鲁棒性。

      5. from sklearn.preprocessing import StandardScaler:从 sklearn.preprocessing 中导入 StandardScaler 类,用于标准化特征数据,消除特征尺度的影响。

      4.2 加载鸢尾花数据并标准化

      4.2.1 代码片段:

      iris = load_iris()
      data = iris.data
      

       

      4.2.2 实现目的:

      加载鸢尾花数据集,并提取特征数据用于后续的聚类分析。

      4.2.3 代码解释:

      1. iris = load_iris():使用 load_iris() 函数加载鸢尾花数据集。该数据集包含 150 条样本,每条样本有 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)。

      2. data = iris.data:从 iris 数据集中提取特征数据,并赋值给变量 data,这是一个 150 x 4 的数组,表示 150 个样本的 4 个特征。


      4.3 数据标准化

      4.3.1 代码片段:

      scaler = StandardScaler()
      data_std = scaler.fit_transform(data)
      

       

      4.3.2 实现目的:

      对特征数据进行标准化处理,使其均值为 0,标准差为 1,消除不同特征之间的尺度差异。

      4.3.3 代码解释:

      1. scaler = StandardScaler():创建一个 StandardScaler 对象 scaler,用于对数据进行标准化处理。

      2. data_std = scaler.fit_transform(data):

        • 使用 fit_transform() 方法对 data 进行标准化。
        • fit() 部分计算每个特征的均值和标准差。
        • transform() 部分根据计算出的均值和标准差对数据进行缩放,结果存储在 data_std 中,这是标准化后的数据。

      4.4 执行 DBSCAN 聚类

      4.4.1 代码片段:

      dbscan = DBSCAN(eps=1, min_samples=5)
      labels = dbscan.fit_predict(data_std)
      

       

      4.4.2 实现目的:

      使用 DBSCAN 聚类算法对标准化后的数据进行聚类,并生成每个样本的聚类标签。

      4.4.3 代码解释:

      1.dbscan = DBSCAN(eps=1, min_samples=5):

      • 创建一个 DBSCAN 模型对象 dbscan,其中 eps=1 和 min_samples=5 是该模型的两个主要参数。
        • eps=1:定义邻域的半径,即两个样本如果在这个半径内就认为它们是密度相连的。
        • min_samples=5:定义一个点成为核心点所需的最小邻域内点数。如果某个点的邻域中至少有 5 个点(包括自己),则该点被视为核心点。
      • DBSCAN 聚类算法通过计算样本之间的密度连接关系来识别簇,同时能够有效地处理噪声点。

      2.labels = dbscan.fit_predict(data_std):

      • fit_predict() 方法对标准化后的数据 data_std 进行训练和预测。
      • fit() 部分学习数据的密度分布,并确定每个样本的类别(即簇或噪声点)。
      • predict() 部分返回每个样本的聚类标签,存储在 labels 中。聚类标签为整数:正整数表示簇编号,-1 表示噪声点。

      4.5 绘制聚类结果

      4.5.1 代码片段:

      plt.scatter(data_std[:, 0], data_std[:, 1], c=labels, cmap='rainbow')
      plt.title('DBSCAN Clustering')
      plt.show()
      

       

      4.5.2 实现目的:

      通过二维散点图可视化 DBSCAN 聚类结果,展示每个样本所属的簇。

      4.5.3 代码解释:

      1.plt.scatter(data_std[:, 0], data_std[:, 1], c=labels, cmap='rainbow'):

      • 使用 plt.scatter() 绘制二维散点图。
      • data_std[:, 0] 表示标准化后数据的第一个特征(用于横坐标)。
      • data_std[:, 1] 表示标准化后数据的第二个特征(用于纵坐标)。
      • c=labels:设置每个样本的颜色,根据 labels(即聚类标签)来着色。
      • cmap='rainbow':使用 rainbow 颜色映射,将不同的聚类标签用不同的颜色表示。

      2.plt.title('DBSCAN Clustering'):设置图表标题为“DBSCAN 聚类”。

      3.plt.show():显示绘制的散点图,展示聚类结果。每个不同颜色的点代表不同的簇,标签为 -1 的样本点将被标记为噪声点。

      总结

      • 这段代码使用 DBSCAN(基于密度的空间聚类算法)对鸢尾花数据集进行了聚类分析。
      • DBSCAN 能识别任意形状的簇,并且自动处理噪声点(离群点),相比于 K-Means 这种必须指定簇数量的算法,DBSCAN 更加灵活。
      • 聚类结果通过二维散点图展示,每个簇用不同颜色标识,噪声点也被自动识别出来。

      5. 总体代码与结果分析

      5.1 K-means 算法对鸢尾花(Iris)数据进行聚类

      5.1.1 总体代码

      # 第一步:导入所需的模块
      import matplotlib.pyplot as plt
      from sklearn.datasets import load_iris
      from sklearn.cluster import KMeans
      from sklearn.preprocessing import StandardScaler
      
      # 第二步:加载并标准化鸢尾花数据集
      iris = load_iris()
      X = iris.data  # 特征数据
      y = iris.target  # 实际标签(用于后续比较)
      scaler = StandardScaler()
      X_scaled = scaler.fit_transform(X)
      
      # 第三步:使用“肘部法则”选择K值
      inertia = []
      K_range = range(1, 11)
      for k in K_range:
          kmeans = KMeans(n_clusters=k, random_state=42)
          kmeans.fit(X_scaled)
          inertia.append(kmeans.inertia_)
      
      # 绘制肘部图
      plt.figure(figsize=(8, 4))
      plt.plot(K_range, inertia, marker='o')
      plt.title('Elbow Method for Optimal K')
      plt.xlabel('Number of clusters (K)')
      plt.ylabel('Inertia')
      plt.grid()
      plt.show()
      
      # 第四步:使用选择后的K值初始化分类器
      k = 3
      kmeans = KMeans(n_clusters=k, random_state=42)
      y_kmeans = kmeans.fit_predict(X_scaled)
      
      # 第五步:绘制聚类结果
      plt.figure(figsize=(8, 6))
      plt.scatter(X_scaled[y_kmeans == 0, 0], X_scaled[y_kmeans == 0, 1], s=100, c='red', label='Cluster 1')
      plt.scatter(X_scaled[y_kmeans == 1, 0], X_scaled[y_kmeans == 1, 1], s=100, c='blue', label='Cluster 2')
      plt.scatter(X_scaled[y_kmeans == 2, 0], X_scaled[y_kmeans == 2, 1], s=100, c='green', label='Cluster 3')
      
      # 绘制聚类中心
      plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='yellow', label='Centroids')
      plt.title('K-means Clustering of Iris Data')
      plt.xlabel('Feature 1 (scaled)')
      plt.ylabel('Feature 2 (scaled)')
      plt.legend()
      plt.grid()
      plt.show()
      
      # 第六步:评价模型
      import seaborn as sns
      from sklearn.metrics import confusion_matrix
      
      confusion_mat = confusion_matrix(y, y_kmeans)
      plt.figure(figsize=(8, 6))
      sns.heatmap(confusion_mat, annot=True, fmt='d', cmap='Blues',
                  xticklabels=['Cluster 0', 'Cluster 1', 'Cluster 2'],
                  yticklabels=['Class 0', 'Class 1', 'Class 2'])
      plt.title('Confusion Matrix')
      plt.xlabel('Predicted Clusters')
      plt.ylabel('True Classes')
      plt.show()
      

      5.1.2 运行结果

      【机器学习】任务七:聚类算法 (K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类)【机器学习】任务七:聚类算法 (K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类)【机器学习】任务七:聚类算法 (K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类)

      5.1.3 结果分析

      图 1:肘部法则(Elbow Method)

      • 分析:
        • 图中显示了 K 值从 1 到 10 对应的簇内误差平方和(Inertia)。簇内误差平方和越低,说明簇内的数据点距离簇中心越近,聚类效果越好。
        • 从图中可以看到,在 K = 3 处,Inertia 下降明显变缓,形成一个肘部(Elbow)。这意味着选择 3 个簇是一个合适的选择,因为在此 K 值之后,增加簇的数量对簇内误差平方和的改善效果逐渐减小。
      • 结论:根据肘部法则,K = 3 是最优的簇数量,因此选择 K=3 进行聚类。

      图 2:K-means 聚类结果散点图

      • 分析:

        • 图中展示了鸢尾花数据集的前两个特征(经过标准化后)对应的聚类结果。每个点的颜色表示其所属的簇,红色、蓝色和绿色分别代表三个不同的簇,黄色圆点表示每个簇的聚类中心。
        • 从图中可以看出,K-means 算法将数据分成了三个簇,并且每个簇内的样本在图中表现为比较密集的簇形状。这表明 K-means 对鸢尾花数据集的特征进行了较好的划分。
      • 结论:K-means 对数据的三个簇的分布进行清晰划分,尽管在某些地方(如红色和绿色簇的交界处)有一定的重叠,但整体表现较好。

      图 3:混淆矩阵(Confusion Matrix)

      • 分析:

        • 混淆矩阵显示了聚类标签与真实类别标签的匹配情况。矩阵中的每个值表示真实类别和聚类标签的数量对比。
        • 横轴表示 K-means 聚类的预测结果,纵轴表示数据的真实类别。
        • 可以看到,Cluster 0 完全没有匹配到真实的 Class 0,而是大量匹配到了 Class 1 和 Class 2。这表明 K-means 对鸢尾花的第一类分类效果较差。
        • Cluster 1 主要匹配了 Class 0,但是也有一些样本错误匹配到 Cluster 2。
        • Cluster 2 主要对应的是 Class 2 的数据,分类效果相对较好。
      • 结论:K-means 对鸢尾花数据集的聚类效果不完全准确,尤其是在分类 Class 1 和 Class 2 时有较大的偏差。尽管聚类效果大体符合预期,但在实际应用中可能需要更精细的参数调整或采用其他算法(如 DBSCAN 或层次聚类)来提高聚类效果。

      5.2 层次聚类对鸢尾花样本数据进行聚类

      5.2.1 总体代码

      ## 层次聚类
      
      import numpy as np
      import matplotlib.pyplot as plt
      from sklearn.datasets import load_iris
      from scipy.cluster.hierarchy import dendrogram, linkage
      from sklearn.preprocessing import StandardScaler
      
      # 加载鸢尾花数据
      iris = load_iris()
      data = iris.data
      
      # 数据标准化
      scaler = StandardScaler()
      data_std = scaler.fit_transform(data)
      
      # 使用层次聚类
      linked = linkage(data_std, 'ward')
      
      # 绘制树状图
      plt.figure(figsize=(10, 7))
      dendrogram(linked,
                  orientation='top',
                  labels=iris.target,
                  distance_sort='descending',
                  show_leaf_counts=True)
      # 添加红色水平线
      plt.axhline(y=10, color='r', linestyle='--')
      plt.show()
      

      5.2.2 运行结果

      【机器学习】任务七:聚类算法 (K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类)

      5.2.3 结果分析

      树状图分析:

      1. 层次结构:

        • 树状图展示了层次聚类的过程。最底层的叶节点代表原始的数据点,逐步向上合并,最终所有数据点聚合为一个簇。
        • 水平线的高度表示簇合并时的距离。距离越大,说明合并的簇之间的相似性越低。
      2. 红色虚线:

        • 红色的虚线(水平线)位于距离约为 10 的位置,表示在这个位置切割树状图,得到了几个不同的簇。
        • 从图中可以看出,在这个切割线处,树状图被分割成了 3 个主要簇。这个簇数量与前面 K-means 聚类中选出的 3 个簇一致,说明这个切割位置是合理的。
      3. 簇的数量:

        • 根据树状图,可以直观地看到数据如何逐步合并为不同的簇。在红色虚线的切割位置,可以看到较清晰的三个聚类分支(颜色不同的区域),这与 K-means 的结果一致。
      4. 聚类之间的距离:

        • 水平线的长度代表了簇之间的合并距离。较长的水平线表示在该处合并的簇之间距离较远,说明它们的相似性较低。
        • 从图中可以看到,最大的距离(最高的线)代表了最后一次合并的两个大簇,这说明这两个大簇之间的相似度相对较低。

      总结:

      • 从这张树状图中可以看出,层次聚类将数据逐渐聚合为簇,切割在红色虚线处时,我们得到了 3 个主要的簇。
      • 这与之前使用肘部法则确定的 K 值(3 个簇)是一致的,进一步验证了数据的聚类结果。
      • 如果你想要调整簇的数量,可以选择在树状图的其他高度切割,生成更多或更少的簇。

      5.3 密度聚类对鸢尾花样本数据进行聚类

      5.3.1 总体代码

      ## DBSCAN密度聚类
      
      import numpy as np
      import matplotlib.pyplot as plt
      from sklearn.datasets import load_iris
      from sklearn.cluster import DBSCAN
      from sklearn.preprocessing import StandardScaler
      
      # 加载鸢尾花数据
      iris = load_iris()
      data = iris.data
      
      # 数据标准化
      scaler = StandardScaler()
      data_std = scaler.fit_transform(data)
      
      # 使用DBSCAN聚类
      dbscan = DBSCAN(eps=1, min_samples=5)
      labels = dbscan.fit_predict(data_std)
      
      # 绘制聚类结果
      plt.scatter(data_std[:, 0], data_std[:, 1], c=labels, cmap='rainbow')
      plt.title('DBSCAN Clustering')
      plt.show()
      

      5.3.2 运行结果

      【机器学习】任务七:聚类算法 (K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类)

      5.3.3 结果分析

      图像分析:

      1. 红色和青色的点:

        • 图中不同颜色的点代表不同的簇,DBSCAN 已经将数据分为了两个主要的簇:
          • 红色点表示其中一个簇。
          • 青色点表示另一个簇。
        • DBSCAN 能够识别形状不规则的簇,适合处理非球形簇,且不需要预先指定簇的数量(与 K-means 不同)。
      2. 紫色的点:

        • 紫色的点代表 噪声点(离群点)。DBSCAN 能够识别数据中的噪声,噪声点是那些无法归入任何簇的数据点。
        • 这些点被 DBSCAN 标记为 -1(噪声标签),因为它们在定义的密度范围内没有足够的邻居点(即它们没有足够高的密度,或不在任何簇的核心区域内)。
      3. 密度参数的影响:

        • DBSCAN 的两个关键参数是 eps(邻域半径)和 min_samples(最小样本数)。这张图是基于设置的 eps=1 和 min_samples=5 得到的结果。
        • 这两个参数的选择非常重要,它们决定了哪些点会被认为是核心点、边界点或者噪声点。你可以调整这两个参数来尝试不同的聚类效果。

      聚类效果评价:

      1. 簇的形状:

        • DBSCAN 在此数据集上识别出了两个簇,且这两个簇的形状不规则,与之前 K-means 划分的球形簇不同。这展示了 DBSCAN 的强大之处,它能够发现任意形状的簇。
      2. 噪声点的检测:

        • 在图中可以看到有一些数据点(紫色的点)被识别为噪声点。这些点可能是异常点,或者在当前参数下无法归入任何簇。
        • DBSCAN 能够自然处理这种情况,而不像 K-means 那样必须将每个点分配到某个簇。

      总结:

      • DBSCAN 成功将数据集分成了两个主要簇,并识别了一些噪声点。
      • 它适用于这种含有异常点或者非规则形状簇的数据集,不需要事先确定簇的数量。
      • 如果你想优化结果,可以通过调整 eps 和 min_samples 参数来改善聚类表现。
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/FHY26828/article/details/142906652,作者:FHYAAAX,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:基于Java的公务员考试资料共享平台的设计与实现

      下一篇:SpringAOP总结

      相关文章

      2025-05-19 09:04:53

      【NetApp数据恢复】误操作导致NetApp存储的卷丢失,卷内虚拟机无法访问的数据恢复案例

      【NetApp数据恢复】误操作导致NetApp存储的卷丢失,卷内虚拟机无法访问的数据恢复案例

      2025-05-19 09:04:53
      存储 , 数据 , 数据恢复 , 解压
      2025-05-19 09:04:30

      【Canvas技法】辐射式多道光影的实现

      【Canvas技法】辐射式多道光影的实现

      2025-05-19 09:04:30
      代码 , 函数 , 实现
      2025-05-19 09:04:14

      复杂度的OJ练习

      复杂度的OJ练习

      2025-05-19 09:04:14
      代码 , 复杂度 , 思路 , 数组 , 算法
      2025-05-16 09:15:10

      画图时使用的函数和一些错误处理

      画图时使用的函数和一些错误处理

      2025-05-16 09:15:10
      数据
      2025-05-14 10:33:25

      30天拿下Rust之高级类型

      Rust作为一门系统编程语言,以其独特的内存管理方式和强大的类型系统著称。其中,高级类型的应用,为Rust的开发者提供了丰富的编程工具和手段,使得开发者可以更加灵活和高效地进行编程。

      2025-05-14 10:33:25
      Rust , type , 代码 , 函数 , 类型 , 返回
      2025-05-14 10:33:25

      超级好用的C++实用库之国密sm4算法

      国密SM4算法,全称为国家密码管理局制定的SM4分组密码算法,是中国自主设计的商用密码算法标准之一,用于数据的对称加密。

      2025-05-14 10:33:25
      加密 , 参数 , 数据 , 模式 , 解密
      2025-05-14 10:33:25

      webpack5基础--13_生产模式介绍

      生产模式是开发完成代码后,我们需要得到代码将来部署上线。

      2025-05-14 10:33:25
      npm , 代码 , 优化 , 指令 , 模式 , 运行
      2025-05-14 10:33:16

      30天拿下Rust之模式与模式匹配

      Rust语言以其强大的类型系统和所有权模型而著称,而模式与模式匹配则是Rust中一种非常强大且灵活的工具,它允许我们在编译时根据数据的结构进行条件分支处理。

      2025-05-14 10:33:16
      match , 代码 , 匹配 , 模式 , 模式匹配 , 绑定
      2025-05-14 10:07:38

      30天拿下Python之函数

      在Python中,函数是一段可以重复使用的代码块,它可以提高代码的可重用性和可维护性,是编程中非常重要的概念。

      2025-05-14 10:07:38
      lambda , 代码 , 传递 , 关键字 , 函数 , 参数 , 定义
      2025-05-14 10:07:38

      30天拿下Rust之枚举

      Rust中的枚举是一种用户定义的类型,它允许你为一组相关的值赋予友好的名称。在Rust中,枚举是强大的工具,它们不仅仅用于表示几个固定的值,还可以包含函数和方法,使得枚举成员可以有自己的行为。

      2025-05-14 10:07:38
      match , None , Rust , 代码 , 枚举 , 类型
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5245890

      查看更多

      最新文章

      【Canvas技法】辐射式多道光影的实现

      2025-05-19 09:04:30

      复杂度的OJ练习

      2025-05-19 09:04:14

      30天拿下Rust之高级类型

      2025-05-14 10:33:25

      超级好用的C++实用库之国密sm4算法

      2025-05-14 10:33:25

      webpack5基础--13_生产模式介绍

      2025-05-14 10:33:25

      30天拿下Rust之模式与模式匹配

      2025-05-14 10:33:16

      查看更多

      热门文章

      Python|斐波那契数列

      2023-02-27 10:01:21

      游戏编程之十一 图像页CPICPAGE介绍

      2022-11-28 01:25:04

      PHP:将list列表转为tree树形数据

      2023-02-28 08:23:26

      数据结构与算法之七 栈

      2022-11-17 12:37:20

      Python编程:Crypto模块RSA非对称加密

      2023-02-15 10:02:30

      Python编程:利用peewee的model_to_dict进行数据迁移

      2023-02-21 06:21:46

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      C#关于多线程的线程问题

      java项目读取配置文件实例代码

      规定1和A对应、2和B对应、3和C对应...26和Z对应,那么一个数字字符串比如"111”就可以转化为:"AAA"、"KA"和"AK"。给定一个只有数字字符组成的字符串str,请问有多少种转化结果?

      接口自动化测试高频面试题

      探索 CodeWave低代码技术的魅力与应用

      我爱java系列---【日期转换工具类】

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号