当前位置: 首页 > article >正文

模糊C均值(Fuzzy C-means,FCM)聚类的python程序代码的逐行解释,看完你也会写!!

在这里插入图片描述

文章目录

  • 前言
  • 一、本文的原始代码
  • 二、代码的逐行详细解释
  • 总结


前言

接上一篇博客,详细解释FCM聚类的程序代码!!

一、本文的原始代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
import skfuzzy as fuzz
import matplotlib
matplotlib.use('TkAgg')

# 加载鸢尾花数据集
iris = datasets.load_iris()
data = iris.data

# 设置模糊C均值聚类的参数
n_clusters = 3  # 聚类数目
max_iter = 100  # 最大迭代次数
fuzziness = 2.0  # 模糊度

# 运行模糊C均值聚类算法
cntr, u, u0, d, jm, p, fpc = fuzz.cluster.cmeans(data.T, n_clusters, m=fuzziness, error=0.005, maxiter=max_iter, init=None)

# 获取最大隶属度的聚类标签
cluster_labels = np.argmax(u, axis=0)

# 绘制聚类图
colors = ['r', 'g', 'b']
for i in range(n_clusters):
    cluster_points = data[cluster_labels == i]
    plt.scatter(cluster_points[:, 0], cluster_points[:, 1], c=colors[i], label=f'Cluster {i+1}')

plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Fuzzy C-means Clustering of Iris Dataset')
plt.legend()
plt.show()

二、代码的逐行详细解释

这是一个使用模糊C均值(Fuzzy C-means,FCM)聚类算法对鸢尾花(Iris)数据集进行聚类的Python代码。

import numpy as np: 导入numpy库,并使用别名np。numpy是Python中用于科学计算的一个库,它提供了大量的数学函数和高效的多维数组对象。

import matplotlib.pyplot as plt: 导入matplotlib的pyplot模块,并使用别名plt。matplotlib是一个用于创建图表和其他可视化内容的库。

from sklearn import datasets: 从scikit-learn库中导入datasets模块,这可以让我们加载鸢尾花数据集。

import skfuzzy as fuzz: 导入skfuzzy库,这是一个用于模糊逻辑和模糊系统的Python库,这里使用它来运行模糊C均值聚类。

import matplotlib: 导入matplotlib库,这是用于创建图表和其他可视化内容的库。

matplotlib.use('TkAgg'): 设置matplotlib的后端为’TkAgg’,这是用于创建图形用户界面(GUI)的库。

iris = datasets.load_iris(): 加载鸢尾花数据集。这个数据集是scikit-learn库中预先加载的数据集之一。它包含了150个样本,每个样本有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。

data = iris.data: 获取鸢尾花数据集的数据部分。

n_clusters = 3: 设置聚类的数量为3。这是根据鸢尾花数据集的特性设置的,该数据集通常被划分为三类:Setosa、Versicolour和Virginica。

max_iter = 100: 设置最大迭代次数为100。这是模糊C均值聚类算法的最大迭代次数。

fuzziness = 2.0: 设置模糊参数为2.0。这个参数决定了聚类的模糊程度。

cntr, u, u0, d, jm, p, fpc = fuzz.cluster.cmeans(data.T, n_clusters, m=fuzziness, error=0.005, maxiter=max_iter, init=None): 使用skfuzzy库的cmeans函数运行模糊C均值聚类算法。其中data.T是数据的转置,n_clusters是聚类的数量,m是模糊参数,error是停止条件,maxiter是最大迭代次数,init是初始化方法(这里设置为None,表示自动选择初始化方法)。

cluster_labels = np.argmax(u, axis=0): 获取每个样本的聚类标签。这里使用numpy的argmax函数来找出每一行的最大值索引,这些索引就是聚类标签。

这是一个for循环,用于绘制聚类结果。首先,它定义了颜色数组为[‘r’, ‘g’, ‘b’],然后遍历每个聚类(i从0到2)。

对于每个聚类,它找出属于该聚类的样本(cluster_labels == i),然后使用matplotlib的scatter函数绘制这些样本。样本的颜色由它们的聚类标签决定,标签0对应红色,标签1对应绿色,标签2对应蓝色

最后,它添加了x轴标签、y轴标签和标题,然后显示图表。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。


http://www.kler.cn/a/152974.html

相关文章:

  • sso/单点认证的理解
  • 虹科分享 | 平衡速度和优先级:为多样化的实时需求打造嵌入式网络(4)——从理论到实践:CANopen源代码配置
  • RocketMQ-快速实战
  • 【数电笔记】逻辑代数的基本定律、常用公式
  • 机器学习ROC曲线中的阈值thresholds
  • 传统算法: Pygame 实现快速排序
  • Promise的resolve和reject方法(手写题)
  • 零基础学Python的第六天||字符串(3)
  • 喜报 | 通付盾WAAP解决方案入选国家工业信息安全发展研究中心“2023年数字化转型自主创新解决方案优选案例”
  • 使用Java将yaml转为properties,保证顺序、实测无BUG版本
  • 11-30 SpringBoot2
  • c语言练习13周(1~5)
  • 【MATLAB源码-第91期】基于matlab的4QAM和4FSK在瑞利(rayleigh)信道下误码率对比仿真。
  • Kafka(一)在WSL单机搭建Kafka伪集群
  • 京东数据平台(数据运营)-2023年京东智能穿戴设备运营数据分析
  • QLabel实现点击事件
  • 实施全链路压测的步骤是怎样的?
  • 【LeetCode:2336. 无限集中的最小数字 | 数据结构设计】
  • XUbuntu22.04之安装OBS30.0强大录屏工具(一百九十五)
  • C++概念相关练习题