下面说一下在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过程,设计字体和颜色。