首页 > 编程知识 正文

多元统计分析聚类方法,matlab查看聚类分析结果的数据

时间:2023-05-06 10:09:32 阅读:277585 作者:1083

如何快速上手FCM,无疑是理论公式推导结合实战程序,话不多说,直接进入正题。

1 理论公式推导 1.1 目标函数构建





1.2 隶属度公式推导



1.3 聚类中心公式推导


2 MATLAB实例代码

文件运行需要iris.txt文件。
数据传送门:https://www.ilovematlab.cn/thread-597980-1-1.html

clear;clc;close all;%FCM--模糊c均值聚类--Fuzzy C-means--实例%% 1.数据与参数输入iris=load('iris.txt');rawiris=iris(:,1:4);c=3; %聚类数m=1.5; %模糊指标Max=1000; %最大迭代次数tol=1e-3; %精度%% 2.数据归一化[nrow,ncol]=size(rawiris);normdata=zeros(nrow,ncol);for i=1:ncol for j=1:nrow normdata(j,i)=(rawiris(j,i)-std(rawiris(:,i)))/mean(rawiris(:,i)); endend%% 3.FCM聚类分析% 3.1 初始化隶属度矩阵u=rand(c,nrow);for j=1:nrow u(:,j) = u(:,j)./sum(u(:,j)); %每个点的隶属度和为1end% 3.2 初始化聚类中心v=repmat(max(normdata,[],1),c,1).*rand(c,ncol);for i=1:c v(i,:)=sum((normdata(:,:).*repmat(u(i,:)'.^m,1,ncol)),1)./sum(u(i,:).^m); %聚类中心更新公式end% 3.3 聚类v_old=v;delta=1e4;k=0;while (k<Max && delta>tol) for i = 1:c for j = 1:nrow u(i, j) = 1/sum((euclidean(normdata(j, :), v(i, :))./euclidean(normdata(j, :), v)).^(2/(m-1))); end end for i = 1:c v(i, :) = sum((normdata(:, :).*repmat(u(i, :)'.^m, 1, ncol)), 1)./sum(u(i, :).^m); end v_new = v; delta = max(max(abs(v_new-v_old))); v_old = v; k = k+1;endprediction = zeros(1, nrow);for i=1:nrow [M,prediction(i)]=max(u(:,i));end

此外,还需要调用euclidean函数:

function [d] = euclidean(x, Y)S = size(Y);d = sum((repmat(x, [S(1),1])-Y).^2, 2);d = sqrt(d);end 3 参考资料

[1] https://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CMFD&dbname=CMFD201702&filename=1017156656.nh&v=MjA4MTJGeXZsVTc3TlZGMjZHYks5R05mSnFaRWJQSVI4ZVgxTHV4WVM3RGgxVDNxVHJXTTFGckNVUjdxZll1Wm0=
[2] https://github.com/HosseinAbedi/FCM

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。