大数据分析之聚类算法

2024-05-15

1. 大数据分析之聚类算法

大数据分析之聚类算法
1. 什么是聚类算法
所谓聚类,就是比如给定一些元素或者对象,分散存储在数据库中,然后根据我们感兴趣的对象属性,对其进行聚集,同类的对象之间相似度高,不同类之间差异较大。最大特点就是事先不确定类别。
这其中最经典的算法就是KMeans算法,这是最常用的聚类算法,主要思想是:在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,所有点分配完毕之后,根据一个类簇内的所有点重新计算该类簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的步骤,直至类簇中心点的变化很小,或者达到指定的迭代次数。
KMeans算法本身思想比较简单,但是合理的确定K值和K个初始类簇中心点对于聚类效果的好坏有很大的影响。
    聚类算法实现
    假设对象集合为D,准备划分为k个簇。
    基本算法步骤如下:
    1、从D中随机取k个元素,作为k个簇的各自的中心。
    2、分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
    3、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
    4、将D中全部元素按照新的中心重新聚类。
    5、重复第4步,直到聚类结果不再变化。
    6、将结果输出。

核心Java代码如下:
/**
* 迭代计算每个点到各个中心点的距离,选择最小距离将该点划入到合适的分组聚类中,反复进行,直到
* 分组不再变化或者各个中心点不再变化为止。
* @return
*/
public List[] comput() {
List[] results = new ArrayList[k];//为k个分组,分别定义一个聚簇集合,未来放入元素。

    boolean centerchange = true;//该变量存储中心点是否发生变化
    while (centerchange) {
        iterCount++;//存储迭代次数
        centerchange = false;
        for (int i = 0; i < k; i++) {
            results[i] = new ArrayList();
        }
        for (int i = 0; i < players.size(); i++) {
            T p = players.get(i);
            double[] dists = new double[k];
            for (int j = 0; j < initPlayers.size(); j++) {
                T initP = initPlayers.get(j);
                /* 计算距离  这里采用的公式是两个对象相关属性的平方和,最后求开方*/
                double dist = distance(initP, p);
                dists[j] = dist;
            }

            int dist_index = computOrder(dists);//计算该点到各个质心的距离的最小值,获得下标
            results[dist_index].add(p);//划分到对应的分组。
        }
        /*
         * 将点聚类之后,重新寻找每个簇的新的中心点,根据每个点的关注属性的平均值确立新的质心。
         */
        for (int i = 0; i < k; i++) {
            T player_new = findNewCenter(results[i]);
            System.out.println("第"+iterCount+"次迭代,中心点是:"+player_new.toString());
            T player_old = initPlayers.get(i);
            if (!IsPlayerEqual(player_new, player_old)) {
                centerchange = true;
                initPlayers.set(i, player_new);
            }

        }

    }

    return results;
}
上面代码是其中核心代码,我们根据对象集合List和提前设定的k个聚集,最终完成聚类。我们测试一下,假设要测试根据NBA球员的场均得分情况,进行得分高中低的聚集,很简单,高得分在一组,中等一组,低得分一组。
我们定义一个Player类,里面有属性goal,并录入数据。并设定分组数目为k=3。
测试代码如下:
List listPlayers = new ArrayList();
Player p1 = new Player();
p1.setName(“mrchi1”);
p1.setGoal(1);
p1.setAssists(8);
listPlayers.add(p1);

    Player p2 = new Player();
    p2.setName("mrchi2");
    p2.setGoal(2);
    listPlayers.add(p2);

    Player p3 = new Player();
    p3.setName("mrchi3");
    p3.setGoal(3);
    listPlayers.add(p3);
    //其他对象定义此处略。制造几个球员的对象即可。
    Kmeans kmeans = new Kmeans(listPlayers, 3);
    List[] results = kmeans.comput();
    for (int i = 0; i < results.length; i++) {
        System.out.println("类别" + (i + 1) + "聚集了以下球员:");
        List list = results[i];
        for (Player p : list) {
            System.out.println(p.getName() + "--->" + p.getGoal()

        }
    }
算法运行结果:

可以看出中心点经历了四次迭代变化,最终分类结果也确实是相近得分的分到了一组。当然这种算法有缺点,首先就是初始的k个中心点的确定非常重要,结果也有差异。可以选择彼此距离尽可能远的K个点,也可以先对数据用层次聚类算法进行聚类,得到K个簇之后,从每个类簇中选择一个点,该点可以是该类簇的中心点,或者是距离类簇中心点最近的那个点。

大数据分析之聚类算法

2. 数据分析之聚类分析

RFM分析只能对客户的行为进行分析,包含的信息量有点少。一般来说,对人群进行分类,要综合考虑其行为、态度、模式以及相关背景属性,通过使用特定的方法,发现隐藏在这些信息背后的特征,将其分成几个类别,每一类具有一定的共性,进而做出进一步的探索研究。这个分类的过程就是聚类分析。
                                          
 聚类分析,就是按照个体的特征将它们分类,目的在于让同一个类别内的个体之间具有较高的相似度,而不同类别之间具有较大的差异性。这样,就能够根据不同类别的特征有的放矢地进行分析,并制定出适用于不同类别的解决方案。
  
 聚类可以对变量进行聚类,但是更常见的还是对个体进行聚类,也就是样本聚类。例如对用户、渠道、商品、员工等方面的聚类,聚类分析主要应用在市场细分、用户细分等领域。
  
 为了合理的聚类,需要采用适当的指标来衡量研究对象之间的联系紧密程度,常用的指标有“距离”和“相似系数”,相似系数一般指的是相关系数。假设将研究对象采用点表示,聚类分析时,将“距离”较小的点或“相似系数”较大的点归为同一类,将“距离”较大的点或“相似系数”较小的点归为不同的类。
  
 聚类分析具有如下特点:
  
 1.对于聚类结果是未知的,不同的聚类分析方法可能得到不同的分类结果,或者相同的聚类分析方法但是所分析的变量不同,也会得到不同的聚类结果;
  
 2.对于聚类结果的合理性判断比较主观,只要类别内相似性和类别间差异性都能得到合理的解释和判断,就认为聚类结果是可行的。
  
 聚类分析可以应用于以下场景:
                                          
 聚类分析的步骤:
  
 (1)确定需要参与聚类分析的变量;
  
 (2)对数据进行标准化处理;
  
 因为各个变量间的变量值的数量级别差异较大或者单位不一致,例如一个变量的单位是元,另一个变量的单位是百分比,数量级别差异较大,而且单位也不一致,无法直接进行比较或者计算“距离”和“相似系数”等指标。
  
 (3)选择聚类方法和类别个数;
  
 (4)聚类分析结果解读;
  
 常用的聚类方法包括:
  
 1.快速聚类:也称K均值聚类,它是按照一定的方法选取一批聚类中心点,让个案向最近的聚类中心点聚集形成初始分类,然后按照最近距离原则调整不合理的分类,直到分类合理为止。
  
 2.系统聚类:也称层次聚类,首先将参与聚类的个案(或变量)各视为一类,然后根据两个类别之间的聚类或者相似性逐步合并,直到所有个案(或变量)合并为一个大类为止。实际上,系统聚类分析结果展现了每个个案的聚类过程和分类结果。系统聚类之后,要制作交叉表通过每一个类别的均值来了解每一类别的特征。
  
 3.二阶聚类:也称两步聚类,它是随着人工智能的发展起来的一种智能聚类方法。整个聚类方法分为两个步骤,第一个步骤是预聚类,就是根据定义的最大类别数对个案进行初步归类;第二个步骤是正式聚类,就是对第一步得到的初步归类进行再聚类并确定最终聚类结果,并且在这一步中,会根据一定的统计标准确定聚类的类别数。
  
 (1)系统聚类分析不仅支持输入单个分类数量,还支持输入分类数量的范围。这对于暂时无法确定类别数,或者想进行多类别数的结果比较时,非常方便。
  
 (2)系统聚类分析支持生成聚类结果图,从而更加直观地查看聚类过程。系统聚类分析支持两种图形:
  
 谱系图(树状图):它以树状的形式展现个案被分类的过程;
  
 冰柱图:它以“X”的形式显示全部类别或指定类别数的分类过程。
  
 (3)系统聚类分析提供多种聚类方法和适用于不同数据类型的测量方法。
  
 其中,测量方法(度量标准):
  
 (i)区间:适用于连续变量,虽然SPSS提供了8种测量方法,但是通常选用默认的【平方欧式距离】即可。
  
 (ii)计数:适用于连续或分类变量,SPSS提供了2种测量方法,通常选用【卡式测量】即可。
  
 (iii)二元:适用于0/1分类变量,SPSS提供多达27种测量方法,通常选用【平方欧式距离】即可。
  
 通过方法里的转换值项来进行标准化处理。由于参与聚类分析的变量是连续变量,所以,【测量】应选择【区间】项,方法为默认的【平方欧式距离】,标准化可以选择【Z得分】,选择按【变量项】,用以每个变量单独进行标准化。
  
 二阶聚类分析能够对连续变量和分类变量同时进行处理,无需提前指定聚类的数目,二阶聚类会自动分析并输出最优聚类数。二阶聚类的自动聚类结果借由统计指标施瓦兹贝叶斯准则(BIC)帮助判断最佳分类数量。判断一个聚类方案的依据是BIC的数值越小,同时,“BIC变化量”的绝对值和“距离测量比率”数值越大,则说明聚类效果越好。
  
 聚类分析属于探索性数据分析方法,它没有一个所谓的标准流程和答案,不同的数据有不同的适用方法,即使相同的数据,应用不同的方法也可能会得到不同的结果。只要能有效解决实际业务问题即可。

3. 十大互联网数据分析方法之-聚类分析

聚类分析在统计学上是根据“物以类聚”的道理,对样本或指标进行分类的一种多元统计分析方法。这一方法在任何领域应用时,都需要先对事物彼此不同的属性进行辨认,将具有相似属性的事物聚为一类,使得同一类的事物具有高度的相似性。在互联网 用户行为分析 上,大量用户都有相同或相近的行为属性,我们可以通过行为对用户进行聚类,提取行为特征,对不同行为属性的用户针对性精准运营。
                                          
 在 网站分析 和 APP分析 中应用聚类分析时会使得分析过程和分析结果更简单、直观。
  
 简单:分析逻辑内置于系统中,只需点选操作即可实现对用户或页面的聚类
  
 直观:将毫无规律的大量数据变的规律化、类别化、统一化,可直观看出某一群体或某类页面的特征。
  
 聚类分析在互联网领域的主要应用有:用户聚类、页面聚类或内容来源聚类、活跃留存聚类分析。
  
 用户聚类是将有共同用户属性或行为属性特征的用户归为同一群体,主要体现为 用户分群 ,用户标签法。用户分群用户分群可以通过用户属性组合定义不同用户群体,也可以通过用户群体的行为表现反推用户的属性特征。用户分群对推广营销和用户运营最大的意义在于精细化的定位用户群体细分用户需求。推广和运营已经从初期发的模糊运营进化到当前基于用户行为甚至是基于预测模型的用户分群。
  
 用户分群、用户标签法
                                          
 页面聚类则主要是相似/相关页面分组法,例如:在 页面分析 中,经常存在带?参数的页面,比如:资讯详情页面、商品页面等,都属于同一类页面,简单的分析容易造成如跳出率、退出率等指标不准确的问题,通过聚类分析可以获取同类页面的准确数据用于分析场景。
                                          
 来源聚类帮助我们分析访客来源和推广渠道,可根据设置的UTM参数,根据不同渠道、着陆页、媒介、内容、关键词等对受访页面进行聚类分析。
                                          
 传统的活跃分析和留存分析只依据用户浏览网站或打开APP行为分析活跃和留存,更高级的活跃和留存分析可以自定义不同的用户行为聚类分析。
  
 例如我不只关心用户浏览网站的活跃和留存,还想分析网站中新上线的某个功能模块的用户活跃和留存情况,这时可以通过自定义活跃、留存聚类有相应行为的用户进行 用户行为分析 。

十大互联网数据分析方法之-聚类分析

4. 聚类算法解析

我们学习了决策树,随机森林,逻辑回归,他们虽然有着不同的功能,但却都属于"有监督学习”的一部分,即是说,模型在训练的时候,即需要特征矩阵X,也需要真实标签y。机器学习当中,还有相当一部分算法属于“无监督学习”,无监督的算法在训练的时候只需要特征矩阵X,不需要标签。我们曾经学过的PCA降维算法就是无监督学习中的一种,聚类算法,也是无监督学习的代表算法之一。
  
 聚类算法又叫做“无监督分类”,其目的是将数据划分成有意义或有用的组(或簇)。这种划分可以基于我们的业务需求或建模需求来完成,也可以单纯地帮助我们探索数据的自然结构和分布。比如在商业中,如果我们手头有大量的当前和潜在客户的信息,我们可以使用聚类将客户划分为若干组,以便进一步分析和开展营销活动,最有名的客户价值判断模型RFM,就常常和聚类分析共同使用。再比如,聚类可以用于降维和矢量量化(vector
  
 quantization),可以将高维特征压缩到一列当中,常常用于图像,声音,视频等非结构化数据,可以大幅度压缩数据量。
                                          
 在KMeans算法中,簇的个数K是一个超参数,需要我们人为输入来确定。KMeans的核心任务就是根据我们设定好的K,找出K个最优的质心,并将离这些质心最近的数据分别分配到这些质心代表的簇中去。
   那什么情况下,质心的位置会不再变化呢?当我们找到一个质心,在每次迭代中被分配到这个质心上的样本都是一致的,即每次新生成的簇都是一致的,所有的样本点都不会再从一个簇转移到另一个簇,质心就不会变化了。
  
 这个过程在可以由下图来显示,我们规定,将数据分为4簇(K=4),其中白色X代表质心的位置:
                                          
 我们追求“组内差异小,组间差异大”。聚类算法也是同样的目的,我们追求“簇内差异小,簇外差异大”。而这个“差异”,由样本点到其所在簇的质心的距离来衡量。

5. 聚类算法

1. 概述 
  
 K-means聚类算法也称k均值聚类算法,是集简单和经典于一身的基于距离的聚类算法。它采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为类簇是由距离靠近的对象组成的,因此把得到 紧凑且独立的簇作为最终目标。 
  
  2. 算法核心思想 
  
 K-means聚类算法是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
  
  3. 算法实现步骤 
  
 1、首先确定一个k值,即我们希望将数据集经过聚类得到k个集合。
  
 2、从数据集中随机选择k个数据点作为质心。
  
 3、对数据集中每一个点,计算其与每一个质心的距离(如欧式距离),离哪个质心近,就划分到那个质心所属的集合。
  
 4、把所有数据归好集合后,一共有k个集合。然后重新计算每个集合的质心。
  
 5、如果新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),我们可以认为聚类已经达到期望的结果,算法终止。
  
 6、如果新质心和原质心距离变化很大,需要迭代3~5步骤。
  
  4. 算法步骤图解 
                                          
 上图a表达了初始的数据集,假设k=2。在图b中,我们随机选择了两个k类所对应的类别质心,即图中的红色质心和蓝色质心,然后分别求样本中所有点到这两个质心的距离,并标记每个样本的类别为和该样本距离最小的质心的类别,如图c所示,经过计算样本和红色质心和蓝色质心的距离,我们得到了所有样本点的第一轮迭代后的类别。此时我们对我们当前标记为红色和蓝色的点分别求其新的质心,如图d所示,新的红色质心和蓝色质心的位置已经发生了变动。图e和图f重复了我们在图c和图d的过程,即将所有点的类别标记为距离最近的质心的类别并求新的质心。最终我们得到的两个类别如图f。
  
  K-means术语: 
  
 簇:所有数据的点集合,簇中的对象是相似的。
  
 质心:簇中所有点的中心(计算所有点的中心而来)
  
  5. K-means算法优缺点 
  
  优点: 
  
 1、原理比较简单,实现也是很容易,收敛速度快。
  
 2、当结果簇是密集的,而簇与簇之间区别明显时, 它的效果较好。
  
 3、主要需要调参的参数仅仅是簇数k。
  
  缺点: 
  
 1、K值需要预先给定,很多情况下K值的估计是非常困难的。
  
 2、K-Means算法对初始选取的质心点是敏感的,不同的随机种子点得到的聚类结果完全不同 ,对结果影响很大。
  
 3、对噪音和异常点比较的敏感。用来检测异常值。
  
 4、采用迭代方法,可能只能得到局部的最优解,而无法得到全局的最优解。

