R语言与数据分析练习:K-Means聚类

k-means实现

k-means算法,是一种最广泛使用的聚类算法。k-means以k作为参数,把数据分为k个组,通过迭代计算过程,将各个分组内的所有数据样本的均值作为该类的中心点,使得组内数据具有较高的相似度,而组间的相似度最低。

k-means工作原理

  1. 初始化数据,选择k个对象作为中心点。
  2. 遍历整个数据集,计算每个点与每个中心点的距离,将它分配给距离中心最近的组。
  3. 重新计算每个组的平均值,作为新的聚类中心。
  4. 上面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聚类相关推荐

  1. 看书标记【R语言 商务数据分析实战9】

    看书标记--关于R语言 chapter 9 9.2 任务实现 [R语言 商务数据分析实战9] chapter 9 餐饮企业综合分析 统计分析>>ARIMA预测销售额>>协同过滤 ...

  2. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  3. 《R语言游戏数据分析与挖掘》一2.2 数据对象

    2.2 数据对象 R拥有许多用于存储数据的对象类型,包括向量.矩阵.数组.数据框和列表.它们在存储数据的类型.创建方式.结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同.多样化的数据对 ...

  4. R语言与数据分析-01-数据类型与数据输入-01-基础

    一. R语言的数据类型 原文链接 : r语言与数据分析实战1 1.1 知识描述 搞清楚我们面对的数据类型是什么,并能实现数据类型之间的转换 1.2 相关知识 需要认真学习以下函数: mode(): 用 ...

  5. R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数) 目录

  6. R语言ggplot2可视化:为层次聚类树状图dendrogram中的簇进行着色、在树状图dendrogram中为不同的层次聚类簇配置不同的色彩

    R语言ggplot2可视化:为层次聚类树状图dendrogram中的簇进行着色.在树状图dendrogram中为不同的层次聚类簇配置不同的色彩 #层次聚类树状图dendrogram labs = pa ...

  7. R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据

    R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据 目录 R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据

  8. R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数) 目录

  9. R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数) 目录

  10. R语言KMeans聚类分析确定最优聚类簇数实战:Calinski-Harabasz准则(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:Calinski-Harabasz准则(确定最优聚类簇数) 目录

最新文章

  1. 如何使用Nsight Compute?
  2. 如何构建优质的推荐系统服务?| 技术头条
  3. 深入解析Java锁机制
  4. 48岁的C语言,你知道它背后的历史吗?
  5. .NET 6 攻略大全(二)
  6. “睡服”面试官系列第二十篇之generator函数的异步应用(建议收藏学习)
  7. pandas 替换数字列中的字符串
  8. margin塌陷现象div盒子嵌套盒子外边距合并现象
  9. OpenCV学习资源
  10. 【发表案例】JCR1区计算机测量类SCI,仅3个月录用
  11. 在线就能用的 SQL 练习平台我给你找好了
  12. 晶振的匹配电容计算公式
  13. 4月30日世界表白日_2020520世界表白日 你该怎么表白
  14. 函数声明和函数表达式的区别
  15. 清除90天苹果充值记录_王者荣耀安卓苹果跨系统角色转移服务,限量测试收费99元...
  16. iview的DatePicker 怎么选择时分秒
  17. java并发机制_Java并发机制的底层实现原理.PDF
  18. TIPTOP报表提示:foreach: 字元轉換至數字程序失敗.
  19. 2022年5月22日-Taylor级数的python实验
  20. 编译原理 LL1文法的判断和句子识别

热门文章

  1. 关于st-link与stm32f103c8t6连接
  2. 量化交易的十个知识点
  3. 笔记本电脑怎么打不开计算机,笔记本电脑打不开了怎么办
  4. Python的文献计量分析流程实现--含代码
  5. PR视频去水印—中间值
  6. 傅里叶变换并把结果保存在excel文件中
  7. CF407C Curious Array
  8. linux pam limits.so,Linux 无法本地登录解决方法 报错/lib/security/pam_limits.so
  9. 周期串(Periodic Strings)
  10. 浩辰CAD建筑软件教程之门窗套