【机器学习与R语言】11- Kmeans聚类
1.理解Kmeans聚类
1)基本概念
- 聚类:无监督分类,对无标签案例进行分类。
- 半监督学习:从无标签的数据入手,是哦那个聚类来创建分类标签,然后用一个有监督的学习算法(如决策树)来寻找这些类中最重要的预测指标。
- kmeans聚类算法特点:

- kmeans算法涉及将n个案例中的每一个案例分配到指定k个类中的一个(指定k是为了最小化每个类内部差异,最大化类之间的差异)。
- 为避免遍历案例所有可能的组合来计算最优聚类,kemans使用了局部最优解的启发式过程,即对初始的类分配进行修正来判断是否提升了类内部的同质性。
- kmeans聚类的两个阶段:一是将案例分配到初始的k个类中;二是根据落入当前类的案例调整类的边界来更新分配。重复更新和分配多次,直到改变不会提升类的优度为止。
- 可通过尝试多次不同k的聚类分析来测试研究结果的稳健性。
2)kmeans运作的基本原理
①使用距离来分配和更新类
- 初始类中心的选择:从训练集中选择的k个随机案例来确定;或者选择发生再特征空间任意地方的随机值(而不是只在数据的观测值之间进行选择);或者完全跳过这一步,通过将每个案例随机分配到一个类中,直接进入更新阶段。
- 选择初始类中心之后,其他的案例将分配到与其最相似,或者根据距离函数最相近的类中心。距离函数如欧氏距离、曼哈顿距离、闵可夫斯基距离等。
- 距离计算的数据必须是数值型,且需要标准化,计算的是每一个案例与每一个类中心之间的距离。
- 更新类:将初始的类中心转移到一个新的位置(“质心”,通过计算分配到当前类的各点的均值来获得)。类中心改变之后,类的边界发生变化,案例重新分配,如此反复更新,直到没有额外的案例被重新分配为止,聚类最终完成。
- 聚类结果的表达:一是可以报告每个案例的分配情况;二是可以报告最后一次更新之后的质心的坐标。

运算过程如下:
指定k=3,选择初始类中心

计算距离,归类

更新类中心,重新分配

第二轮更新阶段,重新分配

最终聚类结果

②选择适当的聚类数
- kmeans算法对于随机选择的聚类中心很敏感。选择类的数目需要一种微妙的平衡:大k会提升类的同质性,但有过拟合的风险。
- 理想情况下,最好有一些关于真实分组的先验知识。有时k也由业务需求或分析动机所决定。
- 若没有任何先验知识,经验规则就是k设为n/2的平方根(n是全部案例总数),对于大的数据集一般偏大。
- “肘部法”度量不同k值:找到一个k(肘部点),使得高于该值之后的收益会发生递减。