聚类算法

6. 聚类算法的介绍

聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法,同时也是数据挖掘的一个重要算法。聚类(Cluster)分析是由若干模式(Pattern)组成的,通常,模式是一个度量(Measurement)的向量,或者是多维空间中的一个点。聚类分析以相似性为基础,在一个聚类中的模式之间比不在同一聚类中的模式之间具有更多的相似性。

7. 关于聚类分析

1。聚类分析的特点
 聚类分析(cluster analysis)是根据事物本身的特性研究个体的一种方法,目的在于将相似的事物归类。它的原则是同一类中的个体有较大的相似性,不同类的个体差异性很大。这种方法有三个特征:适用于没有先验知识的分类。如果没有这些事先的经验或一些国际、国内、行业标准,分类便会显得随意和主观。这时只要设定比较完善的分类变量,就可以通过聚类分析法得到较为科学合理的类别;可以处理多个变量决定的分类。例如,要根据消费者购买量的大小进行分类比较容易,但如果在进行数据挖掘时,要求根据消费者的购买量、家庭收入、家庭支出、年龄等多个指标进行分类通常比较复杂,而聚类分析法可以解决这类问题;聚类分析法是一种探索性分析方法,能够分析事物的内在特点和规律,并根据相似性原则对事物进行分组,是数据挖掘中常用的一种技术。 
  这种较成熟的统计学方法如果在市场分析中得到恰当的应用,必将改善市场营销的效果,为企业决策提供有益的参考。其应用的步骤为:将市场分析中的问题转化为聚类分析可以解决的问题,利用相关软件(如SPSS、SAS等)求得结果,由专家解读结果,并转换为实际操作措施,从而提高企业利润,降低企业成本。 
