精华内容
下载资源
问答
  • matlab中模糊c均值聚类
    2021-04-22 00:58:17

    应用背景数学系本科毕业设计中有不少是与模糊数学相关的,我的题目是模糊聚类分析的有效性问题初探,FCM算法是我论文中不可或缺的部分,在此我将FCM算法的两种迭代形式的MATLAB代码写于下,也许有的同学会用得着

    关键技术

    模糊C均值聚类(FCM),即众所周知的模糊ISODATA,是用隶属度确定每个数据点属于某个聚类的程度的一种聚类算法。1973年,Bezdek提出了该算法,作为早期硬C均值聚类(HCM)方法的一种改进。

    FCM把n个向量xi(i=1,2,…,n)分为c个模糊组,并求每组的聚类中心,使得非相似性指标的价值函数达到最小。FCM与HCM的主要区别在于FCM用模糊划分,使得每个给定数据点用值在0,1间的隶属度来确定其属于各个组的程度。与引入模糊划分相适应,隶属矩阵U允许有取值在0,1间的元素。不过,加上归一化规定,一个数据集的隶属度的和总等于1.

    FCM的价值函数(或目标函数)就是所有个点隶属度乘以该点与中心的欧氏距离之和。

    在批处理方式运行时,FCM用下列步骤确定聚类中心ci和隶属矩阵U[1]:

    步骤1:用值在0,1间的随机数初始化隶属矩阵U,使其满足式(6.9)中的约束条件

    步骤2:用式(6.12)计算c个聚类中心ci,i=1,…,c。

    步骤3:根据式(6.10)计算价值函数。如果它小于某个确定的阀值,或它相对上次价值函数值的改变量小于某个阀值,则算法停止。

    步骤4:用(6.13)计算新的U矩阵。返回步骤2。

    上述算法也可以先初始化聚类中心,然后再执行迭代过程。由于不能确保FCM收敛于一个最优解。算法的性能依赖于初始聚类中心。因此,我们要么用另外的快速算法确定初始聚类中心,要么每次用不同的初始聚类中心启动该算法,多次运行FCM。

    迭代函数:

    更多相关内容
  • fcmMatlab中模糊c均值聚类算法
  • 基于模糊C均值的快速点云的聚类分析代码,可用于模糊聚类
  • 模糊均值聚类算法。
  • matlab实现模糊C均值聚类,附带包含600个2维数据的数据集,可视化展示结果。数据集有3类,分别分布在第一、二 三象限。
  • 亲测可用!图像模糊C均值聚类分割matlab代码,聚类分割后显示图像。 仅需要自己修改读图路径。
  • function [center, U, obj_fcn] = FCMClust(data, cluster_n, options)% FCMClust.m 采用模糊C均值对数据集data聚为cluster_n类%% 用法:% 1. [center,U,obj_fcn] = FCMClust(Data,N_cluster,options);% 2. [center,...

    function [center, U, obj_fcn] = FCMClust(data, cluster_n, options)

    % FCMClust.m 采用模糊C均值对数据集data聚为cluster_n类

    %

    % 用法:

    % 1. [center,U,obj_fcn] = FCMClust(Data,N_cluster,options);

    % 2. [center,U,obj_fcn] = FCMClust(Data,N_cluster);

    %

    % 输入:

    % data ---- nxm矩阵,表示n个样本,每个样本具有m的维特征值

    % N_cluster ---- 标量,表示聚合中心数目,即类别数

    % options ---- 4x1矩阵,其中

    % options(1): 隶属度矩阵U的指数,>1 (缺省值: 2.0)

    % options(2): 最大迭代次数 (缺省值: 100)

    % options(3): 隶属度最小变化量,迭代终止条件 (缺省值: 1e-5)

    % options(4): 每次迭代是否输出信息标志 (缺省值: 1)

    % 输出:

    % center ---- 聚类中心

    % U ---- 隶属度矩阵

    % obj_fcn ---- 目标函数值

    % Example:

    % data = rand(100,2);

    % [center,U,obj_fcn] = FCMClust(data,2);

    % plot(data(:,1), data(:,2),'o');

    % hold on;

    % maxU = max(U);

    % index1 = find(U(1,:) == maxU);

    % index2 = find(U(2,:) == maxU);

    % line(data(index1,1),data(index1,2),'marker','*','color','g');

    % line(data(index2,1),data(index2,2),'marker','*','color','r');

    % plot([center([1 2],1)],[center([1 2],2)],'*','color','k')

    % hold off;

    if nargin ~= 2 & nargin ~= 3, %判断输入参数个数只能是2个或3个

    error('Too many or too few input arguments!');

    end

    data_n = size(data, 1); % 求出data的第一维(rows)数,即样本个数

    in_n = size(data, 2); % 求出data的第二维(columns)数,即特征值长度

    % 默认操作参数

    default_options = [2; % 隶属度矩阵U的指数

    100; % 最大迭代次数

    1e-5; % 隶属度最小变化量,迭代终止条件

    1]; % 每次迭代是否输出信息标志

    if nargin == 2,

    options = default_options;

    else %分析有options做参数时候的情况

    % 如果输入参数个数是二那么就调用默认的option;

    if length(options) < 4, %如果用户给的opition数少于4个那么其他用默认值;

    tmp = default_options;

    tmp(1:length(options)) = options;

    options = tmp;

    end

    % 返回options中是数的值为0(如NaN),不是数时为1

    nan_index = find(isnan(options)==1);

    %将denfault_options中对应位置的参数赋值给options中不是数的位置.

    options(nan_index) = default_options(nan_index);

    if options(1) <= 1, %如果模糊矩阵的指数小于等于1

    error('The exponent should be greater than 1!');

    end

    end

    %将options 中的分量分别赋值给四个变量;

    expo = options(1); % 隶属度矩阵U的指数

    max_iter = options(2); % 最大迭代次数

    min_impro = options(3); % 隶属度最小变化量,迭代终止条件

    display = options(4); % 每次迭代是否输出信息标志

    obj_fcn = zeros(max_iter, 1); % 初始化输出参数obj_fcn

    U = initfcm(cluster_n, data_n); % 初始化模糊分配矩阵,使U满足列上相加为1,

    % Main loop 主要循环

    for i = 1:max_iter,

    %在第k步循环中改变聚类中心ceneter,和分配函数U的隶属度值;

    [U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo);

    if display,

    fprintf('FCM:Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));

    end

    % 终止条件判别

    if i > 1,

    if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro,

    break;

    end,

    end

    end

    iter_n = i; % 实际迭代次数

    obj_fcn(iter_n+1:max_iter) = [];

    % 子函数

    function U = initfcm(cluster_n, data_n)

    % 初始化fcm的隶属度函数矩阵

    % 输入:

    % cluster_n ---- 聚类中心个数

    % data_n ---- 样本点数

    % 输出:

    % U ---- 初始化的隶属度矩阵

    U = rand(cluster_n, data_n);

    col_sum = sum(U);

    U = U./col_sum(ones(cluster_n, 1), :);

    % 子函数

    function [U_new, center, obj_fcn] = stepfcm(data, U, cluster_n, expo)

    % 模糊C均值聚类时迭代的一步

    % 输入:

    % data ---- nxm矩阵,表示n个样本,每个样本具有m的维特征值

    % U ---- 隶属度矩阵

    % cluster_n ---- 标量,表示聚合中心数目,即类别数

    % expo ---- 隶属度矩阵U的指数

    % 输出:

    % U_new ---- 迭代计算出的新的隶属度矩阵

    % center ---- 迭代计算出的新的聚类中心

    % obj_fcn ---- 目标函数值

    mf = U.^expo; % 隶属度矩阵进行指数运算结果

    center = mf*data./((ones(size(data, 2), 1)*sum(mf'))'); % 新聚类中心(5.4)式

    dist = distfcm(center, data); % 计算距离矩阵

    obj_fcn = sum(sum((dist.^2).*mf)); % 计算目标函数值 (5.1)式

    tmp = dist.^(-2/(expo-1));

    U_new = tmp./(ones(cluster_n, 1)*sum(tmp)); % 计算新的隶属度矩阵 (5.3)式

    % 子函数

    function out = distfcm(center, data)

    % 计算样本点距离聚类中心的距离

    % 输入:

    % center ---- 聚类中心

    % data ---- 样本点

    % 输出:

    % out ---- 距离

    out = zeros(size(center, 1), size(data, 1));

    for k = 1:size(center, 1), % 对每一个聚类中心

    % 每一次循环求得所有样本点到一个聚类中心的距离

    out(k, :) = sqrt(sum(((data-ones(size(data,1),1)*center(k,:)).^2)',1));

    end

    展开全文
  • 模糊C均值聚类算法实现数据挖掘的matlab源代码
  • 基于matlab局部模糊c均值聚类算法.rar
  • matlab实现模糊c均值聚类

    热门讨论 2009-06-04 00:35:21
    matlab中实现模糊c均值聚类,含聚类坐标和分类数目,源程序和运行结果,程序易于修改
  • 针对模糊C均值聚类算法(FCM)存在对初始聚类中心敏感,易陷入局部最优...对UCI3个数据集进行仿真实验,结果表明提出的基于粒子群优化的模糊C均值聚类算法相比FCM算法和基本粒子群聚类算法具有更好的聚类效率和准确性。
  • 使用基于模糊 c 均值聚类的机器学习对 2 类和 3 类问题进行一维矩阵分类。 它还包含一个基于矩阵的 AND 门示例和大小为 12 和 3 的输入样本
  • 提出了一种快速且鲁棒的模糊c-means聚类算法,即FRFCM。 FRFCM 能够分割灰度和彩色图像并提供出色的分割结果。
  • 模糊C均值聚类matlab程序,简单易懂,程序可以运行。
  • FCM+KFCM模糊C均值聚类分析算法,matlab代码,有界面,有图片,运行正常,附pdf说明文档
  • c均值聚类算法matlab代码fcm_m 这是matlab代码FCM聚类方法的一些变体。 您可以参考以下文章以进一步了解:“一种鲁棒的模糊局部信息C均值聚类算法”
  • 自己写的模糊C均值聚类算法MATLAB实现
  • MATLAB模糊C均值聚类程序.docx
  • 模糊c均值聚类 matlab

    2012-05-07 12:45:06
    简单的模糊c-均值聚类matlab程序 希望对大家能够有所帮助
  • .模糊理论的介绍 在日常生活,有许多事物或多或少都具有模糊性,模糊虽难以捉摸,但... 模糊聚类就是用模糊数学的方法,把样本之间的模糊关系定量,从而客观准确地进行聚类,使得各个类之间的数据差别应尽可能大,类

    一、图像分割简介

    理论知识参考:【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】

    二、部分源代码

    
    clear
    close all
    clc
    clear
    close all
    clc
    %% %%%%%%%%%%%%%%%图像%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
     I=imread('3096.jpg');
    
    if size(I,3) == 3
       I=rgb2gray(I);
    else
    end
    figure;imshow(I);title('(a)原始图像');imwrite(I,'1.tiff','tiff','Resolution',300);%保存为tif
    %I=I;%不加噪声
    % I=imnoise(I,'speckle',deta_2);
    I=imnoise(I,'salt & pepper',0.05); %加噪图椒盐噪声
    % I=imnoise(I,'gaussian',0,0.01); % 加高斯噪声
    
     
    figure;imshow(I);title('(b)加噪图像');imwrite(I,['2.','.tiff'],'tiff','Resolution',300);%保存为tif
    [m,n]=size(I);
    
    % k=4;
    k=2;
    r=3;
    m_index=2;
    beta=6;
    neighbor=3;%3*3邻域去噪
    lamda_s_enfcm=3;%s参数
    
    I=im2double(I);
    I4 = I(:);  %% 将图像灰度按列排列
    
    %% ------------------------ ifcm------------------------
    ifcm_label=zeros(m*n,1);
    t=cputime;
    tic;
    [O2, U2, obj_fcn2] = ifcm(I4, k);
    toc;
    time_fcm_spatial_mean=cputime-t;
    maxU2 = max(U2);   %隶属度最大  
    for j=1:k
        index = find(U2(j, :) == maxU2);  %隶属度最大对应的像素位置
       ifcm_label(index) = j;    
    end
    labels2=reshape(ifcm_label,[m n]);
    
    
    %显示聚类分割图
    labels2(find(labels2==1))=0;
    labels2(find(labels2==2))=255;
    labels2(find(labels2==3))=125;
    labels2(find(labels2==4))=180;
    labels2=uint8(labels2);
    % figure;imshow(labels2,[]);title('(c)聚类分割图');imwrite(labels2,'3.jpg');imwrite(labels2,'33.png')%保存为jpg
    figure;imshow(labels2,[]);title('(c)聚类分割图');
    imwrite(labels2,['3.1.','.tiff'],'tiff','Resolution',300);%保存为tif
    
    function [center, U, obj_fcn] = ifcm(data,cluster_n)
    
    
    if nargin ~= 2 & nargin ~= 3,
    	error('Too many or too few input arguments!');
    end
    
    data_n = size(data, 1);
    in_n = size(data, 2);
    
    % Change the following to set default options
    default_options = [2;	% exponent for the partition matrix U
    		100;	% max. number of iteration
    		1e-5;	% min. amount of improvement
    		1];	% info display during iteration 
    
    if nargin == 2,
    	options = default_options;
    else
    	% If "options" is not fully specified, pad it with default values.
    	if length(options) < 4,
    		tmp = default_options;
    		tmp(1:length(options)) = options;
    		options = tmp;
    	end
    	% If some entries of "options" are nan's, replace them with defaults.
    	nan_index = find(isnan(options)==1);
    	options(nan_index) = default_options(nan_index);
    	if options(1) <= 1,
    		error('The exponent should be greater than 1!');
    	end
    end
    
    expo = options(1);		% Exponent for U
    max_iter = options(2);		% Max. iteration
    min_impro = options(3);		% Min. improvement
    display = options(4);		% Display info or not
    obj_fcn = zeros(max_iter, 1);	% Array for objective function
    
    %U = initfcm(cluster_n, data_n);			% Initial fuzzy partition
    center= initifcmv(cluster_n);            %初始化聚类中心
    [Miuij,Vij,Paiij]=initifcmmvp(data);
    
    for i = 1:max_iter,
        [U, center, obj_fcn(i)] = ifcm_step(data, center, cluster_n, expo, Miuij,Vij,Paiij);
    	if display, 
    		fprintf('Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));
    	end
    	% check termination condition
    	if i>1
    % 		if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro, break; end,
     %        if norm(old_U-U,2) < min_impro, break; end,
    %        if norm(old_U-U,'fro') < min_impro, break; end,
           if norm(old_center-center,2) < min_impro, break; end,
           % (old_center-center).^2
             
        end
        old_U = U;
        old_center = center;
    end
    
    % iter_n = i;	% Actual number of iterations 
    % % obj_fcn(iter_n+1:max_iter) = [];
    % mf = old_U.^expo;       % 隶属度矩阵进行指数运算结果
    % dist = distfcm(old_center, data);       % 计算距离矩阵
    % obj_fcn = sum(sum((dist.^2).*mf));  % 计算目标函数值 
    
    

    三、运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
    [2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
    [3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
    [4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
    [5]赵勇,方宗德,庞辉,王侃伟.基于量子粒子群优化算法的最小交叉熵多阈值图像分割[J].计算机应用研究. 2008,(04)

    展开全文
  • 的图形(方块、圆圈等)分别代表什么含义,怎么看出来的,代表了什么样的一种聚类效果? 其中,初始数据为10组,每组3个特征值,聚类数为3,聚类结果是第1、6、7、9为一类;4、5、8、10为一类;2、3为一类。 ...
  • 模糊c-均值(FCM)聚类算法在matlab中实现,已测试通过
  • 模糊C均值聚类算法

    2015-01-19 10:09:11
    自己写的模糊C均值聚类算法,也就是FCM,用matlab写的,希望能帮助大家学习
  • 关于Matlab 模糊C均值聚类分析与因子分析试手实验报告,希望对你的学习有所帮助。

    Matlab 模糊C均值聚类分析与因子分析实验报告

    提示:数据资源在本CSDN号的上传资料中直接领取


    1 引言

    数据:gyzb.mat(按顺序对应每一列)为:31个省市区的国有控股企业的主要指标(包括:总利润(亿元)、总资产贡献率(%)、资产负债率(%)、流动资产周转次数(次/年)、工业成本费用利用率(%)和人均主营收入(万元/人))。需要使用数据分析方法对该数据进行分析,试着得到一些结论。这里使用的分析方法为:模糊C均值聚类分析、因子分析。


    2 算法原理

    2.1 模糊C均值聚类分析的简介及算法原理:

    (1)简介:

    模糊C均值聚类分析(FCM,Fuzzy c-means)是从C从均值算法(Hard c-means)发展而来的。模糊聚类分析是根据研究对象本身的属性来构造模糊矩阵,并在此基础上根据隶属度来确定聚类关系,即确定样本之间的模糊关系定量。

    (2)算法原理:

    在这里插入图片描述
    在这里插入图片描述

    (3)算法步骤:

    【1】设置好聚类类别数,设定迭代收敛条件,初始化各个聚类中心;

    【2】用当前的聚类中心,计算隶属度值度函数。

    【3】使用隶属度函数,重新计算计算各个聚类的中心。

    【4】重复【2】、【3】的运算,直到各个样本的隶属度稳定;

    【5】当算法收敛时,就得到了各类的聚类中心和各样本对于各类的隶属度值,从而完成了模糊聚类划分。

    2.2 因子分析的简介及算法原理:

    (1)简介:

    因子分析(factor analysis)是通过研究多个变量间相关矩阵(或协方差矩阵)的内部依赖关系,找出能综合所有变量主要信息的少数几个随机变量的一种统计分析方法、预处理方法、降维技术。这几个随机变量不能直接测量,通常称为因子。各个因子间互不相关,所有变量都可以表示成公因子的线性组合。因子分析的目的就是减少变量的数目,用少量因子(若干更基本的有代表的变量)代替所有变量去分析整个问题;这些更基本的变量也叫做公共因子或共性因子。

    (2)算法原理:

    设有n个样本,p个指标,X = (X1, X2, X3, ……,XP)T为随机向量,要寻找的公因子为F = (F1,F2,……,Fm)T,则模型

    X1 = a11F1 + a12F2 + …… + a1mFm + ε1
    
    X2 = a21F1 + a22F2 + …… + a2mFm + ε2
    
    ……
    
    XP = aP1F1 + aP2F2 + …… + apmFm +εp
    

    被称为因子模型。矩阵A = (aij)称为因子载荷矩阵,aij为因子载荷(loading),其实质就是公因子Fi和变量Xj的相关系数。ε为特殊因子,代表公因子以外的影响因素所导致的(不能被公因子所解释的)变量变异,在实际分析时忽略不计。

    对于求得的公因子,需要观察它们在哪些变量上有较大的载荷,再据此说明该公因子的实际含义。但对于分析得到的初始因子模型,其因子载荷矩阵往往比较复杂,难于对因子Fi给出一个合理解释,此时可以进一步做因子旋转,以便旋转后得到更加合理的解释。

    (3)算法步骤:

    【1】将原始数据标准化,以消除变量间在数量级和量纲上的不同。

    【2】求标准化后的样本数据的相关系数矩阵。

    【2】求其特征值和特征向量。

    【3】计算方差贡献率和累积方差贡献率。

    【4】确定因子。

    【5】进行因子旋转,使因子变量更具有可解释性。

    【6】计算因子得分。

    (4)适用范围:

    用途范围广泛。但要求样本数据的各个变量应当具有相关性,不彼此独立。因子分析中公因子应当具有实际意义。


    3 实验结果与分析

    (实验思路,步骤及结果分析)

    3.1 模糊C均值聚类分析的实验结果与分析:

    (1)实验思路:

    数据文件gyzb.mat是一个每一列都是数据值的样本数据矩阵,没有可供判断类别列也没有时间值等。想到刚大致学了模糊C均值聚类分析,便考虑到选择对gyzb.mat数据文件进行模糊C均值聚类分析。 加上Matlab有强大的fcm()等自带函数,就开始实验了。

    (2)实验步骤:

    【1】先导入gyzb.mat数据文件,然后观察数据的大致情况;

    【2】选择模糊C均值聚类分析;

    【3】先在matlab脚本中写好大致的代码思路;

    【4】再试着进行编写matlab代码;

    【5】对运行得出的结果及统计图进行分析。

    (3)结果及分析:

    (3.1)matlab代码:

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
    clc
    % (1)导入样本数据
    load('gyzb_data.mat');
    disp('【1】模糊C均值聚类分析:')
    % (2)设置类的数量为3
    num_cluster = 3;
    % (3)进行模糊C均值聚类分析
    % num_cluster为类的数量;gyzb_data为样本数据;center是一个表示聚类中心的坐标矩阵;
    % u是类组成函数矩阵,包括每类中包含的样本数据的等级,0表示空类,1表示满员,介于0~1表示部分填充的类。在每次循环中,目标函数被最小化以搜索类别的最佳位置。
    % obj_fcn是最佳位置的值;
    disp('(1)Iteration count为迭代次数,obj. fcn为最佳位置的值:')
    [center, u, obj_fcn] = fcm(gyzb_data, num_cluster);
    disp('(2)聚类中心的坐标矩阵:')
    disp(center)
    disp('(3)类组成函数矩阵:')
    disp(u)
    % (4)查找并输出隶属矩阵u每列最大值的行标,确定每个样本的类
    id1 = find(u(1, :) == max(u));
    id2 = find(u(2, :) == max(u));
    id3 = find(u(3, :) == max(u));
    disp('(4)聚类结果:')
    disp('(4.1)属于第一类[id1]的样本数据行号:')
    disp(id1)
    disp('(4.2)属于第二类[id2]的样本数据行号:')
    disp(id2)
    disp('(4.3)属于第三类[id3]的样本数据行号:')
    disp(id3)
    % (5)选取样本数据的前两列(属性)进行绘图,来可视化。
    figure(1);
    plot(gyzb_data(:,1),gyzb_data(:,2),'r.','MarkerSize',12)
    title('样本数据的前两列的散点图:')
    xlabel('样本数据的前第一列值');
    ylabel('样本数据的前第二列值');
    figure(2);
    plot(gyzb_data(id1, 1), gyzb_data(id1, 2), 'marker', '*', 'color', 'r');
    hold on
    plot(gyzb_data(id2, 1), gyzb_data(id2, 2), 'marker', '*', 'color', 'g');
    hold on
    plot(gyzb_data(id3, 1), gyzb_data(id3, 2), 'marker', '*', 'color', 'b');
    title('样本的模糊C均值聚类示意图:')
    xlabel('样本数据的前第一列值');
    ylabel('样本数据的前第二列值');
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    

    (3.2)实验截图及分析:
    在这里插入图片描述

    【1】Iteration count 代表迭代次数,观察这组数据,当迭代了24次时,迭代过程中的目标函数趋于稳定时,此时停止迭代,计算出聚类中心、隶属度等结果。但多次测量后每次的迭代次数是不确定的。
    在这里插入图片描述

    【2】上图为聚类中心的坐标矩阵、隶属度矩阵(类组成函数矩阵)。每组数据对应3个聚类中心的隶属度,第m列代表第m组数据,分别对应四个聚类中心的隶属度值。

    在这里插入图片描述

    【3】上图为多次测试(设置类的数量为3,由于每次测试都是一样,这里就用只显示一张图)的用聚类结果:

    属于第一类的5组数据:1,9,15,19,27

    属于第二类的8组数据:2,7,8,10,11,17,23,31

    属于第三类的18组数据:3,4,5,6,12,13,14,16,18,20,21,22,24,25,26,28,29,30

    在这里插入图片描述

    【4】该图是样本数据的前两列的散点图,由于样本数据不变,因而该图也是趋于不变。

    在这里插入图片描述

    【4】上面这两张图的在不改变类别(簇)的数目,几乎是趋于不变的,(由于每次测试都是一样,这里就用只显示一张图),可见,在设定好同一数目的类别(簇)下,模糊C聚类分析下即使每次迭代次数可能不一样,但结果总是会区于一个稳定值,聚类结果也是趋于一个结果。但聚类结果还是受到研究者所设置的聚类数目的多少等影响,即主观影响大。

    3.2 因子分析的实验结果与分析:

    (1)实验思路:

    数据文件gyzb.mat是一个每一列都是数据值的样本数据矩阵,没有可供判断类别列也没有时间值等。考虑到可选择对gyzb.mat数据文件进行因子分析,加上Matlab有factoran()等自带函数,就开始实验了。

    (2)实验步骤:

    【1】先导入gyzb.mat数据文件,然后观察数据的大致情况;

    【2】选择因子分析;

    【3】先在matlab脚本中写好大致的代码思路;

    【4】再试着进行编写matlab代码;

    【5】对运行得出的结果及统计图进行分析。

    (3)结果及分析:

    (3.1)matlab代码:

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    disp(' ')
    disp('【2】因子分析:')
    % (1)导入样本数据
    % (2)使用标准化,对样本进行归一化处理, z为标准化后的数据,mu是原样本的均值,sigma是原样本的方差。
    z  = zscore(gyzb_data);
    % (3)计算z的相关系数矩阵,r为样本的相关系数矩阵
    r = corrcoef(z);
    disp('(1)标准化后的样本的相关系数矩阵:')
    disp(r)
    % (4)设置3个公共因子
    number = 3;
    % (5)进行因子分析
    % 求lambda是因子载荷值;psi是方差构成的向量;T是旋转矩阵;% stats是相关信息统计;F是因子得分矩阵;number是公共因子的数量;
    [lambda, psi, T, stats, F] = factoran(gyzb_data, number);
    disp('(2) 3个公共因子的情况下:')
    disp('(2.1)因子载荷值:')
    disp(lambda)
    disp('(2.2)方差构成的向量:')
    disp(psi)
    disp('(2.3)旋转矩阵为:')
    disp(T)
    % (6)计算贡献率并绘制出柱形图
    ctb = 100 * sum(lambda .^ 2) / size(gyzb_data, 2);
    disp('(3)3个因子的方差贡献率(单位为 %):')
    disp(ctb)
    figure(3)
    bar(ctb)
    title('3个因子的方差贡献率柱形图:')
    xlabel('因子序号');
    ylabel('方差贡献率(单位为 %)')
    % (7)计算累积方差贡献率
    cumctb = cumsum(ctb);
    disp('(4)因子的累积方差贡献率(单位为 %):')
    disp(cumctb)
    % (8)输出因子得分矩阵 F
    disp('(5)因子得分矩阵:')
    disp(F)
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    

    (3.2)实验截图及分析:

    在这里插入图片描述

    在这里插入图片描述

    【1】由于上下三张图的方差贡献率、累积方差贡献率、旋转矩阵、因子得分矩阵等可见:3个因子的累积方差贡献率为69.8283%,已经超过方差贡献率的2/3,可知因子分析是需要大量数据的,这里大致可以用这3个公共因子(更基本的变量)替代原来的6个变量,来实现降维。

    在这里插入图片描述

    在这里插入图片描述


    4 总结

    模糊C聚类分析的结果不是惟一的,受测试者的主观因素算是很大的。样本数据中的异常值和特殊变量对聚类分析的结果影响比较大。由于样本数据量太少,因而因子分析不太合适。一般而言,样本量还是需要为变量数的10倍以上。但两种分析方法都相互表意了这个数据文件gyzb.mat是可以进行压缩的。即对行进行归类,对列进行抽出公共因子。


    参考文献

    Matlab的模糊聚类分析的传递方法》,计算机应用,2004.11

    郭珉,《模糊聚类分析算法的Matlab语言实现》,农业网络信息,2004.5

    由伟、刘亚秀,《MATLAB数据分析教程》,清华大学出版社

    李柏年、吴礼斌,《MATLAB数据分析方法》,机械工业出版社

    展开全文
  • data=[1739.94 1675.15 2395.96 373.3 3087.05 2429.47 1756.77 1652 1514.98 864.45 1647.31 2665.... title('模糊C均值聚类分析图'); xlabel('第一特征坐标'); ylabel('第二特征坐标'); zlabel('第三特征坐标');
  • 模糊C均值聚类算法(原理+Matlab代码)

    千次阅读 2021-04-18 04:30:08
    描述聚类分析是多元统计分析的一种,也是无监督模式识别的一个重要分支,在模式分类 图像处理和模糊规则处理等众多领域获得最广泛的应用。它把一个没有类别标记的样本按照某种准则划分为若干子集,使相似的样本尽...
  • 模糊C均值聚类算法的MATLAB实现及结果绘图
  • 模糊C均值聚类MATLAB实现,其中包含了10个MATLAB函数
  • 聚类分析是多元统计分析的一种,也是无监督模式识别的一个重要分支,在模式分类 图像处理和模糊规则处理等众多领域获得最广泛的应用。它把一个没有类别标记的样本按照某种准则划分为若干子集,使相似的样本尽可能...
  • 使用matlab语言来实现模糊c均值聚类,从而实现对图像的分割

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,142
精华内容 456
关键字:

matlab中模糊c均值聚类

matlab 订阅