文章目录
- 前言
- 一、本文的原始代码
- 二、代码的逐行详细解释
- 总结
前言
接上一篇博客,详细解释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提供了大量能使我们快速便捷地处理数据的函数和方法。