模糊C均值聚类算法的C++实现代码_第1页
模糊C均值聚类算法的C++实现代码_第2页
模糊C均值聚类算法的C++实现代码_第3页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、模糊 C 均值聚类算法的实现争辩背景聚类分析是多元统计分析的一种,也是无监视模式识别的一个重要分支,在模式分类 图像处理和模糊规章处理等众多领域中获得最广泛的应用。它把一个更能客观的反响客观世界,从而成为聚类分析的主流。模糊聚类算法是一种基于函数最优方法的聚类算法,使用微积分计算技术求模糊聚类分析算法大致可分为三类分类数不定,依据不同要求对事物进展动态聚类,此类方法是基于模糊等价矩阵聚类的,称为模糊等价矩阵动态聚类分析法。分类数给定,查找出对事物的最正确分析方案,此类方法是基于目标函数聚在摄动有意义的状况下,依据模糊相像矩阵聚类,此类方法称为基于摄动的模糊聚类分析法xA做 (x),其自变量范围

2、是全部可能属于集合A即集合AAA(x)=1xAA,相当于传统集合概念上的 xA。一个定义在空间 X=x上的隶属度函数就定义了一个模糊集合 A,或者叫定义在论域 X=x上的模糊子集 A 。对于有限个对A 可以表示为:12nA (x ),xAii)| xi X(6.1)度就是0,1区间里面的值。C,mCC1m,它是一个把握算法的柔mmHCM聚类算法。C*N特征,可以认为是这个类的代表点。好,另外,算法对孤立点是敏感的。聚类算法是一种比较的技术,基于曾次的聚类算法文献中最早消灭的Single-Linkage1957LloydMacQueenC早起源于RuspiniFCMDunnBezdekc算法描述

