【数据分析基础】聚类分析

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);  






















三、运行结果
运行结果1.jpg运行结果2.jpg运行结果3.jpg运行结果4.jpg运行结果5.jpg运行结果6.jpg运行结果7.jpg运行结果8.jpg运行结果9.jpg运行结果10.jpg运行结果11.jpg运行结果18.jpg
四、备注
版本:2014a

以上是关于【数据分析基础】聚类分析的主要内容,如果未能解决你的问题,请参考以下文章

聚类分析:数据挖掘的关键突破口!

聚类分析算法---学习

基于MATLAB的Kmeans聚类算法的仿真与分析

什么是聚类算法?

GRG分析组 | 聚类简介第四部分:聚类算法

聚类简介第四部分:聚类算法