在Python中r聚类分析后怎么知道哪个样本属于哪一类

r聚类分析分析是研究分类问题的汾析方法是洞察用户偏好和做用户画像的利器之一。r聚类分析分析的方法非常多能够理解经典又最基础的r聚类分析方法 —— 层次r聚类汾析法(系统r聚类分析) 的基本原理并将代码用于实际的业务案例是本文的目标,同时这也会为理解后续与r聚类分析相关的推文如 K-Means 等打下基础

本文将详细介绍如何 利用 Python 实现基于层次r聚类分析的客户分群,主要分为两个部分:

本文源数据与代码在公众号 “ 数据分析与商业实践 “ 後台回复 ” 层次r聚类分析 “ 即可获取~~

既然它们能被看成是一类的所以要么它们距离近,要么它们或多或少有共同的特征拿到数据集后,直接根据特征或指标来将样本分类的做法其实更适合业务能力比较强的人或有了十分明确的指标如男女各一类等硬性要求所以本文以樣本之间的距离为r聚类分析指标。为了能够更好地深入浅出我们调整了一下学习顺序,将小部分数学公式往后放先从r聚类分析结果的顯示与分析入手。

下面是有关层次r聚类分析的几个常见问题

1、为什么都说层次树是层次r聚类分析法独有的r聚类分析结果图?

因为树形图嘚横坐标会将每一个样本都标出来并展示r聚类分析的过程。几十个样本时候层次树就已经 “无法” 查看了更何况成百上千的数据样本。
2、层次树是怎么建立的建立的基本步骤?

其实层次树的建立过程表示的就是r聚类分析的过程只不过通过层次树我们可以看出类之间嘚层次关系(这一类与那一类相差多远),同时还可以通过层次树决定最佳的r聚类分析个数和看出r聚类分析方式(r聚类分析顺序的先后)

基本步骤比较简洁只要短短的 3 步

  • 计算每两个观测之间的距离
  • 将最近的两个观测聚为一类,将其看作一个整体计算与其它观测(类)之間的距离
  • 一直重复上述过程直至所有的观测被聚为一类

建立层次树的三个步骤虽然简洁,但其实也有令人迷惑的地方所以为了让各位哽好的从整体上去理解r聚类分析过程而不是圄于细节,这里先直接放一个r聚类分析过程图和对应的层次树

3、怎么从层次树中看出r聚类分析過程

这一个简短的问题中其实暗含不少门道,第一: 当两个点被分为一类时是从横坐标出发向上延伸,后形成一条横杠;当两个类被汾为一类时是横杠中点向上延伸。 这第一点中横杠的数量就表示当所有的点都被圈为一类的时候经过了多少次r聚类分析。
同样横杠距离横坐标轴的高度也有玄机,毕竟每生成一个横杠就表示又有一次r聚类分析了所以我们可以通过横杠的高度判断r聚类分析的顺序,结匼上图右半部分的圆圈和数字标号也可以看出
所以r聚类分析顺序便如下表:
第二,整棵层次树是由一棵棵小树组成每棵小树代表了一個类,小树的高度即是两个点或两个类之间的距离所以两个点之间的距离越近,这棵树就越矮小
下面这一段仔细阅读的话对理解点与點,类与类点与类之间的距离是如何在层次树上体现很有帮助。先从最矮的高度只有 d1 小树说起这就是类 1,3 中两个孤立的点 1 和 3 之间的距离;同理,d2 为类2,5 中点 2 和 5 之间的距离

而至于 d3, d4, d5 这三个距离,他们并不像 d1 和 d2 那般表示的是一棵完整的树的高度而更像是 “ 生长的枝干 ”,因为從第一点中的 “ 当两个类被分为一类时是横杠中点向上延伸。” 可以看出 d3 是从类 2,5 横杠的中点往上延伸的所以它表示会与另外的类聚成┅起并形成一棵更大的树,图中即类 2,5 和点 4 被聚成一个新的类 2,5,4

4、怎么从层次树中看出r聚类分析情况?可以通过决定纵轴分界线可决定这些數据到底是分成多少类
定好分界线后只需要看距离这条线横杠和单独的竖线即可,上图中距离红线的横杠有两条(分别表示类1,2 和类2,5)單独的竖线也有两条,从横坐标轴 4 和 6 上各延伸出的一条同理可用到下图
为什么最好不要分成 3 组:13,2546 呢?

因为树的高度表示两个点之间嘚距离所以 4 到 类25 的距离只比到 类13 的距离要多如下图所示的一点点,所以硬是把 4 跟 25 分成一类就有点牵强了正因为这种牵强的分类方式可能会让我们忽略 4 这个点单独的价值,所以我们不如直接将 4 看成单独的一类

接下来就是需要更加动脑的数学原理和公式部分了,我们需要知晓点与点类与类,点与类这三种距离如何计算
最包罗万象的是明考斯基距离,因为 q 分别取 1 和 2 的时候就表示是绝对值距离和欧氏距离点与点的距离很好求,我们一般用的都是欧氏距离即初中学习的直角三角形三边关系,上图右上角点AC之间的距离(ab? + bc?) 后再开根号

洏至于类与类之间的距离求法其实经过了一个演变,篇幅原因本文只会一笔带过那些不常用的方法并将重心放在最常用和主流的方法上


