数据预处理之聚类分析

聚类分析    研究对样品或指标分类问题的一种多元统计方法.

根据一批样品的许多观测指标,按照一定的数学公式具体地计算一些样品或一些参数(指标)的相似程度,把相似的样品或指标归为一类。

本文将通过梳理聚类分析全过程,展现如何实现该分析及其原理。

一、对初始数据变换处理--(较详细原理介绍,实践中推荐正向化标准化即可)

(可用spss得到数据均值、标准差)

根据数据特性以及接下来可能进行的操作,有三种变换,可以帮助处理数据:

1.中心化变换:--(方便计算方差、协方差、期望)

中心化变换是先求出每个变量的样本平均值,再从原始数据中减去该变量的均值,就得到中心化后的数据。

设原始观测数据矩阵为:

   

进行中心化变换:

特点:每列数据之和均为0,即每个变量的均值为0.

每列数据的平方和是该列变量样本方差的(n—1)倍.

任何不同两列数据之积是这两列变量样本协方差的(n—1)倍.

2.标准化变换:--(方便计算相关系数矩阵、可以消除数据量纲)

在中心化变换基础上,用变量的标准差进行标准化。

标准差       

标准化       ,  

特点:

数据矩阵中每列数据的平均值为0,方差为1.

数据不再具有量纲,便于不同变量之间的比较.

数据矩阵中任何两列数据之积是两个变量相关系数的(n-1)倍.

*3.对数变换:--(将指数结构化成线性结构)

二、选取聚类变量

选取的原则:(1)与聚类分析的目的密切相关(2)能反映所分类变量的特征(3)对不同研究对象其值有明显的差异 (4)变量之间不能高度相关

