扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
以下代码调试通过:
10年积累的成都网站设计、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有沾化免费网站建设让你可以放心的选择与我们合作。
1234567class LuciaClass: # 定义类 def luciaprint(self, text): # 类里面的方法 print('\n', text) # 方法就是输出 text x = LuciaClass() # 方法的实例 xx.luciaprint('today is a bad day ~~~') # 实例调用类方法
运行效果:
【嵌牛导读】FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则是一种柔性的模糊划分。
【嵌牛提问】FCM有什么用?
【嵌牛鼻子】模糊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 可以表示为:A ={(μA (x i ), x i ) |x i ∈X } (6.1)
有了模糊集合的概念,一个元素隶属于模糊集合就不是硬性的了,在聚类的问题中,可以把聚类生成的簇看成模糊集合,因此,每个样本点隶属于簇的隶属度就是[0,1]区间里面的值。
FCM 算法需要两个参数一个是聚类数目C ,另一个是参数m 。一般来讲C 要远远小于聚类样本的总个数,同时要保证C1。对于m ,它是一个控制算法的柔性的参数,如果m 过大,则聚类效果会很次,而如果m 过小则算法会接近HCM 聚类算法。算法的输出是C 个聚类中心点向量和C*N的一个模糊划分矩阵,这个矩阵表示的是每个样本点属于每个类的隶属度。根据这个划分矩阵按照模糊集合中的最大隶属原则就能够确定每个样本点归为哪个类。聚类中心表示的是每个类的平均特征,可以认为是这个类的代表点。从算法的推导过程中我们不难看出,算法对于满足正态分布的数据聚类效果会很好。
通过实验和算法的研究学习,不难发现FCM算法的优缺点:
首先,模糊c 均值泛函Jm 仍是传统的硬c 均值泛函J1 的自然推广。J1 是一个应用很广泛的聚类准则,对其在理论上的研究已经相当的完善,这就为Jm 的研究提供了良好的条件。
其次,从数学上看,Jm与Rs的希尔伯特空间结构(正交投影和均方逼近理论) 有密切的关联,因此Jm 比其他泛函有更深厚的数学基础。
最后,FCM 聚类算法不仅在许多邻域获得了非常成功的应用,而且以该算法为基础,又提出基于其他原型的模糊聚类算法,形成了一大批FCM类型的算法,比如模糊c线( FCL) ,模糊c面(FCP) ,模糊c壳(FCS) 等聚类算法,分别实现了对呈线状、超平面状和“薄壳”状结构模式子集(或聚类) 的检测。
模糊c均值算法因设计简单,解决问题范围广,易于应用计算机实现等特点受到了越来越多人的关注,并应用于各个领域。但是,自身仍存在的诸多问题,例如强烈依赖初始化数据的好坏和容易陷入局部鞍点等,仍然需要进一步的研究。
首先,打开matlab 这款软件,注意其版本,这是在WIN7 64位上运行的。
2方法一,在matlab的命令窗口中输入 type fcm; fcm是其自带的一个函数,这样命令窗口中就会出现该函数的相关信息
3方法二,在命令窗口中输入 open fcm; 这样软件会找到其相关的M文件,也就是函数文件,其路径,3是fcm函数在M文件中的定义
4方法三,在命令窗口中输入 edit fcm,其效果和上述一样
5方法四,就是你故意输入错,这样软件就会给出错误提示,如输入FC,这样软件就会自动提示,你是不是想要输入FCM ,按提示点3就会出现FCM正确的定义
6如下是输入错误后的正确提示,这四种方法会很有用的,好好掌握!
模糊C均值聚类算法,可将输入的数据集data聚为指定的cluster_n类
【函数描述】
语法格式
[center, U, obj_fcn] = FCM(data, cluster_n, options)
用法:
1. [center,U,obj_fcn] = FCM(Data,N_cluster,options);
2. [center,U,obj_fcn] = FCM(Data,N_cluster);
输入变量
data ---- n*m矩阵,表示n个样本,每个样本具有m维特征值
cluster_n ---- 标量,表示聚合中心数目,即类别数
options ---- 4*1列向量,其中
options(1): 隶属度矩阵U的指数,1(缺省值: 2.0)
options(2): 最大迭代次数(缺省值: 100)
options(3): 隶属度最小变化量,迭代终止条件(缺省值: 1e-5)
options(4): 每次迭代是否输出信息标志(缺省值: 0)
输出变量
center ---- 聚类中心
U ---- 隶属度矩阵
obj_fcn ---- 目标函数值
我贴部分FCM的Matlab代码:
expo = options(1); % Exponent for U
max_iter = options(2); % Max. iteration
min_impro = options(3); % Min. improvement
display = options(4); % Display info or not
obj_fcn = zeros(max_iter, 1); % Array for objective function
U = initfcm(cluster_n, data_n); % Initial fuzzy partition
% Main loop
for i = 1:max_iter,
[U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo);
if display,
fprintf('Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));
end
% check termination condition
if i 1,
if abs(obj_fcn(i) - obj_fcn(i-1)) min_impro, break; end,
end
end
其中
U = initfcm(cluster_n, data_n); % Initial fuzzy partition
这个就是初始化划分矩阵,随机产生一个隶属度矩阵,
代码如下:
U = rand(cluster_n, data_n);
col_sum = sum(U);
U = U./col_sum(ones(cluster_n, 1), :);
上面就是它初始化的一个隶属度矩阵,
cluster_n行,data_n列。
即一列中从上到下表示每个样本隶属与每一类的隶属度。
然后在算法中不断迭代,
最后得到的还是如此大的一个矩阵,代表每个样本隶属与每一类的隶属度
然后选择最大的那个就是,它就属于那一类。
data = rand(100, 2);
[center,U,obj_fcn] = fcm(data, 2);
plot(data(:,1), data(:,2),'o');
maxU = max(U);
index1 = find(U(1,:) == maxU);
index2 = find(U(2, :) == maxU);
line(data(index1,1),data(index1, 2),'linestyle','none',...
'marker','*','color','g');
line(data(index2,1),data(index2, 2),'linestyle','none',...
'marker', '*','color','r');
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流