楼主: 董Tina
10486 10

[学习分享] SAS快速聚类分析fastcluster [推广有奖]

  • 2关注
  • 2粉丝

高中生

30%

还不是VIP/贵宾

-

威望
0
论坛币
58 个
通用积分
0.0001
学术水平
11 点
热心指数
11 点
信用等级
3 点
经验
209 点
帖子
8
精华
0
在线时间
31 小时
注册时间
2016-3-31
最后登录
2017-1-1

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
    最近在研究SAS做聚类分析的操作,同时也补充了一些相关的理论知识。聚类与分类不一样,聚类是无监督,分类是有监督的,因此在聚类结果之前,你并不知道,你的样本或者指标将被分为几类。    所谓聚类,就是基于“物以类聚,人以群分”的朴素思想,根据样本的特征的相似程度,把相似的的样本归为一类,怎么度量样本间的相似度呢。一般我们将会把变量间的相似度或者说距离分为两类。一类是用来度量相似度的指标,有相关系数和余弦系数。距离就有很多方法,比如欧氏距离和欧式平方距离是比较常用的两种方法。在SPSS里你可以很清楚看到其他几种距离,此处不再赘述。距离越近或者说相似度越高,我们就把他归成一类。相似度我们一般用来对变量进行聚类,起到降低维度的作用。距离是用来做样本或者说事件的聚类。
    下面说一下在SAS里具体怎么样实现整个聚类分析。
    1,首先,你需要将你要用的数据读入SAS,不管数据库访问、外部数据文件读入。
    2,如果本地SAS,为了保证云进行速度和运行效率,我建议采取随机抽样。
       语法:其中method可以指定不同的抽样方法,此处为srs(simple random sampling),简单随机抽样。
proc surveyselect data=sashelp.prdsale n=100 method=srs out=quan;

run。

3,接下来可以对你的数据集,做一个描述性的统计分析,大体上了解,数据的分布,离散程度,变异系数等等。下面提到的有观测个数、均值、方差、极差、最小值、最大值、变异系数、峰度。

    语法:

proc means data=test n mean std range min max cv skew.;

var ;

run;

   4,接下来就是整个流程中比较重要的部分了,我们需要检验我们所选样本的变量间是否存在较强的相关性,说明变量间的信息有重叠,需要采取降维处理。如果你的数据变量间的相似系数,普遍在0.3以下,不建议采取降维处理,如果普遍在0.6-0.8,甚至更高的话,就需要采取降处理了。

    语法:

PROC CORR < options > ;

BY variables ;               根据by语句后面跟的变量进行分组计算相关系数FREQ variable ;           所指定的变量为观测出现的频数
PARTIAL variables ;     指定求偏相关的偏变量名
VAR variables ;            指定进行相关系数分析的变量
WEIGHT variable ;       所指定的变量为相应观测的权数
WITH variables ;          与var语句配对使用,var语句列出相关矩阵上部出现的变量,with语句列出左侧出现的语句
    5,关于降维的处理,SAS里提供了3中解决方法,分别是因子分析法、主成分法、变量聚类也就是varclust过程。因子分析法与主成分法类似,但也有很大区别,在这里就不多说了。对于因子分析我多说一点,当你得到因子分析的结果之后,观察每个变量在第一个公因子上的负荷,如果大多数都是0.9几的话,说明能够完全包含元变量所拥有的信息,如果在每个变量上都0.2-0.6几之间,说明并不能更好的来解释因子的特征,从而需要进行因子旋转,最终得到更易解释的公因子。最好的结果就是一个公因子能集中反正几个变量的共同度,比如两个变量是0.9几,剩下的都是0.0几,说明效果就很好啦,可以继续用因子旋转之后的数据集做聚类分析了。
   语法:
   因子分析

PROC FACTOR DATA=数据集  选项;

        VAR 原始变量;

RUN;

主成分分析:

proc princomp

           data = Practice.PCA_Demo

           out = Work.PCA_Demo_out

           prefix = comp

           outstat = Work.PCA_Demo_stat;

             var var1 var2 var3 var4;

