R语言与数据分析练习:K-Means聚类
R语言与数据分析练习:K-Means聚类
k-means实现
k-means算法,是一种最广泛使用的聚类算法。k-means以k作为参数,把数据分为k个组,通过迭代计算过程,将各个分组内的所有数据样本的均值作为该类的中心点,使得组内数据具有较高的相似度,而组间的相似度最低。
k-means工作原理
- 初始化数据,选择k个对象作为中心点。
- 遍历整个数据集,计算每个点与每个中心点的距离,将它分配给距离中心最近的组。
- 重新计算每个组的平均值,作为新的聚类中心。
- 上面2-3步,过程不断重复,直到函数收敛,不再新的分组情况出现。
k-means聚类,适用于连续型数据集。在计算数据样本之间的距离时,通常使用欧式距离作为相似性度量。k-means支持多种距离计算,还包括maximum, manhattan, pearson, correlation, spearman, kendall等。各种的距离算法的介绍,请参考文章R语言实现46种距离算法
kmeans()函数实现
在R语言中,我们可以直接调用系统中自带的kmeans()函数,就可以实现k-means的聚类。同时,有很多第三方算法包也提供了k-means的计算函数。当我们需要使用kmeans算法,可以使用第三方扩展的包,比如flexclust, amap等包。
题目:
在篮球运动中,一般情况下,控球后卫与得分后卫的助攻数较多,小前锋的得分数较多,而大前锋与中锋的助攻数与得分数较少。下表为21名篮球运动员每分钟助攻数和每分钟得分数的数据集,请运用K-Means聚类算法将这21名篮球运动员划分为5类,并通过画图判断他们分别属于什么位置。
数据如下:
assists_per_minute为每分钟助攻次数
points_per_minute为每分钟得分数
实现代码:
# 切换路径,导入数据
setwd('D:/bigdata/R语言与数据分析/data03') # 这里是自己数据存放的路径
basketballdata <- read.csv("data.csv",stringsAsFactors = F) # 数据读取# 新建一个与源数据有效数据等长的矩阵
outfile <- matrix(data=NA, nrow = nrow(basketballdata), ncol = 2, byrow = TRUE, dimnames = list(c(1:nrow(basketballdata)),c("assists_per_minute","points_per_minute")))# 读取源数据,写入新建的矩阵
outfile[,1] <- basketballdata[,2]
outfile[,2] <- basketballdata[,3]# 输出数据,存到本地
summary(outfile)#将字符串存储为文件 采用Base64解码
write.csv(outfile,'datachange.csv',row.names = FALSE)# 数据去中心化后的标准化
basketballdata <- read.csv('datachange.csv', header = TRUE)
zscoredfile <- scale(basketballdata)# 数据写出
write.csv(zscoredfile, 'standardizeddata.csv',row.names = FALSE)
inputfile <- read.csv('standardizeddata.csv', header = TRUE)# 聚类分析--5个簇心,调用kmeans算法
result <- kmeans(inputfile, 5)# 结果输出
type <- result$cluster
type# 查看类别分布
table(type) # 查看类别统计centervec <- result$center
centervec # 查看簇中心点# centervec对列取最大值
max <- apply(centervec,2,max)
max# centervec对列取最小值
min <- apply(centervec,2,min)
min# 构建frame类型数据
df = data.frame(rbind(max,min,centervec))
df# 绘制聚类散点图
# 如果本地没有factoextra和cluster包,先用以下命令进行下载
# install.packages('factoextra')
# install.packages('cluster')
library(cluster)
library(factoextra)
fviz_cluster(result,basketballdata)
运行结果:
对球员的数据进行分析:
第一组(蓝色部分)与第二组(棕色部分)的每分钟助攻次数较多,所以对应控球后卫与得分后卫。又因为得分后卫的每分钟得分数多于控球后卫,所以第一组(蓝色部分)为控球后卫,第二组(棕色部分)为得分后卫。
第三组(紫色部分)的每分钟得分数较多,所以对应小前锋
第四组(绿色部分)和第五组(红色部分)的每分钟助攻次数及每分钟得分数较少,所以对应大前锋与中锋。又因为中锋每分钟得分数多于大前锋,所以,第四组(绿色部分)为大前锋,第五组(红色部分)为中锋。
推测出每个球员的位置:
第一组(蓝色部分)为控球后卫
(第一组:9,11,15,21)
第二组(棕色部分)为得分后卫
(第二组:6,7,18)
第三组(紫色部分)为小前锋
(第三组:2)
第四组(绿色部分)为大前锋
(第四组:10,12,14,17,20)
第五组(红色部分)为中锋
(第五组:1,3,4,5,8,13,16,19)
R语言与数据分析练习:K-Means聚类相关推荐
- 看书标记【R语言 商务数据分析实战9】
看书标记--关于R语言 chapter 9 9.2 任务实现 [R语言 商务数据分析实战9] chapter 9 餐饮企业综合分析 统计分析>>ARIMA预测销售额>>协同过滤 ...
- OpenCV的k - means聚类 -对图片进行颜色量化
OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...
- 《R语言游戏数据分析与挖掘》一2.2 数据对象
2.2 数据对象 R拥有许多用于存储数据的对象类型,包括向量.矩阵.数组.数据框和列表.它们在存储数据的类型.创建方式.结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同.多样化的数据对 ...
- R语言与数据分析-01-数据类型与数据输入-01-基础
一. R语言的数据类型 原文链接 : r语言与数据分析实战1 1.1 知识描述 搞清楚我们面对的数据类型是什么,并能实现数据类型之间的转换 1.2 相关知识 需要认真学习以下函数: mode(): 用 ...
- R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数)
R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数) 目录
- R语言ggplot2可视化:为层次聚类树状图dendrogram中的簇进行着色、在树状图dendrogram中为不同的层次聚类簇配置不同的色彩
R语言ggplot2可视化:为层次聚类树状图dendrogram中的簇进行着色.在树状图dendrogram中为不同的层次聚类簇配置不同的色彩 #层次聚类树状图dendrogram labs = pa ...
- R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据
R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据 目录 R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据
- R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数)
R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数) 目录
- R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数)
R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数) 目录
- R语言KMeans聚类分析确定最优聚类簇数实战:Calinski-Harabasz准则(确定最优聚类簇数)
R语言KMeans聚类分析确定最优聚类簇数实战:Calinski-Harabasz准则(确定最优聚类簇数) 目录
最新文章
- 如何使用Nsight Compute?
- 如何构建优质的推荐系统服务?| 技术头条
- 深入解析Java锁机制
- 48岁的C语言,你知道它背后的历史吗?
- .NET 6 攻略大全(二)
- “睡服”面试官系列第二十篇之generator函数的异步应用(建议收藏学习)
- pandas 替换数字列中的字符串
- margin塌陷现象div盒子嵌套盒子外边距合并现象
- OpenCV学习资源
- 【发表案例】JCR1区计算机测量类SCI,仅3个月录用
- 在线就能用的 SQL 练习平台我给你找好了
- 晶振的匹配电容计算公式
- 4月30日世界表白日_2020520世界表白日 你该怎么表白
- 函数声明和函数表达式的区别
- 清除90天苹果充值记录_王者荣耀安卓苹果跨系统角色转移服务,限量测试收费99元...
- iview的DatePicker 怎么选择时分秒
- java并发机制_Java并发机制的底层实现原理.PDF
- TIPTOP报表提示:foreach: 字元轉換至數字程序失敗.
- 2022年5月22日-Taylor级数的python实验
- 编译原理 LL1文法的判断和句子识别