模糊聚类实现鸢尾花(Iris)分类——计算智能作业(附MATLAB代码)

问题背景

Iris flower数据集是1936年由Sir Ronald Fisher [ 1 ] \color{#0000FF}{[1]} [1]引入的经典多维数据集,可以作为判别分析(discriminant analysis)的样本。该数据集包含Iris的三个品种分别是山鸢尾 (Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica),各50个样本,每个样本还有4个特征参数,分别是萼片(sepals)的长宽和花瓣(petals)的长宽。假定现在出现了一株鸢尾植物,如何通过其所具有的特征来推断出它属于三类中的哪一类,这是机器学习中的典型的分类问题。
问题描述:试用模糊聚类相关方法分析。可分别选择聚类个数为3,4或5的情况下,得到聚类结果,并绘制相应图形。

数据集点击此处

模糊聚类及模糊推理系统

C均值模糊聚类

C均值模糊聚类(Fuzzy C-Means,FCM) [ 2 ] \color{#0000FF}{[2]} [2]是一种聚类方法,它允许一段数据属于两个或更多的聚类。在众多模糊聚类算法中,模糊C-均值(FCM)算法应用最广泛且较成功,它通过优化目标函数得到每个样本点对所有类中心的隶属度,从而决定样本点的类属以达到自动对样本数据进行分类的目的。它基于以下目标函数的最小化:

J m = ∑ i = 1 N ∑ j = 1 C u i j m ∥ x i − c j ∥ 2 , 0 ≤ m < ∞ {J_m} = \sum\limits_{i = 1}^N {\sum\limits_{j = 1}^C {u_{ij}^m} } {\left\| {{x_i} - {c_j}} \right\|^2},0 \le m < \infty Jm=i=1Nj=1Cuijmxicj2,0m<
m m m是任何大于 1 1 1的实数, u i j u_{ij} uij x i x_i xi在集群j中的隶属度, x i x_i xi是第 i i i d d d维测量数据, c j c_j cj是簇的 d d d维中心,是表示任意测量数据与中心相似度的任意范数。
对上述目标函数进行迭代优化,对隶属度 u i j u_{ij} uij和聚类中心 c j c_j cj进行更新,进行模糊划分:

u i j = 1 ∑ k = 1 c ( ∥ x i − x j ∥ ∥ x i − c k ∥ ) 2 m − 1 {u_{ij}} = \frac{1}{{\sum\limits_{k = 1}^c {{{\left( {\frac{{\left\| {{x_i} - {x_j}} \right\|}}{{\left\| {{x_i} - {c_k}} \right\|}}} \right)}^{\frac{2}{{m - 1}}}}} }} uij=k=1c(xickxixj)m121

Takagi-Sugeno模糊推理系统

Takagi-Sugeno-Kang(TS)模糊推理 [ 3 ] \color{#0000FF}{[3]} [3],使用的是输入值的常量或线性函数的单变量输出隶属函数。与Mamdani系统相比,Sugeno系统的去模糊化过程在计算上更有效,因为它使用的是几个数据点的加权平均值或加权和,而不是计算二维区域的质心。系统的最终输出是所有规则输出的加权平均值:
F i n a l O u t p u t = ∑ i = 1 N w i z i ∑ i = 1 N w i {\rm{ Final Output }} = \frac{{\sum\limits_{i = 1}^N {{w_i}} {z_i}}}{{\sum\limits_{i = 1}^N {{w_i}} }} FinalOutput=i=1Nwii=1Nwizi

z i z_i zi是规则输出级别,它是输入值的常值或线性函数; w i w_i wi为规则触发强度; N N N为规则数目。下图显示了一个输入值为 x x x y y y的双输入系统。
在这里插入图片描述
TS模糊推理具有计算效率高、能很好地运用优化和自适应技术、很适合数学分析的特点,所以本文的分类任务拟采用基于TS模糊推理的FCM系统进行分析。

实验结果及分析

本文实验环境为MATLAB2018b,首先对Irsi数据集进行预处理,打乱数据集并按照8:2的比例拆分为训练集和测试集。主要的思路就是利用先基于TS模糊推理的FCM系统生成初始模糊聚类系统,然后利用自适应神经模糊系统 [ 5 , 6 ] \color{#0000FF}{[5,6]} [5,6]来对该模糊聚类系统进行训练微调,最后通过可视化结果和均方误差来评估该系统的准确性与有效性。
由初始系统的聚类中心和隶属度矩阵可得到聚类分布可视化结果,如图3.1和3.2所示,从图中可以看出第三类与其他两类能够很好地区分开,第一类和第二类的隶属度曲线在大于50个样本的位置依然存在较大的值,而且样本点的分布也有重叠,所以第一类和第二类不好区分。

在这里插入图片描述

在这里插入图片描述

初始系统通过自适应神经网络技术的训练微调后,基于TS模糊推理的FCM系统的误差减小,性能略有提升。训练及测试误差随迭代次数的变化曲线如图3.3、图3.4所示,均方误差如表3.1所示。
在这里插入图片描述
在这里插入图片描述

Matlab源代码

%%%计算智能assignment,使用FCM和anfis对鸢尾花进行聚类分析

% 自己更改数据集的文件后缀,将文件中的类别名改为数字label,
% 如Iris-setosa对应1,更改好的数据文件博客评论区我已给出
iris = csvread('iris.csv');			

iris = iris(randperm(size(iris, 1)), :);  %打乱数据集

[row, col] = size(iris);
iris_train = iris(1:uint8(row*0.8), :);  %拆分数据集
iris_test = iris(uint8(row*0.8)+1:end, :);

setosaIndex = iris(:,5)==1;
versicolorIndex = iris(:,5)==2;
virginicaIndex = iris(:,5)==3;

setosa = iris(setosaIndex,:);
versicolor = iris(versicolorIndex,:);
virginica = iris(virginicaIndex,:);

Characteristics = {'sepal length','sepal width','petal length','petal width'};
pairs = [1 2; 1 3; 1 4; 2 3; 2 4; 3 4];  %以不同的“特征对”聚类


Nc = 3;  %聚类中心个数
M = 2.0; %分割矩阵的指数
maxIter = 100;  %最大迭代次数
minImprove = 1e-5;  %迭代停止的误差条件
clusteringOptions = [M maxIter minImprove false];

%配置初始FIS参数
genOpt = genfisOptions('FCMClustering', 'FISType','sugeno');  %使用Sugeno推理
genOpt.NumClusters = Nc;  %聚类中心个数
genOpt.Exponent = clusteringOptions(1); 
genOpt.MaxNumIteration = clusteringOptions(2);
genOpt.MinImprovement = clusteringOptions(3);
genOpt.Verbose = clusteringOptions(4);

inputData = iris_train(:,1:size(iris,2)-1);
outputData = iris_train(:,size(iris,2));
infis = genfis(inputData,outputData,genOpt);  %定义初始FCM模糊系统

%配置anfis训练参数
opt = anfisOptions('InitialFIS',infis);
opt.EpochNumber = 150;             % 最大训练轮数
opt.ErrorGoal = 1e-5;
opt.DisplayANFISInformation = 0;  % 打印模糊推理系统的信息
opt.DisplayErrorValues = 1;       % 打印每一个epoch的训练误差
opt.DisplayStepSize = 0;
opt.DisplayFinalResults = 1;
opt.ValidationData = iris_test;  % 设置验证数据

[fis,trainError,stepSize,chkFIS,chkError] = anfis(iris_train,opt);  %训练FIS,返回验证结果

% 训练前模糊系统输出与真值的均方误差
trainout1 = evalfis(iris_train(:, 1:4), infis);
trainRMSE1 = norm(trainout1-iris_train(:, 5))/sqrt(length(trainout1))
testout1 = evalfis(iris_test(:, 1:4), infis);
testRMSE1 = norm(testout1-iris_test(:, 5))/sqrt(length(testout1))

% 训练后模糊系统输出与真值的均方误差
trainout2 = evalfis(iris_train(:, 1:4), fis);
trainRMSE2 = norm(trainout2-iris_train(:, 5))/sqrt(length(trainout2))
testout2 = evalfis(iris_test(:, 1:4), fis);
testRMSE2 = norm(testout2-iris_test(:, 5))/sqrt(length(testout2))

[minChkErr, n] = min(chkError);   % 返回验证数据的最小误差,及其对应的训练epoch数

s = ['\leftarrow 最小误差为', num2str(minChkErr),',epoch=', num2str(n)];
figure,
plot(trainError, 'linewidth', 1.5), hold on,
plot(chkError, 'linewidth', 2), 
xlabel('迭代次数');
ylabel('均方误差');
text(n, minChkErr, s, 'FontWeight','bold','FontSize', 14);
legend('训练误差', '测试误差', 'Location', 'best');
set(gca,'FontSize',16);


%%%%%% 分类结果可视化 %%%%%%%
[centers,U,obj_fcn] = fcm(iris,Nc,clusteringOptions);  
% % center:迭代后得到的聚类中心;U:隶属度矩阵; obj_fcn:目标函数在迭代过程中的值

%按照不同的“特征对”区分,画出样本的分布
figure('NumberTitle', 'off', 'Name','样本分布')
for i = 1:6
    x = pairs(i,1); 
    y = pairs(i,2);   
    subplot(2,3,i)
    plot([setosa(:,x) versicolor(:,x) virginica(:,x)],...
         [setosa(:,y) versicolor(:,y) virginica(:,y)], '.')
    xlabel(Characteristics{x})
    ylabel(Characteristics{y})
end
for i = 1:6
    subplot(2,3,i);
    for j = 1:Nc
        x = pairs(i,1);
        y = pairs(i,2);
        text(centers(j,x),centers(j,y),int2str(j),'FontWeight','bold','FontSize', 14);
    end
end

% 因为样本顺序被打乱,可通过将隶属度值从大到小排列观察区分度
U(1,:) = sort(U(1,:),'descend');
U(2,:) = sort(U(2,:), 'descend');
U(3,:) = sort(U(3,:), 'descend');
figure('NumberTitle', 'off', 'Name','样本隶属度') ;
subplot(3,1,1);
plot(U(1,:),'-b');
title('隶属度矩阵值')
ylabel('第一类')
set(gca,'FontSize',16);
subplot(3,1,2);
plot(U(2,:),'-r');
ylabel('第二类')
set(gca,'FontSize',16);
subplot(3,1,3);
plot(U(3,:),'-g');
xlabel('样本数')
ylabel('第三类')
set(gca,'FontSize',16);

参考文献

[1] Fisher,R.A. “The use of multiple measurements in taxonomic problems” Annual Eugenics, 7, Part II, 179-188 (1936); also in “Contributions to Mathematical Statistics” (John Wiley, NY, 1950).
[2] Bezdec, J.C., Pattern Recognition with Fuzzy Objective Function Algorithms, Plenum Press, New York, 1981.
[3] Sugeno, M., Industrial applications of fuzzy control, Elsevier Science Pub. Co., 1985.
[4] Mamdani, E.H. and S. Assilian, “An experiment in linguistic synthesis with a fuzzy logic controller,” International Journal of Man-Machine Studies, Vol. 7, No. 1, pp. 1-13, 1975.
[5] Jang, J.-S. R., “Fuzzy Modeling Using Generalized Neural Networks and Kalman Filter Algorithm,” Proc. of the Ninth National Conf. on Artificial Intelligence (AAAI-91), pp. 762-767, July 1991.
[6] Jang, J.-S. R., “ANFIS: Adaptive-Network-based Fuzzy Inference Systems,” IEEE Transactions on Systems, Man, and Cybernetics, Vol. 23, No. 3, pp. 665-685, May 1993.

  • 16
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值