【数据分析基础】聚类分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【数据分析基础】聚类分析相关的知识,希望对你有一定的参考价值。
参考技术A 划分方法 :K-MEANS(K均值)、K-MEDOIDS(K中心点)、CLARANS算法(基于选择的算法)层次分析方法 :BIRCH算法(平衡迭代规约和聚类)、CURE算法(代表点聚类)、CHAMELEON算法(动态模型)
基于密度的算法 :DBSCAN算法(基于高密度连续区域)、DENCLUE算法(密度分布函数)、OPTICS算法(对象排序识别)
基于网格的方法 :STING算法(统计信息网络)、CLIOUE算法(聚类高维空间)、WAVE-CLUSTER算法(小波变换)
基于模型的方法 :统计学方法、神经网络方法
K-Means聚类也叫快速聚类法,在最小化误差函数的基础上将数据划分为预定的类数K。原理简单,便于处理大量数据。
K-Medoids聚类算法不采用簇中对象的平均值作为簇中心,而选用簇中离平均值最近的对象作为簇中心。
①从N个样本数据中随机选取K个对象作为初始的聚类中心;
②分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中;
③所有对象分配完成后,重新计算K个聚类的中心;
④与前一次计算的K个聚类中心比较,如果聚类中心发生变化,转第②步,否则转第⑤步。
⑤当质心不发生变化时停止并输出聚类结果。
连续属性:首先对各属性值进行零-均值规范( zscore ),在进行距离计算。距离计算常用的有:
· 欧几里得距离
· 曼哈顿距离
· 闵可夫斯基距离
文档数据:先将文档数据整理成 文档-词矩阵 格式,再用 余弦相似性 度量。
连续属性的SSE
文档数据的SSE
组内相似性越大,组件差别越大,聚类效果越好。常用的评价方法有:
· purity评价法
· RI评价法
· F值评价法
层次聚类树:Z = linkage(x,method,metric)
层次聚类或者高斯混合分布聚类模型:T = cluster(Z,’maxclust’,n) 或者 T = cluster(Z,’cutoff’,c)
其中,Z是使用linkage函数构建的层次聚类数,是一个(m-1)×3维矩阵,其中m是观察的样本数;当参数为’maxclust’时,n为聚类的类别;当参数为’cutoff’时,c表示剪枝的阈值。
k均值聚类模型:[IDX,C,sumd,D] = kmeans(x,k,param1,val1,param2,val2,...)
其中,IDX返回每个样本数据的类别;C返回k个类别的中心向量;sumd返回每个类别样本到中心向量的距离和;D返回每个样本到中心的距离。
模糊聚类模型:[center,U,obj_fcn] = fcm(data,cluster_n)
其中,U返回最终模糊分区矩阵;obj_fcn为循环过程中目标函数的值。
自组织神经网络聚类模型:net = selforgmap(dimensions,coverSteps,initNeighbor,topologyFcn,distanceFcn)
聚类分析基于matlab交通干道车流量FCM聚类分析及预测含Matlab源码 1141期
一、简介
伴随着模糊集理论的形成、发展和深化,RusPini率先提出模糊划分的概念。以此为起点和基础,模糊聚类理论和方法迅速蓬勃发展起来。针对不同的应用,人们提出了很多模糊聚类算法,比较典型的有基于相似性关系和模糊关系的方法、基于模糊等价关系的传递闭包方法、基于模糊图论的最大支撑树方法,以及基于数据集的凸分解、动态规划和难以辨别关系等方法。然而,上述方法均不能适用于大数据量的情况,难以满足实时性要求较高的场合,因此实际应用并不广泛。
模糊聚类分析按照聚类过程的不同大致可以分为三大类:
(1)基于模糊关系的分类法:其中包括谱系聚类算法(又称系统聚类法)、基于等价关系的聚类算法、基于相似关系的聚类算法和图论聚类算法等等。它是研究比较早的一种方法,但是由于它不能适用于大数据量的情况,所以在实际中的应用并不广泛。
(2)基于目标函数的模糊聚类算法:该方法把聚类分析归结成一个带约束的非线性规划问题,通过优化求解获得数据集的最优模糊划分和聚类。该方法设计简单、解决问题的范围广,还可以转化为优化问题而借助经典数学的非线性规划理论求解,并易于计算机实现。因此,随着计算机的应用和发展,基于目标函数的模糊聚类算法成为新的研究热点。
(3)基于神经网络的模糊聚类算法:它是兴起比较晚的一种算法,主要是采用竞争学习算法来指导网络的聚类过程。
在介绍算法之前,先介绍下模糊集合的知识。
HCM聚类算法
首先说明隶属度函数的概念。隶属度函数是表示一个对象x 隶属于集合A 的程度的函数,通常记做μA(x),其自变量范围是所有可能属于集合A 的对象(即集合A 所在空间中的所有点),取值范围是[0,1],即0<=μA(x),μA(x)<=1。μA(x)=1 表示x 完全隶属于集合A,相当于传统集合概念上的x∈A。一个定义在空间X={x}上的隶属度函数就定义了一个模糊集合A,或者叫定义在论域X={x}上的模糊子集A’。对于有限个对象x1,x2,……,xn 模糊集合A’可以表示为:
FCM算法流程图
FCM算法是目前比较流行的一种模糊聚类算法,究其原因大致有以下几个方面:首先,模糊C—均值泛函Jm仍是传统硬C一均值泛函J1的自然推广;硬C一均值泛函J1是一个应用十分广泛的聚类准则,对其在理论上的研究己经相当完善,这就为Jm的研究提供了良好的条件;数学上看,Jm与RS的希尔伯特空间结构(正交投影和均方逼近理论)有密切的关系,因此比其它泛函有更深厚的数学基础;最后,也是最重要的是该目标函数不仅在许多领域获得了非常成功的应用,而且以FCM算法为基础,人们提出的基于其它原型的模糊聚类算法,形成了一大批FCM类型的算法:如模糊C一线(FCL)、模糊C一面(FCP)等聚类算法,分别实现了对呈线状、超平面状结构模式子集(或聚类)的检测。
FCM算法应用到颜色迁移中
钱小燕等人将聚类算法应用到色彩迁移中,提出了一种基于图像模糊颜色聚类的自适应色彩迁移算法。该算法首先将源图像和目标图像分别转换到lαβ颜色空间:利用FCM 算法把源图像和目标图像划分为具有不同颜色特征的聚类,然后分析图像中的颜色特征:分别算出每个域的匹配权值,对每个目标图像的匹配权值,从源图像中选取一个最接近域作为最佳匹配域;最后根据目标图像各聚类域与源图像中的匹配域之间的关系,引入隶属度因子,两个域的处理结果分别进行加权平均,获得色彩迁移结果。使用FCM的思想对图像进行聚类域划分的思路是:设准备处理图像I的大小是S×H,即对颜色聚类颜色分析的个数是N,N = S×H,则图像I可表示成集合,I={p1 ,p2 ...,pn }。图像被分为c类,每个类的聚类中心为V={v1,v2 ...,vc },用uik表示像素pk隶属于聚类中心Vi的隶属度,定义图像的隶属度矩阵U。具体算法如下:
步骤一:把源图像和目标图像分别从RGB转换到lαβ空间。
步骤二:确定待处理图像聚类域个数c,然后初始化聚类中心。假设加权指数m=2,设定处理的最大迭代次数为50。
步骤三:当迭代次数T 小于50 时,根据初始化聚类中心计算隶属度矩阵。如果pk≠vi,则对于所有的vi ( i=1,2,…,C ),利用下式计算隶属度矩阵。
二、源代码
clear
clc
% 注释中前面带数字的地方是您可能需要改的地方。
xls_name = 'road24shiyan0604.xlsx'; % 1.要读取的Excel表格的名字
df = xlsread(xls_name);
data = df(:,2:4);
time = df(:,1)';
%% 聚类处理
% 加权重在这一部分
a = 0;
b = 0;
c = 0;
for k1 = 1:10
a = a + 0.1;
for k2 = 1:(10-10*a)
b = b + 0.1;
c = 1 - a - b;
weight = [a,b,c];
[U,V,objFun] = myfcm(weight, data, 3);
%% 标记,U倒数第二行是时间,倒数第一行是类别
U = [U; time; zeros(1,length(data))];
for i = 1:length(data)
u = U(1:3,i);
idx = find(u == max(u));
U(5,i) = idx(1);
end
xlswrite(xls_name, U(5,:)', ['E2:E',num2str(length(data)+1)])
%% 画聚类图
colors = ['y', 'm', 'c', 'r', 'g', 'b', 'w', 'k'];
count = 0;
figure
for j = 1:length(data)
count = count + 1;
leibie = U(5,j);
x = data(j,1);
y = data(j,2);
z = data(j,3);
color = colors(ceil(count/36));
if leibie == 1
shape = '*';
elseif leibie == 2
shape = 'o';
elseif leibie == 3
shape = 'd';
end
F1 = plot3(x,y,z,[color,shape], 'MarkerSize', 15);
hold on
end
hold off
end
end
function [U, V,objFcn] = myfcm(weight, data, c, T, m, epsm)
% fuzzy c-means algorithm
% 输入: data: 待聚类数据,n行s列,n为数据个数,s为每个数据的特征数
% c : 聚类中心个数
% m : 模糊系数
% 输出: U : 隶属度矩阵,c行n列,元素uij表示第j个数据隶属于第i类的程度
% V : 聚类中心向量,c行s列,有c个中心,每个中心有s维特征
% written by Zhang Jin
% see also : mydist.m myplot.m
if nargin < 4
T = 100; %默认迭代次数为100
end
if nargin < 6
epsm = 1.0e-6; %默认收敛精度
end
if nargin < 5
m = 2; %默认模糊系数值为2
end
[n, s] = size(data);
% 初始化隶属度矩阵U(0),并归一化
U0 = rand(c, n);
temp = sum(U0,1);
for i=1:n
U0(:,i) = U0(:,i)./temp(i);
end
iter = 0;
V(c,s) = 0;
U(c,n) = 0;
distance(c,n) = 0;
while( iter<T )
iter = iter + 1;
% U = U0;
% 更新V(t)
Um = U0.^m;
V = Um*data./(sum(Um,2)*ones(1,s)); % MATLAB矩阵相乘啊,好东西
% 更新U(t)
for i = 1:c
for j = 1:n
distance(i,j) = mydist(data(j,:),V(i,:),weight); % 算距离,去data的第j行
end
end
U=1./(distance.^m.*(ones(c,1)*sum(distance.^(-m))));
objFcn(iter) = sum(sum(Um.*distance.^2));
% FCM算法停止条件
if norm(U-U0,Inf)<epsm
end
% myplot(U,objFcn);
三、运行结果
四、备注
版本:2014a
以上是关于【数据分析基础】聚类分析的主要内容,如果未能解决你的问题,请参考以下文章