模糊C均值聚类算法的C实现代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模糊C均值聚类算法的实现
研究背景
聚类分析是多元统计分析的一种,也是无监督模式识别的一个重要分支,在模式分类图像处置和模糊规那么处置等众多领域中取得最普遍的应用。
它把一个没有类别标记的样本依照某种准那么划分为假设干子集,使相似的样本尽可能归于一类,而把不相似的样本划分到不同的类中。
硬聚类把每一个待识别的对象严格的划分某类中,具有非此即彼的性质,而模糊聚类成立了样本对类别的不确信描述,更能客观的反映客观世界,从而成为聚类分析的主流。
模糊聚类算法是一种基于函数最优方式的聚类算法,利用微积分计算技术求最优代价函数,在基于概率算法的聚类方式中将利用概率密度函数,为此要假定适合的模型,模糊聚类算法的向量能够同时属于多个聚类,从而摆脱上述问题。
模糊聚类分析算法大致可分为三类
1)分类数不定,依照不同要求对事物进行动态聚类,此类方式是基于模糊等价矩阵聚类的,称为模糊等价矩阵动态聚类分析法。
2)分类数给定,寻觅出对事物的最正确分析方案,此类方式是基于目标函数聚类的,称为模糊C均值聚类。
3)在摄动成心义的情形下,依照模糊相似矩阵聚类,此类方式称为基于摄动的模糊聚类分析法
我所学习的是模糊C均值聚类算法,要学习模糊C均值聚类算法要先了解虑属度的含义,隶属度函数是表示一个对象x隶属于集合A的程度的函数,通常记做μ
A
(x),其自变量范围是所有可能属于集合A的对象(即集合A所在空间中的
所有点),取值范围是[0,1],即0<=μ
A (x)<=1。
μ
A
(x)=1表示x完全隶属于集合
A,相当于传统集合概念上的x∈A。
一个概念在空间X={x}上的隶属度函数就概念了一个模糊集合A,或叫概念在论域X={x}上的模糊子集
~
A。
关于有限个对象
x 1,x
2
,……,x
n
模糊集合
~
A能够表示为:
}
|)
),
(
{(
~
X
x
x
x
A
i
i
i
A
∈
=μ (6.1) 有了模糊集合的概念,一个元素隶属于模糊集合就不是硬性的了,在聚类的
问题中,能够把聚类生成的簇看成模糊集合,因此,每一个样本点隶属于簇的隶属度确实是[0,1]区间里面的值。
FCM算法需要两个参数一个是聚类数量C,另一个是参数m。
一样来讲C要远远小于聚类样本的总个数,同时要保证C>1。
关于m,它是一个操纵算法的柔性的参数,若是m过大,那么聚类成效会很次,而若是m过小那么算法会接近HCM聚类算法。
算法的输出是C个聚类中心点向量和C*N的一个模糊划分矩阵,那个矩阵表示的是每一个样本点属于每一个类的隶属度。
依照那个划分矩阵依照模糊集合中的最大隶属原那么就能够够确信每一个样本点归为哪个类。
聚类中心表示的是每一个类的平均特点,能够以为是那个类的代表点。
从算法的推导进程中咱们不难看出,算法关于知足正态散布的数据聚类成效会专
门好,另外,算法对孤立点是灵敏的。
聚类算法是一种比较新的技术,基于曾次的聚类算法文献中最先显现的Single-Linkage 层次聚类算法是1957年在Lloyd 的文章中最先显现的,以后MacQueen 独立提出了经典的模糊C 均值聚类算法,FCM 算法中模糊划分的概念最先起源于Ruspini 的文章中,但关于FCM 的算法的详细的分析与改良那么是由Dunn 和Bezdek 完成的。
模糊c 均值聚类算法因算法简单收敛速度快且能处置大数据集,解决问题范围广,易于应用运算机实现等特点受到了愈来愈多人的关注,并应用于各个领域。
算法描述
模糊C 均值聚类算法的步骤仍是比较简单的,模糊C 均值聚类(FCM ),即众所周知的模糊ISODATA ,是用隶属度确信每一个数据点属于某个聚类的程度的一种聚类算法。
1973年,Bezdek 提出了该算法,作为初期硬C 均值聚类(HCM )方式的一种改良。
FCM 把n 个向量x i (i=1,2,…,n )分为c 个模糊组,并求每组的聚类中心,使得非相似性指标的价值函数达到最小。
FCM 与HCM 的要紧区别在于FCM 用模糊划分,使得每一个给定数据点用值在0,1间的隶属度来确信其属于各个组的程度。
与引入模糊划分相适应,隶属矩阵U 许诺有取值在0,1间的元素。
只是,加上归一化规定,一个数据集的隶属度的和总等于1:
∑==∀=c
i ij
n j u
1
,...,1,1 (6.9)
那么,FCM 的价值函数(或目标函数)确实是式(6.2)的一样化形式:
∑∑∑====c
i n
j
ij m ij c
i i c d u J c c U J 1
2
1
1),...,,(, (6.10)
那个地址u ij 介于0,1间;c i 为模糊组I 的聚类中心,d ij =||c i -x j ||为第i 个聚类中心与第j 个数据点间的欧几里德距离;且[)∞∈,1m 是一个加权指数。
构造如下新的目标函数,可求得使(6.10)式达到最小值的必要条件:
∑∑∑∑∑∑=====-+=-+=n
j c
i ij j c
i n
j
ij m ij n
j c
i ij j c n c u d u u c c U J c c U J 1
1
1
2
11
111)1()
1(),...,,(),...,,,...,,(λλλλ (6.11)
那个地址λj ,j=1到n ,是(6.9)式的n 个约束式的拉格朗日乘子。
对所有输入
参量求导,使式(6.10)达到最小的必要条件为:
∑∑===
n j m ij
n
j j
m ij
i u
x u
c 1
1 (6.12)
和
∑=-⎪⎪⎭
⎫ ⎝⎛=
c
k m kj ij ij d d u 1)
1/(21
(6.13)
由上述两个必要条件,模糊C 均值聚类算法是一个简单的迭代进程。
在批处置方式运行时,FCM 用以下步骤确信聚类中心c i 和隶属矩阵U[1]:
步骤1:用值在0,1间的随机数初始化隶属矩阵U ,使其知足式(6.9)中的约束条件
步骤2:用式(6.12)计算c 个聚类中心c i ,i=1,…,c 。
步骤3:依照式(6.10)计算价值函数。
若是它小于某个确信的阀值,或它相对上次价值函数值的改变量小于某个阀值,那么算法停止。
步骤4:用(6.13)计算新的U 矩阵。
返回步骤2。
上述算法也能够先初始化聚类中心,然后再执行迭代进程。
由于不能确保FCM 收敛于一个最优解。
算法的性能依托于初始聚类中心。
因此,咱们要么用另外的快速算法确信初始聚类中心,要么每次用不同的初始聚类中心启动该算法,多次运行FCM 。
模糊c 均值聚类算法如下: Reapeat for l=1 2 3……..
Step 1:compute the cluseter prototypes(means):
Step 2:compete the distance:
Step 3:Update the partition matrix:
算法改良
1)在模糊聚类的目标函数中Bezdek引入了加权指数m,使Dum的聚类准那么变成m=2时候的特例,从数学上说m的显现不自然且没有必要,
但如果是不给以虑属度乘以权值,那么从硬聚类准那么函数到软聚类
目标函数的推行准那么是无效的,参数m又称为滑腻因子,操纵着模
式早模糊类间的分享程度,因此,要实现模糊c聚类就要选择一适合
的m,但是最正确的m的选取目前还缺乏理论,监管存在一些体会值
或体会范围,但没有面向问题的优选方式,也缺少参数m的有效性评
判准那么
2)尽管模糊聚类是一种无监督的分类,但此刻的聚类算法却=需要应用聚类原型的先验条件,不然算法会产生误导,从未破坏算法的无监督
性和自动化。
3)因为模糊聚类目标是非凸的,而模糊C均值聚类算法的计算进程又是迭代登山,一次很容易陷入局部极值点,从而得不到最优解或中意解,
同时,大数据量下算法耗时也是困扰人们的一大难题,这2个问题目
前还不能取得全面的解决。
4)FCM类型的聚类算法属于划份方式,关于1组给定的样本集,不管数据中有无聚类结构,也不问分类结果是不是有效,总把数据划分到C
个子类中,换言之,现有的聚类分析与聚类趋势,和有效分析是隔离
的分离得。
5)FCM的聚类算法是针对特点空间中的点集设计的,关于特殊类型的数据,比如在样本每维特点的赋值不是一个数,而是一个区间。
集合和
模糊数时,FCM类型的算法无法直接处置
模糊C均值聚类算法存在上述缺点,改良的算法正确率能达到更高。
Fcm 算法在处置小数据集的时候是有效的,但随着数据容量和维数的增加,迭代步骤会显著增加,而且在迭代的每一步都要对整个数据集进行操作,无法知足数据挖掘时的需要。
改良算法的思想是第一采纳随机抽样的方法,从数据集当选取多个样本,对每一个样本应用FCM算法,将取得的结果作为初始群体,然后再利用遗传算法对聚类结果进行优化,选取其中的最优解做为问题的输出,由于采样技术显著的紧缩了问题的规模,而遗传又能够对结果进行全局最优化处置,因此在时刻性能和聚类质量上都能取得较中意的结果。
遗传算法是美国Michigon大学的John Holland研究机械学习时创建的一种新型的优化算法,它的要紧优势是:遗传算法是从一系列点的群体开始搜索而不是从单个样本点进行搜索,遗传算法利用适应值的相关信息,无需持续可导或其他辅助信息,遗传算法利用转移概率规那么,而非确信性规那么进行迭代,遗传算法搜索进程中,以对群体进行分化以实现并行运算,遗传算法通过遗传变异和杂交算子的作用,以保证算法以概率1收敛到全局最优解—具有较好的全局特性,第二遗传算法占用运算机的内存小,尤其适用计算复杂的非线性问题。
遗传算法的设计部份
(1)种群中个体的确信
聚类的关键问题是聚类中心的确信,因此能够选取聚类中心作为种群的个体,由于共有C个聚类中心,而每一个聚类中心是一个S维的实数向量,因此每一个个体的初始值是一个c*s维的市属向量。
(2)编码
经常使用的编码方式有二进制与实数编码,由于二进制编码的方式搜索能力最强,且交叉变异操作简单高效,因此采纳二进制的编码方式,同时避免在进行交叉操作时对优良个体造成较大的破坏,在二进制编码的方式中采纳格雷码的编码形式。
每一个染色体含c*s个基因链,每一个基因链代表一维的数据,由于原始数据中各个属性的取值可能相差专门大,因此需第一对数据进行互换以统一基因链的长度,能够有以下两种变换方式。
1扫描整个数据集,确信每维数据的取值范围,然后将其变换到同一量级,在保留必然有效位的基础上取整,依照有效位的个数动态的计算出基因链的长度。
2对数据进行正规化处置,即将各维数据都变换到相同的区间,能够算出现在的基因链长度为10。
(3)适应度函数
由于在算法中只利用了聚类中心V,而未利用虑属矩阵u,因此需要对FCM聚类算法的目标函数进行改良,以适用算法的要求,
和目标函数是等价的,由于遗传算法的
适费用一样取值极大,因此可取上式的倒数作为算法的利费用函数。
(4)初始种群的确信
初始种群的一样个体由通过采样后运行FCM算法取得的结果给出,另外的一样个体通过随机指定的方式给出,如此既保证了遗传算法在运算之初就利用背景知识对初始群体的个体进行了优化,使算法能在一个较好的基础上进行,又使得个体不至于过度集中在某一取值空间,保证了种群的多样性。
(5)遗传操作
选择操作采纳维持最优的锦标赛法,锦标赛规模为2,即每次随机取2个个体,比较其适应度,较大的作为父个体,并保留每代的最优个体作为下一代,交叉方式一样采纳单点交叉或多点交叉法进行,通过实验说明单点交叉成效较好,因此采纳单点交叉法,同时在交叉操作中,应该对每维数据分开进行,以保证较大的搜索空间和结果的有效性,变异操作采纳大体位变异法。
(6)终止条件的确信
遗传算法在以下二种情形下终止
a最正确个体维持不变的代数达到设定的阈值
b遗传操作以抵达给定的最大世代数
算法具体步骤如下
1确信参数,如聚类个数样本集大小种群规模最大世代数交叉概率
和变异概率等。
2对数据集进行多次采样并运行FCM算法,取得初始种群的一样个体,
通过随机制定产生另一半个体。
3对数据集进行正规化处置并编码。
4计算初始种群中个体的适应度。
5对种群进行遗传操作产生下一代,在操作的进程中,应该排除产生的
无效个体。
6计算个体的适应度,若是知足终止条件,那么算法终止,不然转到5
继续
在理论上讲进行遗传操作的样本容量越大,聚类的误差越小,由于采样技术显著紧缩了问题规模,而遗传算法又能够对全局进行最优化
处置,因此改良的算法在时刻与性能上都能取得较中意的结果,此算法
利用采样技术来提高算法的运行速度,利用遗传算法对聚类进行优化,
幸免陷入局部最优解,在性能上相较于传统的模糊C均值聚类算法取得
较大提高。
算法实现
·采纳VC++进行编写
文档的读取
#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;i<row;i++)
{
p[i]=new double[col];
for(int j=0;j<col;j++)
{
infile>>p[i][j];
}
}
infile.close();
cout<<"成功读取数据文件:"<<name<<"!\n";
return p;
//释放内存
for(i=0;i<row;i++)
{
delete[]p[i];
}
delete[]p;
}
文档的保留
#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;i<row;i++)
{
for(j=0;j<col;j++)
{
outfile<<data[i][j]<<" ";
}
outfile<<endl;
}
outfile<<endl<<endl;
outfile.close();
}
数据标准化处置
#include "data.h"
double **Standardize(double **data,int row,int col) {
int i,j;
double* a=new double[col]; //矩阵每列的最大值double* b=new double[col]; //矩阵每列的最小值double* c=new double[row]; //矩阵列元素
for(i=0;i<col;i++)
{
//掏出数据矩阵的各列元素
for(j=0;j<row;j++)
{
c[j]=Data[j][i];
}
a[i]=c[0],b[i]=c[0];
for(j=0;j<row;j++)
{
//掏出该列的最大值
if(c[j]>a[i])
{
a[i]=c[j];
}
//掏出该列的最小值
if(c[j]<b[i])
{
b[i]=c[j];
}
}
}
//数据标准化
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
data[i][j]=(data[i][j]-b[j])/(a[j]-b[j]);
}
}
cout<<"完成数据极差标准化处置!\n";
delete[]a;
delete[]b;
delete[]c;
return data;
}
生成样本虑属矩阵
#include "data.h"
void Initialize(double **u, int k, int row)
{
int i,j;
//初始化样本隶属度矩阵
srand(time(0));
for(i=0;i<k;i++)
{
for(j=0;j<row;j++)
{
u[i][j]=(double)rand()/RAND_MAX;//取得一个小于1的小数隶属度
}//rand()函数返回0和RAND_MAX之间的一个伪随机数
}
}
数据归一化处置
#include "data.h"
void Normalize(double **u,int k,int col)
{
int i,j;
double *sum=new double[col];
//矩阵U的各列元素之和
for(j=0;j<col;j++)
{
double dj=0;
for(i=0;i<k;i++)
{
dj=dj+U[i][j];
sum[j]=dj;//隶属度各列之和
}
}
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
u[i][j]=U[i][j]/sum[j];
}//规一化处置(每列隶属度之和为1)
}
}
迭代进程
#include "data.h"
#include "func.h"//对模糊C均值进行迭代运算,并返回有效性评判函数的值double Update(double**u,double**data,double**center,int row,int col, int k)
{
int i,j,t;
double **p=NULL;
for(i=0;i<k;i++)
{
for(j=0;j<row;j++)
{
//模糊指数取2
u[i][j]=pow(u[i][j],2);
}
}
//依照隶属度矩阵计算聚类中心
p=MatrixMul(u,k,row,data,row,col);
for(i=0;i<k;i++)
{
//计算隶属度矩阵每行之和
double si=0;
for(j=0;j<row;j++)
{
si+=u[i][j];
}
for(t=0;t<col;t++)
{
center[i][t]=p[i][t]/si; //类中心
}
}
//计算各个聚类中心i别离到所有点j的距离矩阵dis(i,j)
double* a=new double[col]; //第一个样本点
double* b=new double[col]; //第二个样本点
double**dis=new double*[k]; //中心与样本之间距离矩阵
for(i=0;i<k;i++)
{
dis[i]=new double[row];
}
for(i=0; i<k; i++)
{
//聚类中心
for(t=0; t<col; t++)
{
a[t]=center[i][t]; //暂存类中心
}
//数据样本
for(j=0; j<row; j++)
{
for(t=0; t<col; t++)
{
b[t]=data[j][t];//暂存一样本
}
double d=0;
//中心与样本之间距离的计算
for(t=0; t<col; t++)
{
d+=(a[t]-b[t])*(a[t]-b[t]); //d为一中心与所有样本的距离的平方和
}
dis[i][j]=sqrt(d); //距离
}
}
//依照距离矩阵计算隶属度矩阵
for(i=0;i<k;i++)
{
for(j=0;j<row;j++)
{
double temp=0;
for(t=0;t<k;t++)
{
//dis[i][j]依次除以所在列的各元素,加和;
temp+=pow(dis[i][j]/dis[t][j],2/(2.0-1));//一个类中心和一个元素的距离平方与
}
u[i][j]=1/temp;//所有类与该元素距离平方的和的商
}
}
//计算聚类有效性评判函数
double func1=0;
for(i=0;i<k;i++)
{
double func2=0;
for(j=0;j<row;j++)
{
func2+=pow(u[i][j],2.0)*pow(dis[i][j],2);
}
func1+=func2;
}
double obj_fcn=1/(1+func1);
return obj_fcn;
//内存释放
delete[]a;
delete[]b;
for(i=0;i<k;i++)
{
delete[]dis[i];
}
delete[]dis;
}
详细进程
#include "data.h"
#include "func.h"
#include "max.h"
//全局变量概念
double **Data; //数据矩阵
double **Center; //聚类中心矩阵double **U; //样本隶属度矩阵
int m; //样本总数
int n; //样本属性数
int k; //设定的划分类别数
int main()
{
int Lab; //数据文件标号
int num; //算法运行次数
/////////////////////////////////////////////////////////////// cout<<"模糊C均值聚类算法:"<<endl;
cout<<"1-iris.txt; 2-wine.txt; 3-ASD_12_2.txt; 4-ASD_14_2.txt"<<endl;
cout<<"请选择数据集: Lab=";
cin>>Lab;
cout<<"设定运行次数: mum=";
cin>>num;
//各次运行终止后的目标函数
double* Index=new double[num];
//各次运行终止后的聚类正确率
double* R=new double [num];
//num次运行的平均目标函数及平均正确率
double M_Index=0;
double M_R=0;
//FCM聚类算法运行num次,并保留记录与结果
for(int i=0;i<num;i++)
{
int j;
double epsilon=1e-4;
int e=0;
int nx=0;
//记录持续无改良次数
int E[200]={0};
if(i>0)
{
cout<<endl<<endl;
cout<<setfill('#')<<setw(10)<<endl;
}
cout<<"第"<<i+1<<"次运行记录:"<<endl;
//读取数据文件
if(Lab==1)
{
m=150;
n=4;
k=3;
Data=DataRead("dataset\\iris.txt",m,n);
}
else if(Lab==2)
{
m=178;
n=13;
k=3;
Data=DataRead("dataset\\wine.txt",m,n);
}
else if(Lab==3)
{
m=535;
n=2;
k=12;
Data=DataRead("dataset\\ASD_12_2.txt",m,n); }
else if(Lab==4)
{
m=685;
n=2;
k=14;
Data=DataRead("dataset\\ASD_14_2.txt",m,n); }
//数据极差标准化处置
Data=Standardize(Data,m,n);
//聚类中心及隶属度矩阵,内存分派
Center=new double*[k];
U=new double *[k];
for(j=0;j<k;j++)
{
Center[j]=new double[n];
U[j]=new double[m];
}
//隶属度矩阵的初始化
Initialize(U, k, m);
//对隶属度矩阵进行归一化
Normalize(U,k,m);
//历次迭代进程中的目标函数
double Objfcn[100]={0};
cout<<"第"<<i+1<<"次运行记录:"<<endl;
cout<<"开始迭代进程!"<<endl;
cout<<"*******************************"<<endl;
//输出精度为小数点后5位
cout.precision(5);
//固定格式
cout.setf(ios::fixed);
//目标函数持续20代无改良,停止该次聚类迭代进程
while(e<20)
{
nx++;
//聚类迭代进程
Objfcn[nx]=Update(U,Data,Center,m,n,k);
//统计目标函数持续无改良次数e
if(nx>0 && Objfcn[nx]-Objfcn[nx-1]<epsilon )
{
e++;
}
else
{
e=0;
}
E[nx]=e;
}
//输出结果到文件,保留
ofstream outfile("运行记录.txt",ios::app);
outfile<<"第"<<i+1<<"次运行记录:"<<endl;
outfile<<"开始迭代进程!"<<endl;
outfile<<"*******************************"<<endl;
outfile.precision(5);
outfile.setf(ios::fixed);
for(int n1=1;n1<=nx;n1++)
{
cout<<"e["<<setw(2)<<n1<<"]="<<setw(2)<<E[n1]<<" Objfcn["
<<setw(2)<<n1<<"]="<<Objfcn[n1]<<" \n";
//保留数据文件
outfile<<"e["<<setw(2)<<n1<<"]="<<setw(2)<<E[n1]<<" Objfcn["
<<setw(2)<<n1<<"]="<<Objfcn[n1]<<" \n";
}
cout<<endl;
outfile<<endl;
outfile.close();
//本次运行的最大目标函数
Index[i]=Objfcn[nx];
//保留聚类正确率,输出聚类结果:
R[i]=Result(Lab, U, k, m, i);
//内存释放
for(j=0;j<k;j++)
{
delete[]Center[j];
delete[]U[j];
}
delete[]Center;
delete[]U;
}
//////////////////////////统计平均///////////////////////////////////
double temp1=0, temp2=0;
for(i=0;i<num;i++)
{
temp1+=Index[i];
temp2+=R[i];
}
//计算各次结果的统计平均
M_Index=(double)temp1/num;
M_R=(double)temp2/num;
cout<<"////////////////////////////////////////////////////////// ////"<<endl;
cout<<num<<"次运行,平均聚类正确率: "<<100*M_R<<"%"<<endl;
//输出精度为小数点后6位
cout.precision(6);
//固定格式
cout.setf(ios::fixed);
cout<<"平均目标函数: "<<M_Index<<endl;
//统计结果文件保留
ofstream resultfile("聚类结果.txt",ios::app);
resultfile<<"//////////////////////////////////////////////////// //////////"<<endl;
resultfile<<num<<"次运行,平均聚类正确率: "<<100*M_R<<"%"<<endl;
//输出精度为小数点后6位
resultfile.precision(6);
//固定格式
resultfile.setf(ios::fixed);
resultfile<<"平均目标函数: "<<M_Index<<endl;
return 0;
}
采纳闻名的iris数据集对程序进行测试,
运算次数输入10次
能对数组实现分类,可是分类正确率不是很理想,没达到预期的90%以上
总结
这次综合实习,第一我学会了模糊C均值聚类算法,以前没接触过,也不明白何为数据集,数据集是做啥用的,增加了自己的观点,第二增强了自我学习能力,平常学习的学习都是教师已经安排好得内容,看啥知识都已经明白,只需要安心的看就能够学会,都是书本上的知识,没有联系实际,一样都是一些理论算法,算法比较简单而且古老,但这次综合实习通过自己从网上查找资料学习,了解算法的详细步骤,研究算法的不足,尽管查找资料学习的进程比较繁琐,但总算在最后学会了模糊C均值聚类算法,也对算法的改良有所了解,人工智能学习的GA遗传算法进行了改良,通过这次综合实习,我对不知道知识的学习有了一个比较系统的学习进程,为以后的自我学习打下了基础,模糊C均值聚类算法的程序是用c++实现的,通过对程序的而研究,我关于文件的读取保留计算的迭代进程等都已经超级的了解,关于以前所学的进行了一次温习,这次综合实现收成专门大,自己所学的东西学会了如何利用,不同的算法进行衔接进行优化,实现对最优解的优化,感激朱教师的帮忙使我能顺利的完成综合实习。
参考文献
[1] 高新波,模糊c均值聚类算法中加权指数m的研究[J],电子学报,2000,28(4):80-83
[2] 朱剑英,应用模糊数学方式的假设干关键问题及处置方式[j].模糊
系统与数学,1992,11(2):57-63
[3] 刘蕊洁张金波刘锐,模糊c均值聚类算法,重庆工学院学报,2007-21-1
[4] 高新波。
模糊聚类分析及其应用[M].西安:西安电子科学出版社,2004
[5] 高新波,谢维信.模糊聚类理论进展及应用的研究进展[J].科学通
报,1999,44(21):2241-2251
[6] 张洁,高新波,焦李成.基于特点加权的模糊聚类新算法[J],电子
学报,2006,34(1):412-420
[7] Chan K P, Cheung Y S. Clustering of clusters [J]. Pattern Recognition,1992,25(2):211-217
without a teacher[J].IEEE Transactions of Infornation
Theory,2005,23(6):223-230.
[9] Babusk R . FUZZY AND NEURAL
CONTROL[M].Nethealands:Delft University of
Technology,2001
[10]Theodoridis S.Pattern Recongnition [M]. Second
A:Elsevier Scinece,2003
[11]MAULIK U.BANDYOPADHYAY S.Genetic algorithm-based
clustering technique[J].pattern
Recognition,2000,33(9):144-1465
[12] J.C.Bezdek.Pattern recognition with fuzzy objective
funcition algorithms.New York:Plenum,1981
[13] R.Duda and P.Hart .Pattern classification and scene
analysis.New York:Wiley,1973
[14]J.K.Dunn.J.Cybern.1973,3(3):32-57
[15] J.C.Bezdek.IEEE Trans.Syst.Man Cybern.1987,17(5):873-877。