- 但在实际中,反复测试大量的k值是不可行的。不要要求最严格的性能,获得类最优解集。大部分应用中,选择一个k就够了。
2.Kmeans聚类应用示例
探寻青少年市场细分
1)收集数据
30000名美国高中生的随机案例数据集,在知名社交网络服务中保存了他们的个人资料。将网站页面内容划分单词,36个单词被选来代表5大兴趣类。每个案例包括4个个人特征(毕业年份,性别,年龄,交友数)和36种兴趣。
数据下载:
链接: https://pan.baidu.com/s/1CGkaRPc3glCjI-hWWg1Kug 提取码: 74bm
2)探索和准备数据
包括缺失值的查看,缺失值的虚拟编码和缺失值插补等。
## Step 2: Exploring and preparing the data ----
teens <- read.csv("snsdata.csv")
str(teens)
# look at missing data for female variable
table(teens$gender)
table(teens$gender, useNA = "ifany") #计数缺失值
# look at missing data for age variable
summary(teens$age) #包含缺失值统计
# eliminate age outliers
teens$age <- ifelse(teens$age >= 13 & teens$age < 20,
teens$age, NA)
summary(teens$age)
# reassign missing gender values to "unknown"
teens$female <- ifelse(teens$gender == "F" &
!is.na(teens$gender), 1, 0)
teens$no_gender <- ifelse(is.na(teens$gender), 1, 0)
# check our recoding work
table(teens$gender, useNA = "ifany")
table(teens$female, useNA = "ifany")
table(teens$no_gender, useNA = "ifany")
# finding the mean age by cohort
mean(teens$age) # doesn't work
mean(teens$age, na.rm = TRUE) # works
# age by cohort
aggregate(data = teens, age ~ gradyear, mean, na.rm = TRUE)
# create a vector with the average age for each gradyear, repeated by person
# ave函数返回一个具有重复的组均值的向量,使得结果在长度上等于原始向量的长度
ave_age <- ave(teens$age, teens$gradyear,
FUN = function(x) mean(x, na.rm = TRUE))
teens$age <- ifelse(is.na(teens$age), ave_age, teens$age)
# check the summary results to ensure missing values are eliminated
summary(teens$age)
3)训练模型
使用基础包的kmeans函数。注意将特征标准化,这里用z-score标准化。
另一个就是k值的指定,比如对人口分析很熟悉,或者对关于自然分组的真是数量有一些预感,也可参考一些资料等,我们将符合年龄的高中生特征确定为5个典型类型(聪明人,运动员,公主,罪犯,无特征)。
## Step 3: Training a model on the data ----
interests <- teens[5:40]
interests_z <- as.data.frame(lapply(interests, scale))
set.seed(2345)
teen_clusters <- kmeans(interests_z, 5)
4)评估性能
模型的成功与否在于类对于预期目的是否有用。评估一个类是否有用的最基本方法之一就是检查落在每一组中的案例数,数目过多或过少(如1个或几个),则这些类不太有用。
为深入了解类,可查看聚类质心的坐标。因为已经做了z-score标准化,所以负值表示低于总体均值,正值表示高于总体均值。
## Step 4: Evaluating model performance ----
# look at the size of the clusters
teen_clusters$size
# look at the cluster centers
teen_clusters$centers

通过研究类在特征(兴趣)中的表现,可以构建有一个表来列出每组中的主要兴趣项:

