K-means聚类分析案例(二)

之前的笔记:
聚类介绍:点这里
层次聚类分析案例(一):世界银行样本数据集
层次聚类分析案例(二):亚马逊雨林烧毁情况
层次聚类分析案例(三):基因聚类
K-means聚类分析案例(一)

K-means聚类案例(二)食品

我们所吃的食物中的营养成分可以根据它们在构建身体构成的作用来分类。这些营养元素可分为宏量营养元素和微量元素。一些宏量营养元素包括碳水化合物、蛋白质、脂肪,一些微量元素的例子是维生素、矿物质和水。

准备工作

让我们从准备数据开始。

第1步:收集和描述数据

为了应用k均值聚类,我们使用采自不同食物种类的数据集进行实验,其中包含了每种食物各自的能量(Energy)、蛋白质(Protein)、脂肪(Fat)、钙(Calcium)、铁(Iron)等含量。数据获取

其中数值型变量如下:
Energy
Protein
Fat
Calcium
Iron
非数值型变量如下:
Food

具体实施步骤
以下为实现细节。

第2步:探索数据

载入cluster()库。

library(cluster)

探索数据并理解数据变量间的关系。从导入名为foodstuffs.txt的文本文件开始,将其保存在food.energycontent数据框中。

food.energycontent <- read.table("ClusteringAnalysis/Practical-Machine-Learning-Cookbook/Chapter03/Data/foodstuffs.txt",header = T)

head()函数返回向量、矩阵、表、数据框或函数的首尾部分。将food.energycontent数据框传入head()函数:

head(food.energycontent)

结果如下:

image.png

str()函数返回food.energycontent数据框的结构信息。结果简洁地显示了其内部结构。

str(food.energycontent)

结果如下:


第3步:转换数据

apply()函数执行了数据框和矩阵中逐个元素的数据变换。它返回一个向量、数组、链表,其中的值是通过应用一个函数到一个数组或矩阵的边缘。其中2代表了函数要应用的列下标。sd是标准差函数,用于这个数据框。

standard.deviation <- apply(food.energycontent[,-1], 2, sd)
standard.deviation

结果如下:

sweep()函数返回一个数组,从一个输入数组中清除一些统计信息。food.energycontent[,-1]作为一个数组传入。其中2代表了函数要应用的列下标。standard.deviation是需要被清除的统计信息。

foodergycnt.stddev <- sweep(food.energycontent[,-1], 2, standard.deviation, FUN = "/")
foodergycnt.stddev

结果如下:

第4步:聚类

kmeans()函数施行k均值聚类到数据矩阵上。数据矩阵foodergycnt.stddev被当作一个对象传入,该对象是一个数值型矩阵。centers=5代表初始的簇中心数量。iter.max=100代表最大的迭代轮数。因为簇数量由一个数字指定,nstart=25定义了随机被指定的组数量。

food.5cluster <- kmeans(foodergycnt.stddev, centers = 5, iter.max = 100, nstart = 25)
food.5cluster

结果如下:

指定4个中心簇:

food.4cluster <- kmeans(foodergycnt.stddev, centers = 4, iter.max = 100, nstart = 25)

food.4cluster

结果如下:

输出4个簇的聚类向量,结果如下:

> food.4cluster$cluster

[1] 4 1 4 4 1 1 1 1 4 4 4 4 4 1 1 1 2 2 1 1 1 3 1 3 3 1 1

接下来,输出4个聚类方案的聚类以及食品标签。

lapply()函数返回一个与X同样长度的链表:

food.4cluster.clust <- lapply(1:4, function(nc) food.energycontent$Food[food.4cluster$cluster==nc])

food.4cluster.clust

结果如下:

第5步:可视化聚类结果

使用pair()函数生成一个散点图矩阵。

food.energycontent[,-1]通过给定一个矩阵或数据框的数值来提供点的坐标。

pairs(food.energycontent[,-1], panel=function(x,y) text(x,y,food.4cluster$cluster))

结果如下:

princomp()函数在给定数值型数据矩阵上进行主成分分析。该函数产生了非旋转的主成分分析结果。cor=T代表一个逻辑值,指明了计算需要使用相关矩阵。

food.pc <- princomp(food.energycontent[,-1], cor = T)
my.color.vector <- rep("green", times=nrow(food.energycontent))
my.color.vector[food.4cluster$cluster==2] <- "blue"
my.color.vector[food.4cluster$cluster==3] <- "red"
my.color.vector[food.4cluster$cluster==4] <- "orange"

par()函数整合多个绘图结果到一个统一的图中。s产生一个正方形绘图区域。

par(pty="s")

绘制这个聚类:

plot(food.pc$scores[,1], food.pc$scores[,2],
   ylim=range(food.pc$scores[,1]),
   xlab="PC 1", ylab="PC 2", type = "n", lwd=2)

text(food.pc$scores[,1], food.pc$scores[,2], labels =food.energycontent$Food,cex=0.7, lwd=2, col = my.color.vector)

结果如下:

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

推荐阅读更多精彩内容