【R语言 第2篇】K-means聚类分析流程
2016-08-01 本文已影响3941人
晟文刀
聚类算法是没用因变量的。
聚类算法有层次聚类、基于划分的聚类、两步聚类法、基于密度的聚类。
聚类方法的逻辑
客户细分是将全体客户划分为多个分组并刻画特征的过程,使得组内客户高度相似,组间客户差异明显。
基本逻辑:
步骤1:从N个观测和K各属性数据开始;
步骤2:计算N各观测两者之间的距离;
步骤3:将相离最近的观测聚为一类,距离远的分为不同类。最终达到组间的距离最大化,组间的距离最大化。
特别注意:
聚类分析前要对数据进行标准化(scale),然后做主成分分析(降维)。
K-means聚类示例
- 得知当前文件位置
getwd()
- 更改文件位置
setwd("E:/R/……") - 这里使用河流化学成份对有害藻类影响的数据集
- 数据属性说明:
- season 季节
- size 河流大小
- speed 河流速度
- mxPH 最大PH值
- mnO2 最小含氧量
- Cl 平均氯化物含量
- NO3 平均硝酸盐含量
- NH4 平均氨含量
- oPO4 平均正磷酸盐含量
- PO4 平均磷酸盐含量
- Chla 平均叶绿素含量
- algae 有害藻的频率数目
- 读入数据
vdata=read.csv("algpre.csv") - 加载包,查看数据缺失情况
library(ggplot2)
library(dfexplore)
dfplot(vdata)
summary(vdata) - 层次聚类、基于划分聚类(Kmeans)、基于密度聚类都只可以用于连续变量,
- 使用mxPH,mnO2,Cl,NO3,NH4,oPO4,PO4,Chla这些属性进行聚类。
Vdata2<-vdata[,c("mxPH","mnO2","Cl","NO3","NH4","oPO4","PO4","Chla")] - 进行kmeans聚类前,需要进行标准化处理,这里使用scale函数进行标准化
data1=scale(Vdata2) - 加载fpc包,使用pamk函数,确定聚类个数
library(fpc)
pamk.result=pamk(data1)
pamk.result$nc - 使用stats包中的kmeans函数,iter.max最大迭代次数,可写可不写,但是数据量很大的时候,一定要写防止死机。
kmd=kmeans(data1,centers = pamk.result$nc,iter.max = 100) - 输出聚类结果
type=kmd$cluster - 查看聚类结果分布
table(type) - 聚类中心结果输出
centerver=kmd$centers
centerver - 将聚类中心结果写入本地excel中,用excel雷达图来描述聚类因子特征,找出每类的优势特征和劣势特征。
write.csv(centerver,'E:/R/……/centerver.csv') - 把聚类结果添加到原始数据中
data2<-cbind(vdata,type=kmd$cluster)
下篇将补上“主成分分析和因子分析”的实际操作。