KFCM算法的matlab程序
在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行简单的实现,并求其准确度。
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
1.采用iris数据库
iris_data.txt
5.13.51.40.2
4.931.40.2
4.73.21.30.2
4.63.11.50.2
53.61.40.2
5.43.91.70.4
4.63.41.40.3
53.41.50.2
4.42.91.40.2
4.93.11.50.1
5.43.71.50.2
4.83.41.60.2
4.831.40.1
4.331.10.1
5.841.20.2
5.74.41.50.4
5.43.91.30.4
5.13.51.40.3
5.73.81.70.3
5.13.81.50.3
5.43.41.70.2
5.13.71.50.4
4.63.610.2
5.13.31.70.5
4.83.41.90.2
531.60.2
53.41.60.4
5.23.51.50.2
5.23.41.40.2
4.73.21.60.2
4.83.11.60.2
5.43.41.50.4
5.24.11.50.1
5.54.21.40.2
4.93.11.50.2
53.21.20.2
5.53.51.30.2
4.93.61.40.1
4.431.30.2
5.13.41.50.2
53.51.30.3
4.52.31.30.3
4.43.21.30.2
53.51.60.6
5.13.81.90.4
4.831.40.3
5.13.81.60.2
4.63.21.40.2
5.33.71.50.2
53.31.40.2
73.24.71.4
6.43.24.51.5
6.93.14.91.5
5.52.341.3
6.52.84.61.5
5.72.84.51.3
6.33.34.71.6
4.92.43.31
6.62.94.61.3
5.22.73.91.4
523.51
5.934.21.5
62.241
6.12.94.71.4
5.62.93.61.3
6.73.14.41.4
5.634.51.5
5.82.74.11
6.22.24.51.5
5.62.53.91.1
5.93.24.81.8
6.12.841.3
6.32.54.91.5
6.12.84.71.2
6.42.94.31.3
6.634.41.4
6.82.84.81.4
6.7351.7
62.94.51.5
5.72.63.51
5.52.43.81.1
5.52.43.71
5.82.73.91.2
62.75.11.6
5.434.51.5
63.44.51.6
6.73.14.71.5
6.32.34.41.3
5.634.11.3
5.52.541.3
5.52.64.41.2
6.134.61.4
5.82.641.2
52.33.31
5.62.74.21.3
5.734.21.2
5.72.94.21.3
6.22.94.31.3
5.12.531.1
5.72.84.11.3
6.33.362.5
5.82.75.11.9
7.135.92.1
6.32.95.61.8
6.535.82.2
7.636.62.1
4.92.54.51.7
7.32.96.31.8
6.72.55.81.8
7.23.66.12.5
6.53.25.12
6.42.75.31.9
6.835.52.1
5.72.552
5.82.85.12.4
6.43.25.32.3
6.535.51.8
7.73.86.72.2
7.72.66.92.3
62.251.5
6.93.25.72.3
5.62.84.92
7.72.86.72
6.32.74.91.8
6.73.35.72.1
7.23.261.8
6.22.84.81.8
6.134.91.8
6.42.85.62.1
7.235.81.6
7.42.86.11.9
7.93.86.42
6.42.85.62.2
6.32.85.11.5
6.12.65.61.4
7.736.12.3
6.33.45.62.4
6.43.15.51.8
634.81.8
6.93.15.42.1
6.73.15.62.4
6.93.15.12.3
5.82.75.11.9
6.83.25.92.3
6.73.35.72.5
6.735.22.3
6.32.551.9
6.535.22
6.23.45.42.3
5.935.11.8
iris_id.txt
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2.matlab程序
My_KFCM.m
function label_1=My_KFCM(K,sigma)
%输入K:聚类数,sigma:高斯核函数的参数
%输出:label_1:聚的类, para_miu_new:模糊聚类中心μ,responsivity:模糊隶属度
format long
eps=1e-4; %定义迭代终止条件的eps
alpha=2; %模糊加权指数,[1,+无穷)
max_iter=100; %最大迭代次数
data=dlmread('E:\www.cnblogs.com\kailugaji\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);
%----------------------------------------------------------------------------------------------------
%随机初始化K个聚类中心
rand_array=randperm(X_num); %产生1~X_num之间整数的随机排列
para_miu=X(rand_array(1:K),:); %随机排列取前K个数,在X矩阵中取这K行作为初始聚类中心
responsivity=zeros(X_num,K);
R_up=zeros(X_num,K);
% ----------------------------------------------------------------------------------------------------
% KFCM算法
for t=1:max_iter
responsivity_new=responsivity; %上一步的隶属度矩阵
%欧氏距离,计算(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';
%高斯核函数,X_num*K的矩阵
kernel_fun=exp((-distant)/(2*sigma*sigma));
%更新隶属度矩阵X_num*K
for i=1:X_num
for j=1:K
if kernel_fun(i,j)==1
responsivity_new(i,j)=1./sum(responsivity_new(i,:)==0);
else
R_up(i,j)=(1-kernel_fun(i,j)).^(-1/(alpha-1)); %隶属度矩阵的分子部分
responsivity_new(i,j)= R_up(i,j)./sum( R_up(i,:),2);
end
end
end
%目标函数值
%fitness(t)=2*sum(sum((1-kernel_fun).*(responsivity.^(alpha))));
%更新聚类中心K*X_dim
miu_up=((kernel_fun.*responsivity_new)'.^(alpha))*X; %μ的分子部分
para_miu=miu_up./((sum((kernel_fun.*responsivity_new).^(alpha)))'*ones(1,X_dim));
if t>1
%if abs(fitness(t)-fitness(t-1))
if norm(responsivity_new-responsivity)<=eps
break;
end
end
end
%iter=t; %实际迭代次数
[~,label_1]=max(responsivity_new,[],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.com\kailugaji\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; %iris数据库,0 1 2
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_KFCM.m
function ave_acc_KFCM=Eg_KFCM(K,sigma,max_iter)
%输入K:聚的类,max_iter是最大迭代次数,sigma:高斯核函数的参数
%输出ave_acc_KFCM:迭代max_iter次之后的平均准确度
s=0;
for i=1:max_iter
label_1=My_KFCM(K,sigma);
accuracy=succeed(K,label_1);
s=s+accuracy;
end
ave_acc_KFCM=s/max_iter;
3.结果
>> ave_acc_KFCM=Eg_KFCM(3,150,50)
ave_acc_KFCM =
0.893333333333333
KFCM算法的matlab程序(用FCM初始化聚类中心)
KFCM算法的matlab程序(用FCM初始化聚类中心) 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行实现,用FCM初始化聚类中心,并求其准确度与 ...
GMM算法的matlab程序
GMM算法的matlab程序 在“GMM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...
GMM算法的matlab程序(初步)
GMM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648508.html文章中已经介绍了GMM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...
FCM算法的matlab程序2
FCM算法的matlab程序2 在“FCM算法的matlab程序”这篇文章中已经用matlab程序对iris数据库进行实现,并求解准确度.下面的程序是另一种方法,是最常用的方法:先初始化聚类中心,在进 ...
FCM算法的matlab程序
FCM算法的matlab程序 在“FCM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...
K-means算法的matlab程序
K-means算法的matlab程序 在“K-means算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 ...
FCM算法的matlab程序(初步)
FCM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648430.html文章中已经介绍了FCM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...
K-means算法的matlab程序(初步)
K-means算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648369.html 文章中已经介绍了K-means算法,现在用matlab程序实现 ...
ISODATA聚类算法的matlab程序
ISODATA聚类算法的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考:Kmeans及ISODATA算法的matlab实现 算法 ...
随机推荐
【转】WPF DataGrid 获取选中的当前行某列值
方法一:DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; string result = mySelectedE ...
Java Web开发中MVC设计模式简介
一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条 ...
H5一二事
先回顾一下WEB技术的几个阶段 Web 1.0 内容为主,主要流行HTML和CSS Web 2.0 动态网页,流行AJAX/JavaScript/DOM H5 时代,WEB开发回归富客户端 那么H5肯 ...
poj2553 强连通缩点
The Bottom of a Graph Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 10114 Accepted: ...
jstl简介
JavaServer Page Standard Tag Library是一个有用的JSP标签的集合,它封装了许多JSP应用程序通用的核心功能. JSTL支持常见的,结构性任务,如迭代和条件,标签为操 ...
kali客户端攻击
浏览器攻击 browser_autpwn2 (BAP2) mkdir /test 为接受响应的服务器创建目录 use auxiliary/server/browser_autopwn2 set ...
求交集,差集,并集,善用java的set
当有题目有求这些结果时,使用集合数据结构还是很快的.需要考虑的是,注意map和set的区别. public static void main(String[] args) { Set
【学习笔记】非监督学习-k-means
目录 k-means k-means API k-means对Instacart Market用户聚类 Kmeans性能评估指标 Kmeans性能评估指标API Kmeans总结 无监督学习,顾名思义 ...
Java-对象及变量的并发访问小结
1)多线程环境下,方法内的变量是线程安全的 2)多个线程同时处理一个实例,这个实例内的变量是不安全的 3)不同线程中注入同一个类的不同实例,实例中的变量是安全的 4)Synchronized获取到的锁 ...
python加密解密算法
https://www.cnblogs.com/xiao-apple36/p/8744408.html