主要分为两个指标:相关系数(多用于考察变量之间亲疏程度)、距离(多用于测度样品之间的亲疏程度。

1.相关系数:

①相关系数:

相关系数计算公式:

②夹角余弦:从向量集合的角度所定义的一种测度变量之间亲疏程度的相似系数。

2.距离:有四种类型选择:

1.明考夫斯基距离

,(欧几里得距离是其情形之一)

明氏距离主要缺点: ①明氏距离的值与各指标的量纲有关.②明氏距离没有考虑各变量之间的相关性,没有考虑变量方差的不同.

2.兰氏距离:  

特点:对大的奇异值不敏感,使它特别适合于高度偏倚的数据。不考虑变量相关性。

3.马氏距离(又称广义欧氏距离)

 ,

( \sum表示观测变量之间的协方差短阵。若总体协方差矩阵未知,可用样本协方差矩阵作为估计代替计算。)

特点:不受量纲的影响,考虑了观测变量之间的相关性。也考虑到了各个观测指标取值的差异程度。

4.斜交空间距离:(变量存在相关关系,不相关用欧氏距离即可)

由于各变量之间往往存在着不同的相关关系,用正交空间的距离来计算样本间的距离易变形,所以可以采用斜交空间距离。 

       

三、确定形成类数

一是根据题目要求或生活常识,进行一个大致的类数确定;或者是用算法聚类,根据距离、密度分出大致的类别。

或者是通过计算得出:通过画出聚合系数曲线,找到合适的k值。(肘部法则)

如下:

当曲线突然变缓时,是对应取得的效果较好的K值。效果如下图,应选取4或者5.

四、选择聚类方法

1.系统聚类法:

基本思想:

                  (1)列出距离矩阵D(0)。

                  (2)选择最小的非零数,不妨假设为 d_{pq}  ,于是将   G_p 和   G_q 合并为一类,记为  G_r=G_p+G_q .          

                  (3)给出计算新类与其它类的距离公式,并计算新类与其它类之间的距离Dkr .分别删除D(0)表的第p,q行和第p,q列,并新增一行和一列对应于Dr .得到新矩阵记为D(1).

                (4)再次重复23步,直至所有样本点归为一类。

按照不同的方法定义距离,得到不同的聚类方法

①最短距离法(常用):

②最长距离法:

③组间平均距离法:

④重心法:

⑤类平均法:

类平均法定义类间的距离是两类样品两两之间平方距离的平均.

例:G1对G3距离为6.25,G2对G3距离为2.25;G1、G2合并后,新类G‘对G3距离为(6.25+2.25)/ 2;

最终结果应呈现为:

缺点:样本点数量庞大时,计算量大,且聚类的计算速度也比较慢.

具体代码呈现可参考:数学建模之聚类分析_最短距离法聚类分析例题-CSDN博客

2.kmeans聚类算法:

原理:

Kmeans算法是一种动态迭代的算法。

缺点:由于初始聚类中心是随机选取的,聚类结果会受孤立、离群点影响,甚至因此产生偏差。

    

3.kmeans++算法:(对kmeans算法的改进)

对kmans算法进行改进,其思想为:让初始的聚类中心之间距离尽可能的远从而减少初值与孤立点的影响。而通过改变概率权重:样本点与当前已有聚类间最短距离越大、被选取为下一个聚类中心的概率越大。从而实现让聚类中心更加科学合理的目标。

算法及详细原理可参考:机器学习 K-Means(++)算法_kmeans++-CSDN博客

4.DBSCAN算法:

原理:一种基于密度的聚类方法,聚类前不需要预先指定聚类的个数,生成的簇的个数不定

该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象 (点或其他空间对象) 的数目不小于某一给定闯值。该方法能在具有噪声的空间数据库中发现任意形状的簇,可将密度足够大的相邻区域连接,能有效处理异常数据

用几何的观念直观理解DBSCAN密度算法:

下为DBSCAN算法参考代码:

function [IDX, isnoise]=DBSCAN(X,epsilon,MinPts)

    C=0;
    
    n=size(X,1);
    IDX=zeros(n,1);
    
    D=pdist2(X,X);
    
    visited=false(n,1);
    isnoise=false(n,1);
    
    for i=1:n
        if ~visited(i)
            visited(i)=true;
            
            Neighbors=RegionQuery(i);
            if numel(Neighbors)<MinPts
                % X(i,:) is NOISE
                isnoise(i)=true;
            else
                C=C+1;
                ExpandCluster(i,Neighbors,C);
            end
            
        end
    
    end
    
    function ExpandCluster(i,Neighbors,C)
        IDX(i)=C;
        
        k = 1;
        while true
            j = Neighbors(k);
            
            if ~visited(j)
                visited(j)=true;
                Neighbors2=RegionQuery(j);
                if numel(Neighbors2)>=MinPts
                    Neighbors=[Neighbors Neighbors2];   %#ok
                end
            end
            if IDX(j)==0
                IDX(j)=C;
            end
            
            k = k + 1;
            if k > numel(Neighbors)
                break;
            end
        end
    end
    
    function Neighbors=RegionQuery(i)
        Neighbors=find(D(i,:)<=epsilon);
    end

end

5.ISODATA算法:

原理:通过迭代获得较为理想的分类成果,找到合适的K值。可以自己设置初始参数,是一种非监督机器学习方法

ISODATA算法通过设置初始参数而引入人机对话环节,并使用归并和分裂等机制。当两类聚中心小于某个阀值时,将它们合并为一类。

        当某类的标准差大于某一阀值时或其样本数目超过某一阀值时,将其分裂为两类,在某类样本数目小于某一阀值时,将其取消。这样根据初始类聚中心和设定的类别数目等参数迭代,最终得到一个比较理想的分类结果。

算法实现参考:【机器学习】聚类算法:ISODATA算法_isodata聚类算法-CSDN博客

  • 32
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的聚类分析是一种常用的数据预处理技术,它可以将数据集中的样本划分为不同的群组或簇。聚类分析可以帮助我们发现数据中的隐藏模式和结构,从而更好地理解数据。 在Python中,有多个库可以用于聚类分析,其中最常用的是scikit-learn库。下面是一些常用的步骤和方法来进行聚类分析数据预处理: 1. 导入库和数据集:首先,需要导入所需的库,如scikit-learn和numpy,并加载要进行聚类分析的数据集。 2. 数据预处理:在进行聚类分析之前,通常需要对数据进行预处理。这包括处理缺失值、标准化数据等。可以使用scikit-learn中的preprocessing模块来完成这些任务。 3. 特征选择:在聚类分析中,选择合适的特征对于结果的准确性非常重要。可以使用特征选择方法来选择最相关的特征。scikit-learn中的feature_selection模块提供了一些常用的特征选择方法。 4. 聚类算法选择:选择适合问题的聚类算法。常见的聚类算法包括K-means、层次聚类、DBSCAN等。scikit-learn中的cluster模块提供了这些算法的实现。 5. 模型训练和评估:使用选择的聚类算法对数据进行训练,并评估聚类结果的质量。可以评估指标如轮廓系数、Calinski-Harabasz指数等来评估聚类的性能。 6. 结果可视化:最后,可以可视化工具如matplotlib来可视化聚类结果,以便更好地理解数据的结构和模式。 --相关--: 1. 什么是聚类分析? 2. 如何处理数据预处理中的缺失值? 3. 有哪些常用的聚类算法? 4. 如何评估聚类结果的质量? 5. 如何使用matplotlib进行结果可视化?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值