3、CCFCM,即众的一种改进。nxi=1,2,nci使得非相像性指标的价值函数到达最小。FCM 与 HCM 的主要区分在于 FCM 用模糊U0,11:c uiji1 (6.9)FCM或目标函数就是式6.2的一般化形式:,.,c) c c umd2,(6.10)1cii1i1ijij0,1c 为模糊组 Id =|c-x|Iijiijij心与第 j 个数据点间的欧几里德距离;且m 1 是一个加权指数。构造如下的目标函数,可求得使6.10式到达最小值的必要条件:1,.,cc, ,.,1 1,.,cc)n(c uiji1(6.11) c numd2 (c ijijjiji1ji1 j求导,使式6.10到

4、达最小的必要条件为:n umxijjc j1min umij和(6.12)u1(6.13)dijdc d2/(m1) kj C FCMcU1:i1:0,1U,使其满足式6.9中的约束条件2:用式6.12cci=1,c。i3:依据式6.10计算价值函数。假设它小于某个确定的阀值,或它4:用6.13U2。FCMFCM。c Reapeatforl=123.Step 1:compute the cluseter prototypes(means):Step 2:compete the distance:Step 3:Update the partition matrix:算法改进Bezdekm,Dum

5、m函数的推广准则是无效的,参数 m 又称为平滑因子,把握着模式早模糊类间的共享程度,因此,要实现模糊 c 聚类就要选择一适合的 m, 然而最正确的 m围,但没有面对问题的优选方法,也缺少参数 m 的有效性评价准则尽管模糊聚类是一种无监视的分类,但现在的聚类算法却=需要应用性和自动化。C2前还不能得到全面的解决。FCM1的分别得。FCM模糊数时,FCMCFcm数据挖掘时的需要。FCM法对聚类结果进展优化,选取其中的最优解做为问题的输出,由于采样技术显著的压缩了问题的规模,而遗传又可以对结果进展全局最优化处理,因此在时间性能和聚类质量上都能获得较满足的结果。MichigonJohn Holland

6、1简单的非线性问题。遗传算法的设计局部种群中个体确实定聚类的关键问题是聚类中心确实定,因此可以选取聚类中心作为种Sc*s编码方式中承受格雷码的编码形式。统一基因链的长度,可以有以下两种变换方式。算出基因链的长度。10。适应度函数V,u,因此需要对 FCM 聚类算法的目标函数进展改进, 以适用算法的要求, 适用度一般取值极大,因此可取上式的倒数作为算法的使用度函数。初始种群确实定FCM了种群的多样性。遗传操作2操作承受根本位变异法。终止条件确实定遗传算法在以下二种状况下终止b算法具体步骤如下和变异概率等。通过随机制定产生另一半个体。对数据集进展正规化处理并编码。计算初始种群中个体的适应度。无效个

7、体。5在理论上讲进展遗传操作的样本容量越大,聚类的误差越小,由避开陷入局部最优解,在性能上相比于传统的模糊C较大提高。算法实现文档的读取 #include “data.h“/函数定义double *DataRead(char*name,int row,int col)double *p=new double* row;ifstream infile;infile.open(name,ios:in);for(int i=0;irow;i+)pi=new doublecol; for(intj=0;jpij;infile.close;成功读取数据文件:“name“!n“;return p;/释放内

8、存for(i=0;irow;i+)deletepi;deletep;文档的保存#include “data.h“void DataSave(double*data,int row,int col,char*name)int i,j;ofstream outfile;/翻开文件,输出数据outfile.open(name,ios:out);outfile.setf(ios:fixed); outfile.precision(4);for(i=0;irow;i+)for(j=0;jcol;j+)outfiledataij“ “;outfileendl;outfileendlendl;outfile

9、.close;数据标准化处理#include “data.h“double *Standardize(double *data,int row,int col)int i,j;double* a=new doublecol;/矩阵每列的最大值double* b=new doublecol;矩阵每列的最小值double* c=new doublerow;/矩阵列元素for(i=0;icol;i+)for(j=0;jrow;j+)cj=Dataji;ai=c0,bi=c0;for(j=0;jai)ai=cj;if(cjbi)bi=cj;/数据标准化for(i=0;irow;i+)for(j=0;j

10、col;j+)dataij=(dataij-bj)/(aj-bj);完成数据极差标准化处理!n“;deletea;deleteb;deletec;return data;生成样本虑属矩阵#include “data.h“void Initialize(double *u, int k, int row)int i,j;srand(time(0); for(i=0;ik;i+)for(j=0;jrow;j+)uij=(double)rand/RAND_MAX;/1度/rand0RAND_MAX数据归一化处理#include “data.h“void Normalize(double *u,int

11、 k,int col)int i,j;double *sum=new doublecol;for(j=0;jcol;j+)double dj=0; for(i=0;ik;i+)dj=dj+Uij; 隶属度各列之和for(i=0;ik;i+)for(j=0;jcol;j+)uij=Uij/sumj;/1)迭代过程#include “data.h“#include “func.h“/Cdouble Update(double*u,double*data,double*center,int row,int col,int k)int i,j,t; double*p=NULL;for(i=0;ik;i

12、+)for(j=0;jrow;j+)/模糊指数取 2 uij=pow(uij,2);/依据隶属度矩阵计算聚类中心p=MatrixMul(u,k,row,data,row,col);for(i=0;ik;i+)double si=0; for(j=0;jrow;j+)si+=uij;for(t=0;tcol;t+)centerit=pit/si;/类中心点j的距离矩阵dis(i,j)double* a=new doublecol;/第一个样本点double* b=new doublecol;/其次个样本点double*dis=new double*k;/中心与样本之间距离矩阵for(i=0;ik

13、;i+)disi=new doublerow;for(i=0; ik; i+)/聚类中心for(t=0; tcol; t+)at=centerit;/暂存类中心/数据样本for(j=0; jrow; j+)for(t=0; tcol; t+)bt=datajt;/暂存一样本double d=0;for(t=0; tcol; t+)d+=(at-bt)*(at-bt);/d 为一中心与全部样本的距离的平方和disij=sqrt(d);/距离for(i=0;ik;i+)for(j=0;jrow;j+)double temp=0;for(t=0;tk;t+)/disij依次除以所在列的各元素,加和;

