R教材10 聚类分析

  1. 营销研究人员根据消费者的人口统计特征和购买行为的相似性制定客户细分战略
  2. 聚类的一般步骤:
    1. 选择对聚类结果有效的数据
    2. 对每个变量标准化:z分数scale(),分位数或(x-μ)/平均绝对偏差;变量间数值差距较大时必须标准化
    3. 寻找异常点并去除(或研究):
      1. outliers包中有筛选单变量离群点的函数
      2. mvoutlier包中有筛选多元变量离群点的函数
    4. 计算距离?dist,默认用欧式距离
    5. 选择聚类算法
      1. 层次聚类适合小样本(n<150)
      2. 划分聚类适合大量的数据,但要事先确定聚类的个数
    6. 确定聚类方法
    7. 确定类的数目NbClust()
    8. 获取最终聚类方案
    9. 结果可视化
    10. 解读类:类中的相似和类间的不同
    11. 验证聚类:结果具有实际意义
  3. 计算距离
    1. dist(x,method = )计算矩阵matrix或数据框data.frame所有行之间的距离
      1. as.matrix(d)[1:x,1:x]将距离结果用矩阵表示
      2. 适用连续型数据
    2. 存在分类数据时,cluster::daisy()获得相异矩阵
  4. 常见的聚类算法有:
    1. 用到的包:cluster,NbClust,flexclust,fMultivar,ggplot2,rattle
    2. 层次聚类
      1. 将每个行当做一个类
      2. 计算每个类两两之间的距离
      3. 将最短的两类合为一类
      4. 重复2和3步骤直到只剩一个类
    3. 划分聚类
      1. k均值:适合大数据集,但是所有变量要求是连续的,并且较敏感,在非凸聚类的情况下会变差;这种处理导致观测值到结果的聚类中心的平方的总和为最小
        1. 选择k个中心点,随机选择k行
        2. 将每个数据点分配到最近的中心点
        3. 重新计算每类的中心点
        4. 分配每个数据到其最近的中心点
        5. 重复直到聚类不再变化或最大迭代次数(10次)
    4. 两类之间的距离定义
      1. 单联动,单链single:簇的邻近度为不同簇的两个最近的点之间的邻近度;发现链条式的类
      2. 全联动,全链complete:簇的邻近度为不同簇的两个最远的点之间的邻近度;发现大致相等的直径紧凑类,对异常值敏感
      3. 平均联动,组平均average:簇间的所有点对的组合的邻近度的平均;链式方法的折中
      4. 质心法centroid:计算簇的质心之间的距离来计算簇的邻近度(合并的两个簇可能比前一步合并的簇对更相似,而其他方法被合并簇之间的距离随层次聚类进展单调增加);质心即变量均值向量;较稳健,但是上下两种方法表现得好
      5. Ward法ward:簇的邻近度的定义为两个簇合并时导致的平方误差的增量(最小);倾向将少量观测值的类聚合在一起,异常值敏感
  5. R中的层次聚类方法实现:
    1. 层次聚类hclust(d,method = ),d是距离矩阵
    2. NbClust(matrix/data.frame,method=,distance=,min.nc,max.nc)返回聚类指数,显示聚类个数的投票,从而输出建议聚类的最佳数目
    3. cutree(fit,k=)将树状图分为k类
      1. table(cutree)查看分类后的对象个数
    4. aggregate(data.frame,by=list(cluster=cutree),median),数据框分类依据cutree分类后获取每类的中位数(找到中心)
    5. rect.hclust(fit,k=)作图后叠加分类后的图像
  6. R中的划分聚类方法实现:
    1. 随机种子set.seed(1234)
    2. k均值聚类:kmeans(matrix/data.frame,centers)
      1. 均值的使用说明所有的变量必须是连续的,并且会受到异常值的影响,在非凸聚类中表现很差
      2. 数据标准化scale(dataframe)
      3. 计算类个数NbCluster::NbCluster(dataframe,min.nc,max.nc,method),method方法根据当前的聚类方法的选择计算可用的类个数
        1. table(nc$Best.n[1,])查看具体投票情况
      4. kmeans(dataframe,k,nstart),nstart初始聚类中心选择次数,一般为20
      5. aggregate(原数据,by=list(cluster=fit$cluster),mean),统计原数据的中心点
    3. 围绕中心点的划分:pam(dataframe,k,metric="euclidean",stand=T)
      1. stand即是否标准化
      2. clusplot(fit)结果的图像可用因子分析发现实际的变量对象
  7. 聚类检验:避免不存在的类
    1. 立方聚类规则CCC发现不存在的结构,当CCC值为负且随着类数的增加而递减时,说明是单调变差的,这和聚类的定义相悖
      1. plot(NbCluster$All.index[,4],type="o")CCC曲线
  8. 拓展
    1. https://cran.r-project.org/web/views/Cluster.html
    2. https://www-users.cs.umn.edu/~kumar001/dmbook/index.php数据挖掘算法,英文原版最新

猜你喜欢

转载自blog.csdn.net/u013103305/article/details/83479137