FCM算法的matlab程序

在“FCM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度。

作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

1.采用iris数据库

iris_data.txt

5.1    3.5    1.4    0.2
4.9 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
3.6 1.4 0.2
5.4 3.9 1.7 0.4
4.6 3.4 1.4 0.3
3.4 1.5 0.2
4.4 2.9 1.4 0.2
4.9 3.1 1.5 0.1
5.4 3.7 1.5 0.2
4.8 3.4 1.6 0.2
4.8 1.4 0.1
4.3 1.1 0.1
5.8 1.2 0.2
5.7 4.4 1.5 0.4
5.4 3.9 1.3 0.4
5.1 3.5 1.4 0.3
5.7 3.8 1.7 0.3
5.1 3.8 1.5 0.3
5.4 3.4 1.7 0.2
5.1 3.7 1.5 0.4
4.6 3.6 0.2
5.1 3.3 1.7 0.5
4.8 3.4 1.9 0.2
1.6 0.2
3.4 1.6 0.4
5.2 3.5 1.5 0.2
5.2 3.4 1.4 0.2
4.7 3.2 1.6 0.2
4.8 3.1 1.6 0.2
5.4 3.4 1.5 0.4
5.2 4.1 1.5 0.1
5.5 4.2 1.4 0.2
4.9 3.1 1.5 0.2
3.2 1.2 0.2
5.5 3.5 1.3 0.2
4.9 3.6 1.4 0.1
4.4 1.3 0.2
5.1 3.4 1.5 0.2
3.5 1.3 0.3
4.5 2.3 1.3 0.3
4.4 3.2 1.3 0.2
3.5 1.6 0.6
5.1 3.8 1.9 0.4
4.8 1.4 0.3
5.1 3.8 1.6 0.2
4.6 3.2 1.4 0.2
5.3 3.7 1.5 0.2
3.3 1.4 0.2
3.2 4.7 1.4
6.4 3.2 4.5 1.5
6.9 3.1 4.9 1.5
5.5 2.3 1.3
6.5 2.8 4.6 1.5
5.7 2.8 4.5 1.3
6.3 3.3 4.7 1.6
4.9 2.4 3.3
6.6 2.9 4.6 1.3
5.2 2.7 3.9 1.4
3.5
5.9 4.2 1.5
2.2
6.1 2.9 4.7 1.4
5.6 2.9 3.6 1.3
6.7 3.1 4.4 1.4
5.6 4.5 1.5
5.8 2.7 4.1
6.2 2.2 4.5 1.5
5.6 2.5 3.9 1.1
5.9 3.2 4.8 1.8
6.1 2.8 1.3
6.3 2.5 4.9 1.5
6.1 2.8 4.7 1.2
6.4 2.9 4.3 1.3
6.6 4.4 1.4
6.8 2.8 4.8 1.4
6.7 1.7
2.9 4.5 1.5
5.7 2.6 3.5
5.5 2.4 3.8 1.1
5.5 2.4 3.7
5.8 2.7 3.9 1.2
2.7 5.1 1.6
5.4 4.5 1.5
3.4 4.5 1.6
6.7 3.1 4.7 1.5
6.3 2.3 4.4 1.3
5.6 4.1 1.3
5.5 2.5 1.3
5.5 2.6 4.4 1.2
6.1 4.6 1.4
5.8 2.6 1.2
2.3 3.3
5.6 2.7 4.2 1.3
5.7 4.2 1.2
5.7 2.9 4.2 1.3
6.2 2.9 4.3 1.3
5.1 2.5 1.1
5.7 2.8 4.1 1.3
6.3 3.3 2.5
5.8 2.7 5.1 1.9
7.1 5.9 2.1
6.3 2.9 5.6 1.8
6.5 5.8 2.2
7.6 6.6 2.1
4.9 2.5 4.5 1.7
7.3 2.9 6.3 1.8
6.7 2.5 5.8 1.8
7.2 3.6 6.1 2.5
6.5 3.2 5.1
6.4 2.7 5.3 1.9
6.8 5.5 2.1
5.7 2.5
5.8 2.8 5.1 2.4
6.4 3.2 5.3 2.3
6.5 5.5 1.8
7.7 3.8 6.7 2.2
7.7 2.6 6.9 2.3
2.2 1.5
6.9 3.2 5.7 2.3
5.6 2.8 4.9
7.7 2.8 6.7
6.3 2.7 4.9 1.8
6.7 3.3 5.7 2.1
7.2 3.2 1.8
6.2 2.8 4.8 1.8
6.1 4.9 1.8
6.4 2.8 5.6 2.1
7.2 5.8 1.6
7.4 2.8 6.1 1.9
7.9 3.8 6.4
6.4 2.8 5.6 2.2
6.3 2.8 5.1 1.5
6.1 2.6 5.6 1.4
7.7 6.1 2.3
6.3 3.4 5.6 2.4
6.4 3.1 5.5 1.8
4.8 1.8
6.9 3.1 5.4 2.1
6.7 3.1 5.6 2.4
6.9 3.1 5.1 2.3
5.8 2.7 5.1 1.9
6.8 3.2 5.9 2.3
6.7 3.3 5.7 2.5
6.7 5.2 2.3
6.3 2.5 1.9
6.5 5.2
6.2 3.4 5.4 2.3
5.9 5.1 1.8

