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

news/2024/5/20 6:03:10 标签: 聚类

在这里插入图片描述

文章目录

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


前言

接上一篇博客,详细解释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.niftyadmin.cn/n/5231036.html

相关文章

使用git filter: clean,smudge管理思源笔记的单行json文件`.sy`,减少冲突,方便合并,同时保证性能

文章目录 原理/动机缺点配置步骤脚本代码/可执行文件 原理/动机 思源笔记的单行json文件.sy,相比多行json文件,据说可提高30~50%的读写、解析效率,但是单行文件用git管理时很容易发生冲突,diff, merge效率也很低。 使用git filt…

代码随想录训练营第五十二天300.最长递增子序列674. 最长连续递增序列718. 最长重复子数组

300.最长递增子序列 题目链接 300. 最长递增子序列 - 力扣(LeetCode) 讲解链接 代码随想录 (programmercarl.com) 定义dp数组dp[i]为以num[i]为结尾的增长数组的最大长度; 此时dp[0]1; i遍历nums数组的长度,逐渐形成以每个元素结…

卡码网15 .链表的基本操作III

链表的基础操作III 时间限制:1.000S 空间限制:128MB 题目描述 请编写一个程序,实现以下链表操作:构建一个单向链表,链表中包含一组整数数据。 1. 实现在链表的第 n 个位置插入一个元素,输出整个链表的…

2023-12-01 事业-代号s-如何装修“高转化“首页

摘要: 2023-12-01 事业-代号s-如何装修"高转化"首页 如何装修"高转化"首页 影响独立站转化率6大因素:产品、素材、受众、落地页、结算流程、复购。 今天就来分享下,独立站高转化首页如何装修?整个网站首页框架应该放置什么内容? 传统设计 VS 8P设计 …

JSON详细教程

😊JSON详细教程 🚩JSON简介☃️JSON语法规则🔊JSON和JavaScript对象的区别 ☃️JSON数据类型字符串🔊数字🔊布尔值🔊数组🔊对象🔊Null ☃️JSON对象🔊访问JSON对象的值&a…

TA-Lib学习研究笔记——Price Transform (五)

TA-Lib学习研究笔记——Price Transform (五) 1.AVGPRICE Average Price 函数名:AVGPRICE 名称:平均价格函数 语法: real AVGPRICE(open, high, low, close) df[AVGPRICE] tlb.AVGPRICE(df[open],df[high],df[low…

python 使用reportlab打造29页图文并茂pdf(全网reportlab最强pdf自动化生成代码)

python 使用reportlab打造29页图文并茂pdf(全网reportlab最强pdf自动化生成代码) 这次项目所使用的代码如果同志们可以灵活使用,基本上可以解决百分之九十以上的pdf模板自动化生成。 最近博主,做了一个项目,使用reportlab制作pd…

Peter算法小课堂—差分与前缀和

差分 Codeforces802 D2C C代码详解 差分_哔哩哔哩_bilibili 一维差分 差分与前缀和可以说成减法和加法的关系、除法和乘法的关系、积分和微分的关系(听不懂吧) 给定数组A,S为A的前缀和数组,则A为S的差分数组 差分数组构造 现…