FCM聚类与K-means聚类的实现和对比分析

一、收集数据

1.1数据来源

该数据来源于UCI数据库,UCI数据库是加州大学欧文分校(University of CaliforniaIrvine)提出的用于机器学习的数据库,UCI数据集是一个常用的标准测试数据集。
网址:http://archive.ics.uci.edu/ml/datasets/Solar+Flare

1.2数据描述

太阳耀斑数据集:每一类属性统计一个24小时周期太阳耀斑数据集中某一类耀斑的数量

在这里插入图片描述
数据量(Number of Instances):1389
属性数量(Number of Attributes):13(其中输入属性为10个,输出属性为3个)
在这里插入图片描述
1、类别代码:(A=1、B=2、C=3、D=4、E=5、F=6、H=7)
2、最大光斑尺寸代码:(X=0、R=2、S=3、A=1、H=7、K=4)
3、现场分布规范:(X=0、O=1、I=2、C=3)
4、活动(1=减少,2=不变)
5、进化(1=衰退,2=无增长,3=增长)
6、以前的24小时耀斑活动代码(1=没有M1大,2=一个M1,3=比一个M1多的活动)
7、历史复杂性(1=是,2=否)
8、在这个穿过太阳圆盘的路径上,区域是否变得历史上的复杂(1=是,2=否)
9、面积(1=小,2=大)
10、最大点面积(1=<=5,2=>5)
从所有这些属性预测三类耀斑,代表数据集中的最后三列
在这里插入图片描述
11、该地区在接下来的24小时内生产的C级耀斑(普通耀斑)的数量
12、该地区在接下来的24小时内产生的M级耀斑(中等耀斑)的数量
13、该地区在接下来的24小时内产生的X级耀斑(严重耀斑)的数量

二、Fuzzy C-means

2.1FCM介绍

模糊c-均值聚类算法 fuzzy c-means algorithm (FCMA)或称( FCM)。在众多模糊聚类算法中,模糊C-均值( FCM) 算法应用最广泛且较成功,它通过优化目标函数得到每个样本点对所有类中心的隶属度,从而决定样本点的类属以达到自动对样本数据进行分类的目的。
核心思想: 算法把n个向量xi 其中(i=1,2…,n)分为c个组Cj其中(j=1,2,…,c),并求每组的聚类中心,使得非相似性(或距离)指标的价值函数(或目标函数)达到最小。

2.2 FCM的原理

将对象集U分成c类(2≤c≤n),则每一类都对应着一个聚类中心向量,记为 Vi=(vi1, vi2,…, vim) ,(i=1,2,…,c),以Vi作为行所构成的矩阵称为聚类中心矩阵V
在这里插入图片描述

FCM的目标函数:
在这里插入图片描述
R:原矩阵
V:聚类中心
q:参数,一般可取q=2
rik:第k个样本点对于第i个类别的隶属度,一般是用两个向量之间的距离表示
||uk-Vi||:第k个样本离第i个类别的距离
第k个样本离第i个类别的距离大则隶属度就小

2.3 FCM流程

步骤1:用值在0,1间的随机数初始化隶属矩阵R(0),使其满足约束条件,并逐步迭代
步骤2:计算对应矩阵R(l)的聚类中心V(l)
步骤3:更新隶属矩阵R(l),比较R (l)与R (l+1)。若对取定的精度x>0,有 max{|rik (l+1) -rik (l)|} ≤ x,则R (l+1)和V (l)即为所求,即R= R (l+1), V = V (l),停止迭代。否则,l=l+1回到第2步,重复进行。

2.4 对于收集的数据集的FCM代码及结果
2.4.1 代码实现

向matlab导入txt中的数据集
(1)当数据集中存在英文时

m=1389;
n=13;
data=cell(m,n);%定义cell矩阵,存储文件内容
fid=fopen('solar.txt','r');%以只读方式打开文件
for i=1:m
for j=1:n
data{
   i,j}=fscanf(fid,'%s',[1,1]);%以字符方式读取每个值,遇空格完成每个值的读取
end
end
fclose (fid);
for i=1:m
for j=4:n
data{
   i,j}=str2double(data{
   i,j});%将文本格式转为数字格式
end
end
str=cell(m,1); %用于存储data的第1for i=1:m
str{
   i}=data{
   i,1};
end 
str=cell(m,2); %用于存储data的第2for i=1:m
str{
   i}=data{
   i,2};
end 
str=cell(m,3); %用于存储data的第3for i=1:m
str{
   i}=data{
   i,3};
end 

(2)当数据集为纯数字时

data = importdata('solar.txt');

聚类实现
计算模糊熵

classF=0;%记录平均模糊熵
num_data = size(data,1);%样本个数
for i=1:3
    for j=1:num_data
        classF=classF+U(i,j)*log(U(i,j));
    end
    classF=classF/num_data;
end

因为该数据集得到的是为从所有这些属性预测三类耀斑,则聚类为三类c=3

T=100;
c=3;
m=2;
[U, V]=myfcm(data, c, T, m, epsm);
function [U, V,objFcn] = myfcm(data, c, T, m, epsm)
% fuzzy c-means algorithm
% 输入: data: 待聚类数据,n行s列,n为数据个数,s为每个数据的特征数
%        c  :  聚类中心个数
%        m  :   模糊系数
% 输出: U  :   隶属度矩阵,c行n列,元素uij表示第j个数据隶属于第i类的程度
%        V  :  聚类中心向量,c行s列,有c个中心,每个中心有s维特征
if nargin < 3
 T = 100;  %默认迭代次数为100
end
if nargin < 5
  epsm = 1.0e-6;  %默认收敛精度
end
if nargin < 4
  m = 2;  %默认模糊系数值为2
end
[n, s] = size
  • 8
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值