《FCM聚类算法介绍(共6页).doc》由会员分享,可在线阅读,更多相关《FCM聚类算法介绍(共6页).doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上FCM聚类算法介绍FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则是一种柔性的模糊划分。在介绍FCM具体算法之前我们先介绍一些模糊集合的基本知识。6.1.1 模糊集基本知识21首先说明隶属度函数的概念。隶属度函数是表示一个对象x隶属于集合A的程度的函数,通常记做A(x),其自变量范围是所有可能属于集合A的对象(即集合A所在空间中的所有点),取值范围是0,1,即0=A(x)1。对于m,它是一个控制算法的柔性的参数,如果m
2、过大,则聚类效果会很次,而如果m过小则算法会接近HCM聚类算法。算法的输出是C个聚类中心点向量和C*N的一个模糊划分矩阵,这个矩阵表示的是每个样本点属于每个类的隶属度。根据这个划分矩阵按照模糊集合中的最大隶属原则就能够确定每个样本点归为哪个类。聚类中心表示的是每个类的平均特征,可以认为是这个类的代表点。从算法的推导过程中我们不难看出,算法对于满足正态分布的数据聚类效果会很好,另外,算法对孤立点是敏感的。clear all;load iris_tr;load iris_te;H=1;% m为要生成的族的数目m=3;% num(n)为第n类的记录条数for n=1:m num(n)=0;endro
3、ws,cols=size(IRIS_training_data);for I=1:rows if IRIS_training_data(I,6)=1 IRIS_training_data(I,5)=2; end if IRIS_training_data(I,7)=1 IRIS_training_data(I,5)=3; endendnew_iris=IRIS_training_data(:,1:5);% 对test进行观察式学习分类test=IRIS_training_data(:,1:4);%随机选择三条连续记录作为初始的三个类for I=1:mc(I)=floor(rand(1)*75)
4、+1;endfor J=1:m for I=1:4 classJ(I)=test(c(J),I); endendwhile H=1 for I=1:rows for K=1:m d(K)=sqrt(classK(1)-test(I,1)2+(classK(2)-test(I,2)2+(classK(3)-test(I,3)2+(classK(4)-test(I,4)2); end y,t=min(d); num(t)=num(t)+1; test(I,5)=t; for J=1:4 last_classt=classt; classt(J)=(test(I,J)+classt(J)*num(t
5、)/(num(t)+1); end end% 判断结束条件是否满足for K=1:m d(K)=sqrt(last_classK(1)-classK(1)2+(last_classK(2)-classK(2)2+(last_classK(3)-classK(3)2+(last_classK(4)-classK(4)2);endy,t=max(d);if y0.0001; break;endend% 与实际的分类对比计算出预测的正确率for I=1:m class11(I)=0; class21(I)=0; class31(I)=0;endfor I=1:3:rows if test(I,5)=
6、1 class11(1)=class11(1)+1; elseif test(I,5)=2 class11(2)=class11(2)+1; else class11(3)=class11(3)+1; end right_num,t=max(class11);endfor I=2:3:rows if test(I,5)=1 class21(1)=class21(1)+1; elseif test(I,5)=2 class21(2)=class21(2)+1; else class21(3)=class21(3)+1; endendright_num=right_num+max(class21); for I=3:3:rows if test(I,5)=1 class31(1)=class31(1)+1; elseif test(I,5)=2 class31(2)=class31(2)+1; else class31(3)=class31(3)+1; endend right_num=right_num+max(class31);right_num=(right_num/rows)*100;disp(sprintf(利用k_means给iris数据集分类的正确率为:%d%,right_num);专心-专注-专业