2.应用范围
 聚类分析在客户细分中的应用 
   
  消费同一种类的商品或服务时,不同的客户有不同的消费特点,通过研究这些特点,企业可以制定出不同的营销组合,从而获取最大的消费者剩余,这就是客户细分的主要目的。常用的客户分类方法主要有三类:经验描述法,由决策者根据经验对客户进行类别划分;传统统计法,根据客户属性特征的简单统计来划分客户类别;非传统统计方法,即基于人工智能技术的非数值方法。聚类分析法兼有后两类方法的特点,能够有效完成客户细分的过程。 
  例如,客户的购买动机一般由需要、认知、学习等内因和文化、社会、家庭、小群体、参考群体等外因共同决定。要按购买动机的不同来划分客户时,可以把前述因素作为分析变量,并将所有目标客户每一个分析变量的指标值量化出来,再运用聚类分析法进行分类。在指标值量化时如果遇到一些定性的指标值,可以用一些定性数据定量化的方法加以转化,如模糊评价法等。除此之外,可以将客户满意度水平和重复购买机会大小作为属性进行分类;还可以在区分客户之间差异性的问题上纳入一套新的分类法,将客户的差异性变量划分为五类:产品利益、客户之间的相互作用力、选择障碍、议价能力和收益率,依据这些分析变量聚类得到的归类,可以为企业制定营销决策提供有益参考。 
  以上分析的共同点在于都是依据多个变量进行分类,这正好符合聚类分析法解决问题的特点;不同点在于从不同的角度寻求分析变量,为某一方面的决策提供参考,这正是聚类分析法在客户细分问题中运用范围广的体现。 
   
  聚类分析在实验市场选择中的应用 
   
  实验调查法是市场调查中一种有效的一手资料收集方法,主要用于市场销售实验,即所谓的市场测试。通过小规模的实验性改变,以观察客户对产品或服务的反应,从而分析该改变是否值得在大范围内推广。 
  实验调查法最常用的领域有:市场饱和度测试。市场饱和度反映市场的潜在购买力,是市场营销战略和策略决策的重要参考指标。企业通常通过将消费者购买产品或服务的各种决定因素(如价格等)降到最低限度的方法来测试市场饱和度。或者在出现滞销时,企业投放类似的新产品或服务到特定的市场,以测试市场是否真正达到饱和,是否具有潜在的购买力。前述两种措施由于利益和风险的原因,不可能在企业覆盖的所有市场中实施,只能选择合适的实验市场和对照市场加以测试,得到近似的市场饱和度;产品的价格实验。这种实验往往将新定价的产品投放市场,对顾客的态度和反应进行测试,了解顾客对这种价格的是否接受或接受程度;新产品上市实验。波士顿矩阵研究的企业产品生命周期图表明,企业为了生存和发展往往要不断开发新产品,并使之向明星产品和金牛产品顺利过渡。然而新产品投放市场后的失败率却很高,大致为66%到90%。因而为了降低新产品的失败率,在产品大规模上市前,运用实验调查法对新产品的各方面(外观设计、性能、广告和推广营销组合等)进行实验是非常有必要的。 
  在实验调查方法中,最常用的是前后单组对比实验、对照组对比实验和前后对照组对比实验。这些方法要求科学的选择实验和非实验单位,即随机选择出的实验单位和非实验单位之间必须具备一定的可比性,两类单位的主客观条件应基本相同。 
  通过聚类分析,可将待选的实验市场(商场、居民区、城市等)分成同质的几类小组,在同一组内选择实验单位和非实验单位,这样便保证了这两个单位之间具有了一定的可比性。聚类时,商店的规模、类型、设备状况、所处的地段、管理水平等就是聚类的分析变量。 转

关于聚类分析

8. 什么是聚类分析?聚类算法有哪几种

聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于

分类学,在古老的分类学中,人们主要依靠经验和专业知识来实现分类,很少利用数学工具进行

定量的分类。随着人类科学技术的发展,对分类的要求越来越高,以致有时仅凭经验和专业知识

难以确切地进行分类,于是人们逐渐地把数学工具引用到了分类学中,形成了数值分类学,之后又

将多元分析的技术引入到数值分类学形成了聚类分析。

      聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论

聚类法、聚类预报法等。

    聚类分析计算方法主要有如下几种:分裂法(partitioning methods):层次法(hierarchical

methods):基于密度的方法(density-based methods): 基于网格的方法(grid-based 

methods): 基于模型的方法(model-based methods)。
最新文章
热门文章
推荐阅读