5)提高模型性能
根据聚类结果,可以确定每个案例被分配到了哪一类中,再探究不同的类在原始数据中各特征的差异。
## Step 5: Improving model performance ----
# apply the cluster IDs to the original data frame
teens$cluster <- teen_clusters$cluster
# look at the first five records
teens[1:5, c("cluster", "gender", "age", "friends")]
# mean age by cluster
aggregate(data = teens, age ~ cluster, mean)
# proportion of females by cluster
aggregate(data = teens, female ~ cluster, mean)
# mean number of friends by cluster
aggregate(data = teens, friends ~ cluster, mean)
年龄、性别、朋友数量之间的关系表明,这些类是有用的预测因子,以这种方式来验证这些类的预测能力。
机器学习与R语言系列推文汇总:
【机器学习与R语言】1-机器学习简介
【机器学习与R语言】2-K近邻(kNN)
【机器学习与R语言】3-朴素贝叶斯(NB)
【机器学习与R语言】4-决策树
【机器学习与R语言】5-规则学习
【机器学习与R语言】6-线性回归
【机器学习与R语言】7-回归树和模型树
【机器学习与R语言】8-神经网络
【机器学习与R语言】9-支持向量机
【机器学习与R语言】10-关联规则
【机器学习与R语言】11-Kmeans聚类
【机器学习与R语言】12-如何评估模型的性能?
【机器学习与R语言】13-如何提高模型的性能?
【机器学习与R语言】11- Kmeans聚类的更多相关文章
- 数据分析与挖掘 - R语言:K-means聚类算法
一个简单的例子!环境:CentOS6.5Hadoop集群.Hive.R.RHive,具体安装及调试方法见博客内文档. 1.分析题目--有一个用户点击数据样本(husercollect)--按用户访问的 ...
- 【机器学习与R语言】7-回归树和模型树
目录 1.理解回归树和模型树 2.回归树和模型树应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理解回归树和模型树 决策树用于数值预测: 回归树:基于到达 ...
- 【机器学习与R语言】13- 如何提高模型的性能?
目录 1.调整模型参数来提高性能 1.1 创建简单的调整模型 2.2 定制调整参数 2.使用元学习来提高性能 2.1 集成学习(元学习)概述 2.2 bagging 2.3 boosting 2.4 ...
- 【机器学习与R语言】12- 如何评估模型的性能?
目录 1.评估分类方法的性能 1.1 混淆矩阵 1.2 其他评价指标 1)Kappa统计量 2)灵敏度与特异性 3)精确度与回溯精确度 4)F度量 1.3 性能权衡可视化(ROC曲线) 2.评估未来的 ...
- 【机器学习与R语言】10- 关联规则
目录 1.理解关联规则 1)基本认识 2)Apriori算法 2.关联规则应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解关联规则 1)基本认识 购物 ...
- 【机器学习与R语言】9- 支持向量机
目录 1.理解支持向量机(SVM) 1)SVM特点 2)用超平面分类 3)对非线性空间使用核函数 2. 支持向量机应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高性能 ...
- 【机器学习与R语言】8- 神经网络
目录 1.理解神经网络 1)基本概念 2)激活函数 3)网络拓扑 4)训练算法 2.神经网络应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高性能 1.理解神经网络 1) ...
- 【机器学习与R语言】6-线性回归
目录 1.理解回归 1)简单线性回归 2)普通最小二乘估计 3)相关系数 4)多元线性回归 2.线性回归应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理 ...
- 【机器学习与R语言】5-规则学习算法
目录 1.分类规则原理 1.1 1R单规则算法 1.2 RIPPER算法 2. 规则学习应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估性能 5)提高性能 6)选择决策树中的分类规则 ...
随机推荐
- [技术博客] 利用SharedPreferences来实现登录状态的记忆功能
[技术博客] 利用SharedPreferences来实现登录状态的记忆功能 一.SharedPreferences简介 SharedPreferences是Android平台上一个轻量级的存储辅助类 ...
- 2021.7.15考试总结[NOIP模拟16]
ZJ模拟D2就是NB.. T1 Star Way To Heaven 谁能想到这竟是个最小生成树呢?(T1挂分100的高人JYF就在我身边 把上边界和下边界看成一个点和星星跑最小生成树,从上边界开始跑 ...
- 今天学习了BootStrap
今天学习了BootStrap 一.BootStrap介绍 Bootstrap是一个前端开发的框架,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.Java ...
- Envoy实现.NET架构的网关(三)代理GRPC
什么是GRPC gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架.gRPC 的主要好处是: 现代.高性能.轻量级的 RPC 框架. 契约优先的 API 开发,默认使用协议缓冲区,与语言无 ...
- 树的子结构 牛客网 剑指Offer
树的子结构 牛客网 剑指Offer 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) # class TreeNode: # def __init_ ...
- poj 3417 Network (LCA,路径上有值)
题意: N个点,构成一棵树.给出这棵树的结构. M条边,(a1,b1)...(am,bm),代表给树的这些点对连上边.这样就形成了有很多环的一个新"树". 现在要求你在原树中断一条 ...
- NOIP模拟88(多校21)
前言 对于这套题的总体感觉就是难,然后就是自己很菜... 对于 T1 考试时只会一个最垃圾的背包,考完之后对于思路这一块也不是很顺利,大概这就是薄弱的地方吧. 然后 T2 是比较简单的一道题了,但是考 ...
- Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!
大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第八篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得 ...
- Linux 兴趣小组2016免试题 第四关揭秘
Linux 兴趣小组2016免试题 点这里 首先贴出第四关链接Linux 兴趣小组2016免试题 第四关 第四关: 进入网址我们看到的是4张扑克牌K,这是什么意思? 要我斗地主?好了,还是乖乖的先查看 ...
- {% csrf_token %} 原理和作用 (踩坑必看)
本博客已暂停更新,请转自新博客 https://www.whbwiki.com/320.html 继续阅读 简介 在django中我们需要在templates的form中加入{%csrf_token% ...