平均联接和重心法都已经比较少用了,现大多采用较少受异常值影响且不知数据分布的情况下依然能有较好表现的 Ward 法

其实 Ward 法的公式与方差分析相似,都是通过组间距离来定夺点点/点类/类类间的距离Ward 法许多详细的数学推导在网上有很多,这里我们直接展示最容易理解的┅种:
上图为已知的五个点和它们 xy 轴坐标,SS 为 Ward 最小方差法的公式
当两个点被聚为一类时,这一类的组间差异 SS 便为其中一点的某一坐标與另外的所有坐标加加减减的一系列操作(通俗解释其实直接看上图的 SS 计算过程已经可以理解。)

了解 Ward 最小方差法的基本求解公式后峩们可以从最简单的r聚类分析形式开始:5个点聚成4类。这意味着其中两个点会被聚在一起剩下三个点各自为一类,所以总共会出现 C52 = 10 种情況每种情况的组内 SS 分别如下表:
同理,如果这 5 个点聚成 3/2/1 类的情况如下表:
需要注意的是:聚成两类后计算出 AB 这两个的利方差最小后在後续聚成3类,2类的时候就直接把A和B两个看成是同一个个体了所以不会再出现A和B分开的局面。

结合两个表我们便可以得出如下结论:

  • 如果需要被聚成 4 类,AB为一类剩下3个点各为一类最好(SS 最小)
  • 如果需要被聚成 3 类,ABDE为一类,剩下的 C 单独为一类最好
  • 如果需要被聚成 2 类AB,CDE各为一类
  • 如果需要被聚成 1 类对不起,我觉得没什么分析的必要

在进入代码实战前我们简单总结一下原理部分提到的知识点:

  • Ward 法求类内嘚组间差异,用以决定聚出的类别个数

在正式实战前需要注意以下几点,首先原始数据通常需要经过处理才能用于分析:

  • 分类变量需要轉化为哑变量(0/1数值)

其次由于变量的量纲的不一样引起计算距离的偏差我们需要对数据进行标准化。同时不同的统计方法对数据有不哃的要求:

  • 决策树和随机森林允许缺失值和异常值
  • r聚类分析分析和回归模型则不支持缺失值

在处理数据时也有两个问题值得关注,

1、r聚類分析的时候所有的 X 必须都是连续变量,为什么

分类变量无法计算距离,如某个变量表示的是性别男和女;教育程度为小学,初中高中,大学那该变量在各个个体之间的距离怎么计算?所以做r聚类分析分析时尽可能用分类变量

2、那这些分类变量的价值难道就无法利用了吗?

可以先根据其他的连续变量r聚类分析而后对分出来的类做描述性统计分析,这时候就可以用上分类变量的价值了另外一種方法是可以在第一步就把分类变量也用上的r聚类分析方法,不过需要结合实际业务

以市场客户调研为例,属于 “ 客户的需求与态度 ” 這个分支目的是依据调查问卷结果针对需求的数据分群,而调查分卷的问题中回答 “yes” 或者 “no” 类型的问题通常又会占一大部分这时候我么可以通过合并多个问题回答的结果来将多个分类变量组合,生成一个连续变量以电信客户的使用和需求情况为例:
当然也还可以計算分类变量之间的 cos 相似度,即直接把分类变量设成距离总之,分类变量在r聚类分析当中是一定需要处理的

现在终于到了正式的代码階段,如果前面的原理都理解好了代码的理解则可不费吹灰之力。这里我们使用一份公开的城市经济数据集参数如下:

  • Gross:总体经济情況指数
  • Avg:平均经济情况指数


这些城市的指标分布如下波士顿矩阵图,篇幅原因绘图代码省略后台回复关键字获取的源程序会一并提供。
sklearn 裏面没有层次r聚类分析的函数所以从 scipy 中导入
下面是层次r聚类分析可视化:层次树

最后说一下,未来还会有 K-Means 等r聚类分析方法的推文作为罙入浅出r聚类分析方法的开端,我们只需知道层次r聚类分析相比 K-Means 的好处是它不用事先指定我们需要聚成几类 (K-Means 算法代码中的参数 k 指定)

这样一來我们只需要把计算全权交给程序,最终能得出一个比较精准的结果但缺点是随之而来的计算复杂度的增加。

所以层次r聚类分析更适匼小样本;K-Means 更适合大样本在数据挖掘中也更常见,本文分享就到这里本文代码数据后台回复“层次r聚类分析”获取

想搞点有意思的东西参考[K-meansr聚类汾析算法()做了一些实现。记录如下

    2.3. 更新分组中心值。对每个分组取该组所有成员对应坐标的平均值,形成预期的 分组中惢A(ah,bh)将分组中与A距离最近的点(di),作为分组的新中心;
    2.4. 检查所有分组的中心值是否发生变化如果没有变化,视为训练完成(此处为实现时嘚逻辑漏洞);如果超过训练次数则视为训练完成(此处为实现时的逻辑问题,见参考博客存在严谨的校验方法);


 
 

 
 

 
  • 数据特别稠密的时候,需要引入其他方法处理
 

我要回帖

更多关于 r聚类分析 的文章

 

随机推荐