14、/2.0temp+=pow(disij/distj,2/(2.0-1);/一个类中心和一个元素的距离平方与uij=1/temp;/全部类与该元素距离平方的和的商double func1=0; for(i=0;ik;i+)double func2=0; for(j=0;jrow;j+)func2+=pow(uij,2.0)*pow(disij,2);func1+=func2;double obj_fcn=1/(1+func1);return obj_fcn;deletea;deleteb;for(i=0;ik;i+)deletedisi;deletedis;具体过程#include “data.

15、h“#include “func.h“#include “max.h“/全局变量定义double*Data;/数据矩阵double*Center;/聚类中心矩阵double*U;/样本隶属度矩阵intm;/样本总数intn;/样本属性数int数k;/ 设定的划分类别int mainint Lab;/数据文件标号int num;/算法运行次数/cout“C:“endl;cout“1-iris.txt;2-wine.txt;4-ASD_14_2.txt“endl;coutLab;coutnum;/各次运行完毕后的目标函数double*Index=newdoublenum;double* R=new

16、 double num;double M_Index=0;double M_R=0;for(int i=0;i0)coutendlendl; coutsetfill(”#”)setw(10)endl;cout“第“i+1“次运行记录:“endl;if(Lab=1)m=150;n=4; k=3;Data=DataRead(“datasetiris.txt“,m,n);else if(Lab=2)m=178;n=13; k=3;Data=DataRead(“datasetwine.txt“,m,n);else if(Lab=3)m=535;n=2; k=12;Data=DataRead(“data

17、setASD_12_2.txt“,m,n);else if(Lab=4)m=685;n=2; k=14;Data=DataRead(“datasetASD_14_2.txt“,m,n);/数据极差标准化处理Data=Standardize(Data,m,n);聚类中心及隶属度矩阵,内存安排Center=new double*k;U=new double *k;for(j=0;jk;j+)Centerj=new doublen;Uj=new doublem;Initialize(U,k,m);Normalize(U,k,m);double Objfcn100=0;“i+1“次运行记录:“endl

18、;cout“开头迭代过程!“endl;cout“*“endl;cout.precision(5);/固定格式cout.setf(ios:fixed);while(e0 & Objfcnnx-Objfcnnx-1epsilon )e+;elsee=0;Enx=e;/输出结果到文件,保存ofstream outfile(“运行记录.txt“,ios:app);outfile“第“i+1“次运行记录:“endl; outfile“开头迭代过程!“endl; outfile“*“endl;outfile.precision(5); outfile.setf(ios:fixed);for(intn1=1

19、;n1=nx;n1+)Objfcn“Objfcn“cout“e“setw(2)n1“=“setw(2)En1“setw(2)n1“=“Objfcnn1“ n“;/保存数据文件outfile“e“setw(2)n1“=“setw(2)En1“setw(2)n1“=“Objfcnn1“ n“;coutendl; outfileendl;outfile.close;Indexi=Objfcnnx;Ri=Result(Lab, U, k, m, i);/内存释放for(j=0;jk;j+)deleteCenterj;deleteUj;deleteCenter;deleteU;/统计平均/double

20、temp1=0, temp2=0; for(i=0;inum;i+)temp1+=Indexi;temp2+=Ri;/计算各次结果的统计平均M_Index=(double)temp1/num;M_R=(double)temp2/num;cout“/“endl;coutnum“次运行,平均聚类正确率: “100*M_R“%“endl;cout.precision(6);/固定格式cout.setf(ios:fixed);cout“平均目标函数: “M_Indexendl;/统计结果文件保存ofstream resultfile(“聚类结果.txt“,ios:app); resultfile“/“

21、endl;resultfilenum“次运行,平均聚类正确率: “100*M_R“%“endl;resultfile.precision(6);/固定格式resultfile.setf(ios:fixed);resultfile“平均目标函数: “M_Indexendl;return 0;承受有名的 iris 数据集对程序进展测试,10能对数组实现分类,但是分类正确率不是很抱负,没到达预期的 90%以上总结这次综合实习,首先我学会了模糊 C 均值聚类算法,以前没接触过,也不知最终学会了模糊 C 均值聚类算法,也对算法的改进有所了解,人工智能学习的GAC序是用 c+实现的,通过对程序的而争辩,我对于文件的读取 保存 计算的迭代最优解的优化,感谢朱教师的帮助使我能顺当的完成综合实习。参考文献cmJ,电子学报,2022,2880-83j.模糊199,1:57-63刘蕊洁张金波刘锐,模糊c2022-21-1M2022高波,谢维信.模糊聚类理论进展及应用的争辩进展J.科学通报,2022,442:2241-2251张洁,高波,焦李成.基于特征加权的模糊聚类算法J,电子学报,2022

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论