run ;

变量聚类:

PROC VARCLUS DATA=cluster2 CENTROID MAXC=3;

VAR x1-x8;
RUN;


   6.突然想起来一点,4、5之间还差一步非常关键的步骤,就是数据的标准化,为了消除量纲的影响,我们一般将变量标准化为均值为0,方差为1的矩阵。在进行降维的操作。好啦,这一步很重要,希望加强记忆啦。

   7,好啦,终于来到我们要做聚类啦。因为是无监督学习,所以你并不知道你要分成几类,但是在K-MEANS算法中却要你规定类的个数是不是很矛盾呢,其实不是,这个类别数,是你根据业务和经验反复尝试,最终确定你要粉的类别数,一般聚类都是用来做市场细分多一些,因此是属于数据驱动型的分析.聚类结果类间差距越大,类内差距越小,效果你就越好。通过观察聚类结果的类间距离可以得到此结论。

语法:

proc fastcluster data=test maxc=6 maxiter=10 list;

var jan feb dec;

id yesr.

run;

var 是用于聚类的指标也就是变量,ID是我们要分类的样本标签。maxc是根据经验和业务来确定一个最大分类数目。当然这个数字可以反复测试,一般是3-7类不等,maxiter最大迭代次数。

常用选项及语句说明:

data= 指定聚类过程的输入数据集,该数据集必须是观测样本(坐标数据)。

maxclusters=k 指定所允许的最大分类个数(最大凝聚点个数),缺省时假定为100。
radius=r 指定选取新凝聚点的最小距离准则,缺省是假定为0。

初始凝聚点系统顺序选取时,总是将第一个完整的观测选取为第一个凝聚点,再顺序选取需满足下面2个条件的完整观测为接下来的凝聚点:

1.凝聚点的个数未达到“maxclusters=”指定值;
2.与所有已有凝聚点间的距离均大于“radius=”指定值

直到不满足条件是为止。

replace=full|part|none|random 控制初始凝聚点选取的替换检验。

上述初始凝聚点系统顺序选取中:
若满足条件1而不满足条件2时,停止凝聚点的选取。
若满足条件2而不满足条件1时,对已选凝聚点进行替换检验。2种方式:

替换检验1:若当前观测(记obs)与自身最近的已选凝聚点之间的距离d大于已选凝聚点间相互的最小距离d_min(d_i,d_j)时,用当前观测替换已选凝聚点间距离最近的两个凝聚点中的一个,使得替换后当前观测与另一个凝聚点距离最远。
替换检验2:在不满足替换检验1的情况下,若obs到除最近凝聚点外的所有其他凝聚点的最小距离大于最近凝聚点到所有其他凝聚点的最小距离,则用obs替换与之距离最近的凝聚点。

“full”为缺省值,指定两种检验都进行;“part”指定进行第一种检验;“none”指定不进行检验

replace= random 指定初始凝聚点为系统随机选取。

常与选项random=n一起使用,n为正整数,为生成伪随机数提供种子值,缺省时由计算机时间提供。

seed= 指定一个数据集,在其中选取初始凝聚点,即为指定初始凝聚点法。

没有此选项时,将从“data=”指定的数据集中选取k个观测作为k类得初始凝聚点。

drift 指定逐个初始分类,并要求执行逐个修改法,缺省时执行按批修改法。

按批修改法准则是使所有的样品点与其凝聚点距离最近,等全部药品调整完毕后才改变类得凝聚点。逐个修改法是每个样品一旦调整后立即改变凝聚点,其又称为“K-means”,即K均值聚类。

maxiter= 指定修改法的最大迭代次数,缺省时为1,即样本初始分类。

converge=c 指定聚类迭代收敛的判别准则,当凝聚点改变的最大距离小于或等于初始凝聚点间的最小距离乘以c时,认为该聚类过程收敛,迭代结束,缺省时c为0.02。

out= 指定过程输出的数据集。

