Data Science with R in 4 Weeks - Week 2 - Day5

Kmean continued

Kmean 是一种简单又常用的方法,我们再介绍几个例子以及几个关键问题

1. 如何决定应该有多少个cluster?

Kmean的方法要求在尽心分析之前必须先决定有多少个cluster。可以采用三种方法

(1)根据经验,从1个cluster 到n个 cluster 进行试验

(2)elbow plot来决定多少个cluster比较合适

(3)采用NbClust 来决定有少个cluster

推荐用(2)的方法,然后根据经验,并采用(3)来进行验证。再次强调,经验——也就是对你的业务的理解——非常重要。You should know your product in and out!

例子:rattle package里面有一个wine的data,我们用这个作为例子

install.packages("rattle")

data(wine, package = "rattle")

head(wine)

wine.stand<-scale(wine[-1])# To standarize the variables

应该有多少个cluster 合适呢?

Elbow plot的基本思想是:

. If we looks at the percentage of variance explained as a function of the number of clusters: One should choose a number of clusters so that adding another cluster doesn’t give much better modeling of the data. More precisely, if one plots the percentage of variance explained by the clusters against the number of clusters, the first clusters will add much information (explain a lot of variance), but at some point the marginal gain will drop, giving an angle in the graph. The number of clusters is chosen at this point, hence the “elbow criterion”.

> wssplot(wine.stand, nc=10)

这是10个cluster的情况。可以把纵轴看成是误差,每增加一个cluster,误差减少。直到发现再增加一个cluster的时候,这种误差的减少带来的效应不够明显,那个cluster就是截止点。例如,从一个cluste柔道2个cluster的时候,误差有大幅度降低,增加到3个,继续降低,从3到4的效果,就比从2到3的效果差很多了;从4到5,效果更不明显。

所以,3或4个cluster的方案比较好。

NbClust 提供了一个根据不同标准来决定cluster个数的方案。这个package可以用来验证上面的elbow plot

library("NbClust")

set.seed(1234)

nc <- NbClust(wine.sand, min.nc=2, max.nc=15, method ="kmeans")


所以,我们可以选择 3个cluster的方案。

k.means.fit <- kmeans(wine.stand, 3)


2. 每个cluster的实际意义是什么?或者说,我们怎么解读每个cluster

数学上,这些分组都是根据一定的规则形成的;那么,现实中,我们怎么解释这些分组的意义?把不同的wine分成了多个cluster,每个cluster区别于其他cluster的意义在哪里?

可以先看cluster mean: negative values mean "lower than most" and positive values mean "higher than most"

cluster 1是酒精(alcohol)含量明显高于其他组的一个分组;cluster2是明显低于其他组的一个分组,cluster 3介于之间。

这里也能看到对于业务的理解的重要性。如果你不懂红酒,尽管你能做cluster analysis,但是你没办法解读数据,没办法从数据转换到insights!

我们看一个更生活化的例子:

> url = 'http://www.biz.uiowa.edu/faculty/jledolter/DataMining/protein.csv'

> food <- read.csv(url)

> head(food)

这个各个国家队肉、蛋、牛奶,谷物等蛋白的摄入量。

我们先只对 红肉和白肉的摄入进行聚类:

> set.seed(123456789)

> grpmeat <- food[, c("WhiteMeat", "RedMeat")]


> grpmeat.stand <- scale(grpmeat)

> wssplot <- function(data, nc=15, seed=1234){

+    wss <- (nrow(data)-1)*sum(apply(data,2,var))

+    for (i in 2:nc){

+        set.seed(seed)

+        wss[i] <- sum(kmeans(data, centers=i)$withinss)}

+    plot(1:nc, wss, type="b", xlab="Number of Clusters",

+          ylab="Within groups sum of squares")}

> wssplot(grpmeat.stand, nc=7)

看起来 3~4个cluster比较合适。

我们再验证一下:

nc <- NbClust(grpmeat.stand, min.nc=2, max.nc=15, method ="kmeans")


我们选择 3个cluster作为 kmean 的方案



> plot(food$Red, food$White, type="n", xlim=c(3,19), xlab="Red Meat", ylab="White Meat")

> text(x=food$Red, y=food$White, labels=food$Country,col=meatcluster$cluster+1)


蛋白摄入以红肉为主的是法国,英国;以白肉为主的是德国,波兰等;瑞典、意大利,希腊等国家属于第三组,他们的摄入较为均匀。

列出每个cluster里面的成员

> o <- order(meatcluster$cluster)

> x <- data.frame(food$Country[o], meatcluster$cluster[o])

> head(x)



3.  如果每个cluster是按照多个维度来划分的,该怎么解读和可视化?

上面的例子因为只有两个维度——redmeat,whitemeat——所以解读起来比较容易,可视化容易,只要在2维图表上表示就可以了。但如果维度增加,该怎么解读cluster的结果,该怎么可视化呢?

这一次,我们把所有蛋白质摄入的渠道都作为一个维度,

> url = 'http://www.biz.uiowa.edu/faculty/jledolter/DataMining/protein.csv'

> food <- read.csv(url)

> head(food)

> set.seed(123456789)

> grpmeat<- food[, -1]

> head(grpmeat)

> grpmeat.stand <- scale(grpmeat)

> wssplot <- function(data, nc=15, seed=1234){

+    wss <- (nrow(data)-1)*sum(apply(data,2,var))

+    for (i in 2:nc){

+        set.seed(seed)

+        wss[i] <- sum(kmeans(data, centers=i)$withinss)}

+    plot(1:nc, wss, type="b", xlab="Number of Clusters",

+          ylab="Within groups sum of squares")}

> wssplot(grpmeat.stand, nc=12)

从elbow plot可以看出来,7个cluster是较为理想的方案。

在次验证一下

出现问题了,NbClust推荐的是2个cluster。根据elbow plot,我们还是建议7个cluster的方案。

kmean的结果如下:

The nstart argument tells kmeans to try that many random starts and keep the best.With 20 or 25 random starts, you’ll generally find the overall best solution unless your sample size is really big.

一共9个维度,几乎很难直观的解释为什么一些点会被分到一个cluster里面。2维图表也没办法展示不同的分组,所以,我们需要降维技术——将一些维度合并,然后将9个维度降低到5个,4个,3个,2个等。


最后再看一个实例。福特为了在欧洲销售汽车,决定研发一款新型的汽车。他对们消费者进行了调研,通过调研发现,消费者最在意的是5个指标——emotion,idealist,realism,freedom,reliability。

然后,福特让消费者这5个指标进行重要性打分,分值越高,说明他们在某一个属性上的需求就越强烈。dataset如下图,一共有250个有效用户的数据。

首先我们判断一下可能有多少个cluster。elbow 图很有意思,3,4 个cluster的方案没有太多区别,5个cluster之后的方案也没有太多区别。所以,有可能的cluster的方案可能是3,4,或者5个。需要对每一种方案进行分析,最后决定合适的cluster方案。

3 cluster的方案

cluster 1注重idealism和freedom,cluster 2注重emotion,cluster 3 注重 realism


4个cluster的方案

cluster1: idealism

cluster2:realism

cluster 3: emotion

cluster 4: freedom

5个cluster的方案

cluster1: emotion

cluster2:emotion with freedom

cluster 3: idealism

cluster 4: ideamlism and freedom

cluster 5:realism


到底多少个cluster合适?这是个judgement call。不仅要存在分组,而且分组要有意义。我认为4个cluster较好。


Reference

https://rstudio-pubs-static.s3.amazonaws.com/33876_1d7794d9a86647ca90c4f182df93f0e8.html

http://beyondvalence.blogspot.com/2013/12/cluster-analysis-choosing-optimal.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容