iris_id.txt


2.matlab源程序

My_FCM.m

function label_1=My_FCM(K)
%输入K:聚类数
%输出:label_1:聚的类, para_miu_new:模糊聚类中心μ,responsivity:模糊隶属度
format long
eps=1e-5; %定义迭代终止条件的eps
alpha=2; %模糊加权指数,[1,+无穷)
max_iter=100; %最大迭代次数
fitness=zeros(max_iter,1);
data=dlmread('E:\www.cnblogs.comkailugaji\data\iris\iris_data.txt');
%----------------------------------------------------------------------------------------------------
%对data做最大-最小归一化处理
[data_num,~]=size(data);
X=(data-ones(data_num,1)*min(data))./(ones(data_num,1)*(max(data)-min(data)));
[X_num,X_dim]=size(X);
%----------------------------------------------------------------------------------------------------
%随机初始化模糊隶属度矩阵
responsivity=rand(X_num,K); %初始化模糊隶属度矩阵,X_num*K
temp=sum(responsivity,2); %把responsivity每一行加起来,把K类加起来,N*1的矩阵
responsivity=responsivity./(temp*ones(1,K)); %保证每行(每类)加起来为1
% ----------------------------------------------------------------------------------------------------
% FCM算法
for t=1:max_iter
%更新聚类中心K*X_dim
miu_up=(responsivity'.^(alpha))*X; %μ的分子部分
para_miu=miu_up./((sum(responsivity.^(alpha)))'*ones(1,X_dim));
%欧氏距离,计算(X-para_miu)^2=X^2+para_miu^2-2*para_miu*X',矩阵大小为X_num*K
distant=(sum(X.*X,2))*ones(1,K)+ones(X_num,1)*(sum(para_miu.*para_miu,2))'-2*X*para_miu';
%目标函数值
fitness(t)=sum(sum(distant.*(responsivity.^(alpha))));
%更新隶属度矩阵X_num*K
R_up=distant.^(-1/(alpha-1)); %隶属度矩阵的分子部分
responsivity=R_up./(sum(R_up,2)*ones(1,K));
%[responsivity,para_miu,fitness(t)]=FuzzyCM(X,responsivity,K,alpha);
if t>1 %改成while不行
if abs(fitness(t)-fitness(t-1))<eps
break;
end
end
end
%iter=t; %实际迭代次数
[~,label_1]=max(responsivity,[],2);

succeed.m

function accuracy=succeed(K,id)
%输入K:聚的类,id:训练后的聚类结果,N*1的矩阵
N=size(id,1); %样本个数
p=perms(1:K); %全排列矩阵
p_col=size(p,1); %全排列的行数
new_label=zeros(N,p_col); %聚类结果的所有可能取值,N*p_col
num=zeros(1,p_col); %与真实聚类结果一样的个数
real_label=dlmread('E:\www.cnblogs.comkailugaji\data\iris\iris_id.txt');
%将训练结果全排列为N*p_col的矩阵,每一列为一种可能性
for i=1:N
for j=1:p_col
for k=1:K
if id(i)==k
new_label(i,j)=p(j,k)-1; %加一减一看情况
end
end
end
end
%与真实结果比对,计算精确度
for j=1:p_col
for i=1:N
if new_label(i,j)==real_label(i)
num(j)=num(j)+1;
end
end
end
accuracy=max(num)/N;

Eg_FCM.m

function ave_acc_FCM=Eg_FCM(K,max_iter)
%输入K:聚的类,max_iter是最大迭代次数
%输出ave_acc_FCM:迭代max_iter次之后的平均准确度
s=0;
for i=1:max_iter
label_1=My_FCM(K);
accuracy=succeed(K,label_1);
s=s+accuracy;
end
ave_acc_FCM=s/max_iter;

3.结果

>> ave_acc_FCM=Eg_FCM(3,50)
ave_acc_FCM =
0.888666666666667

FCM算法的matlab程序的更多相关文章

  1. FCM算法的matlab程序2

    FCM算法的matlab程序2 在“FCM算法的matlab程序”这篇文章中已经用matlab程序对iris数据库进行实现,并求解准确度.下面的程序是另一种方法,是最常用的方法:先初始化聚类中心,在进 ...

  2. FCM算法的matlab程序(初步)

    FCM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648430.html文章中已经介绍了FCM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...

  3. KFCM算法的matlab程序(用FCM初始化聚类中心)

    KFCM算法的matlab程序(用FCM初始化聚类中心) 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行实现,用FCM初始化聚类中心,并求其准确度与 ...

  4. GMM算法的matlab程序

    GMM算法的matlab程序 在“GMM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...

  5. GMM算法的matlab程序(初步)

    GMM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648508.html文章中已经介绍了GMM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...

  6. KFCM算法的matlab程序

    KFCM算法的matlab程序 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行简单的实现,并求其准确度. 作者:凯鲁嘎吉 - 博客园 http:// ...

  7. K-means算法的matlab程序

    K-means算法的matlab程序 在“K-means算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 ...

  8. K-means算法的matlab程序(初步)

    K-means算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648369.html 文章中已经介绍了K-means算法,现在用matlab程序实现 ...

  9. ISODATA聚类算法的matlab程序

    ISODATA聚类算法的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考:Kmeans及ISODATA算法的matlab实现 算法 ...

随机推荐

  1. oracle9i的erp数据库无法正常关闭的解决方法。

    oracle9i版本的ERP数据库无法正常关闭. 场景描述:oracle9i数据库正常关闭的时候,hang住在一个地方无法正常关闭. 解决思路:查看alert日志,分析问题. [oraprod@erp ...

  2. 【golang-GUI开发】QSS的使用(一)———QSS入门指南

    在这篇文章中我们将初步体验对qss的使用.并对在goqt中使用qss时的注意事项进行说明. 那么事不宜迟,现在开始我们的qss之旅吧. QSS语法入门 qss是一种与css3相似的控制Qt组件的样式表 ...

  3. 从零开始学安全(十六)● Linux vim命令

    游标控制 h 游标向左移 j 游标向下移 k 游标向上移 l (or spacebar) 游标向右移 w 向前移动一个单词 b 向后移动一个单词 e 向前移动一个单词,且游标指向单词的末尾 ( 移到当 ...

  4. [android] 插入一条记录到系统短信应用里

    谷歌市场上有这些应用,模拟短信,原理就是把数据插入到短信应用的数据库里 获取ContentResolver对象,通过getContentResolver()方法 调用resolver对象的insert ...

  5. Eclipse中SVN插件的安装和配置(离线安装)

    Eclipse利用svn的离线安装包进行配置svn,这种方式配置起来很简单,但是前提是必须下载可用的的svn离线包.因为有的从网上下载的svn离线包有问题. 第一步:下载svn离线包 我下载的是下面这 ...

  6. JDK动态代理简单使用(2)

    JDK动态代理使用: 使用JDK动态代理步骤: ①创建被代理的接口和类: public interface IA { void f1(String param); } public class A i ...

  7. HDU6187(对偶图生成树)

    Destroy Walls Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)T ...

  8. 剑指offer:1.找出数组中重复的数(java版)

    数组中重复的数:题目:找出数组中重复的数,题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任 ...

  9. 使用mybatis开发dao方法

    使用mybatis开发dao的时候, 主要涉及到SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession 这三个类 现在将这三个类的使用方法简单的说下 ...

  10. Html中的img标签 加载失败

    在Http请求时,有时会遇到img图片标签加载失败,不显示的情况: 解决方法,在重新给src属性赋值时,先将onerror事件清除掉,再赋值,这样就不会存在循环调用问题了,代码如下; <img ...