8.最后是数据结果的呈现,因为聚类的变量是标准化后的,所有需要把元变量贴回带有分类结果的数据集,然后做描述性统计分析,做一个比较均值的过程,还是运用proc means过程,by cluster ,var是你想要看的变量,都例举出来即可。可以通过观察每一类的均值来比较类间的差异。进而进行定制的营销策略。

9.最后汇总生成可视化的ppt文档即可,生成报告的设计时,可以利用SAS的ODS过程,设计字体和颜色。


   



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Cluster 快速聚类分析 快速聚类 聚类分析 fast SAS FASTCLUSTER 快速聚类的学习分享

已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
statax + 12 + 3 + 3 鼓励积极发帖讨论
我的素质低 + 100 + 20 + 5 + 5 精彩帖子
crystal8832 + 30 + 2 + 2 + 2 精彩帖子

总评分: 经验 + 100  论坛币 + 62  学术水平 + 10  热心指数 + 10  信用等级 + 2   查看全部评分

沙发
diloncai 发表于 2016-7-2 04:57:38 来自手机 |只看作者 |坛友微信交流群
不错的文章!

使用道具

藤椅
wjjsx19860625 发表于 2016-7-2 06:41:52 来自手机 |只看作者 |坛友微信交流群
很详细,谢谢分享

使用道具

板凳
一已以意 发表于 2016-7-2 10:39:42 来自手机 |只看作者 |坛友微信交流群
董Tina 发表于 2016-6-30 23:36
最近在研究SAS做聚类分析的操作,同时也补充了一些相关的理论知识。聚类与分类不一样,聚类是无监督,分 ...
谢谢分享

使用道具

报纸
ξ绿茶ξ 发表于 2018-8-9 15:30:21 |只看作者 |坛友微信交流群
谢谢分享!非常有帮助!
我在实际运用的过程中碰到一个问题,想问下大家能不能帮忙解答一下:
当整个聚类完成后(比方说聚合成了6个互相独立度很高的segments),觉得这种人群细分很有帮助,之后想要沿用完全一样的聚合方法来做business tracking该怎么做呢?如何保证以后也是能分出同样的6组呢?
谢谢!

使用道具

地板
whymath 发表于 2018-8-9 21:57:43 |只看作者 |坛友微信交流群
ξ绿茶ξ 发表于 2018-8-9 15:30
谢谢分享!非常有帮助!
我在实际运用的过程中碰到一个问题,想问下大家能不能帮忙解答一下:
当整个聚类 ...
proc cluster 只有最大聚类数目的控制参数
要固定聚类数目,需使用proc cluster

使用道具

7
ξ绿茶ξ 发表于 2018-8-13 21:00:52 |只看作者 |坛友微信交流群
whymath 发表于 2018-8-9 21:57
proc cluster 只有最大聚类数目的控制参数
要固定聚类数目,需使用proc cluster
谢谢!
可能我没有表达的很清楚,其实我想问的是,假设我的proc fastclus分出了6个组。我该怎么做才能在下一次在对另外一组数据进行分类的时候,同样使分出来的6个组的特性与之前的6组完全相同?
比方说,我对2016年的客人进行了一次聚类,分出了6类人;在2017年时想对2017年的客人也进行和之前的分类一样的分类,来追踪两年对比每种类型的客人的增长和降低,这种情况下该怎么做?谢谢!!

使用道具

8
whymath 发表于 2018-8-13 23:22:39 |只看作者 |坛友微信交流群
ξ绿茶ξ 发表于 2018-8-13 21:00
谢谢!
可能我没有表达的很清楚,其实我想问的是,假设我的proc fastclus分出了6个组。我该怎么做才能在 ...
你想把这个聚类的规则导出来应用到新的样本上。

这是判别分析,并非聚类。

使用道具

9
ξ绿茶ξ 发表于 2018-8-14 18:39:11 |只看作者 |坛友微信交流群
whymath 发表于 2018-8-13 23:22
你想把这个聚类的规则导出来应用到新的样本上。

这是判别分析,并非聚类。
啊!非常感谢:)!!

使用道具

10
yuyuyuy 发表于 2018-9-1 16:09:30 |只看作者 |坛友微信交流群
非常棒的帖子,感谢

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 10:44