描述
聚类分析是多元统计分析的一种,也是无监督模式识别的一个重要分支,在模式分类 图像处理和模糊规则处理等众多领域中获得最广泛的应用。它把一个没有类别标记的样本按照某种准则划分为若干子集,使相似的样本尽可能归于一类,而把不相似的样本划分到不同的类中。硬聚类把每个待识别的对象严格的划分某类中,具有非此即彼的性质,而模糊聚类建立了样本对类别的不确定描述,更能客观的反应客观世界,从而成为聚类分析的主流。
模糊聚类算法是一种基于函数最优方法的聚类算法,使用微积分计算技术求最优代价函数,在基于概率算法的聚类方法中将使用概率密度函数,为此要假定合适的模型,模糊聚类算法的向量可以同时属于多个聚类,从而摆脱上述问题。
模糊聚类分析算法大致可分为三类
1)分类数不定,根据不同要求对事物进行动态聚类,此类方法是基于模糊等价矩阵聚类的,称为模糊等价矩阵动态聚类分析法。
2)分类数给定,寻找出对事物的最佳分析方案,此类方法是基于目标函数聚类的,称为模糊C均值聚类。
3)在摄动有意义的情况下,根据模糊相似矩阵聚类,此类方法称为基于摄动的模糊聚类分析法
模糊的c均值聚类算法:-------- 一种模糊聚类算法,是k均值聚类算法的推广形式,隶属度取值为[0 1]区间内的任何一个数,提出的基本根据是“类内加权误差平方和最小化”准则;
模糊C 均值聚类算法(FCM,Fuzzy c-means) 是从硬C 均值聚类算法发展而来(HCM,Hardc-means )。
硬C划分和模糊C 划分
FCM算法原理
FCM 算法步骤
给定聚类类别数C,设定迭代收敛条件,初始化各个聚类中心;
(1)重复下面的运算,直到各个样本的隶属度值稳定:
(2)用当前的聚类中心根据公式(6) 计算隶属度函数;
A.用当前的隶属度函数根据公式(5) 重新计算各个聚类的中心。
B.当算法收敛时,就得到了各类的聚类中心和各个样本对于各类的隶属度值,从而完成了模糊聚类划分。
算法实现
·采用VC++进行编写
文档的读取
#include “data.h”
//函数定义
double **DataRead(char*name,int row,intcol)
{
double**p=new double* [row];
ifstreaminfile;
infile.open(name,ios::in);
for(inti=0;i《row;i++)
{
p[i]=newdouble[col];
for(intj=0;j《col;j++)
{
infile》》p[i][j];
}
}
infile.close();
cout《《“成功读取数据文件:”《《name《《“!\n”;
returnp;
//释放内存
for(i=0;i《row;i++)
{
delete[]p[i];
}
delete[]p;
}
文档的保存
#include “data.h”
void DataSave(double**data,int row,intcol,char*name)
{
inti,j;
ofstreamoutfile;
//打开文件,输出数据
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《《end