一个用R语言进行聚类分析的例子
一个用R语言进行聚类分析的例子(转载)
第一步:对数据集进行初步统计分析
检查数据的维度
> dim(iris)
[1] 150 5
显示数据集中的列名
> names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
显示数据集的内部结构
> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
显示数据集的属性
> attributes(iris)
$names --就是数据集的列名
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
$row.names --个人理解就是每行数据的标号
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
[21] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
[41] 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
[61] 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
[81] 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
[101] 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
[121] 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
[141] 141 142 143 144 145 146 147 148 149 150
$class --表示类别
[1] "data.frame"
查看数据集的前五项数据情况
> iris[1:5,]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
查看数据集中属性Sepal.Length前10行数据
> iris[1:10, "Sepal.Length"]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
同上
> iris$Sepal.Length[1:10]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
显示数据集中每个变量的分布情况
> summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
显示iris数据集列Species中各个值出现频次
> table(iris$Species)
setosa versicolor virginica
50 50 50
根据列Species画出饼图
> pie(table(iris$Species))
算出列Sepal.Length的所有值的方差
> var(iris$Sepal.Length)
[1] 0.6856935
算出列iris$Sepal.Length和iris$Petal.Length的协方差
> cov(iris$Sepal.Length, iris$Petal.Length)
[1] 1.274315
算出列iris$Sepal.Length和iris$Petal.Length的相关系数, 从结果看这两个值是强相关。
> cor(iris$Sepal.Length, iris$Petal.Length)
[1] 0.8717538
画出列iris$Sepal.Length分布柱状图
> hist(iris$Sepal.Length)
画出列iris$Sepal.Length的密度函数图
> plot(density(iris$Sepal.Length))
画出列iris$Sepal.Length和iris$Sepal.Width的散点图
> plot(iris$Sepal.Length, iris$Sepal.Width)
绘出矩阵各列的散布图
> plot(iris)
or
> pairs(iris)
第二步:使用knn包进行Kmean聚类分析
将数据集进行备份,将列newiris$Species置为空,将此数据集作为测试数据集
> newiris <- iris
> newiris$Species <- NULL
在数据集newiris上运行Kmean聚类分析, 将聚类结果保存在kc中。在kmean函数中,将需要生成聚类数设置为3
> (kc <- kmeans(newiris, 3))
K-means clustering with 3 clusters of sizes 38, 50, 62: K-means算法产生了3个聚类,大小分别为38,50,62.
Cluster means: 每个聚类中各个列值生成的最终平均值
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.006000 3.428000 1.462000 0.246000
2 5.901613 2.748387 4.393548 1.433871
3 6.850000 3.073684 5.742105 2.071053
Clustering vector: 每行记录所属的聚类(2代表属于第二个聚类,1代表属于第一个聚类,3代表属于第三个聚类)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[37] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[73] 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3
[109] 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3
[145] 3 3 2 3 3 2
Within cluster sum of squares by cluster: 每个聚类内部的距离平方和
[1] 15.15100 39.82097 23.87947
(between_SS / total_SS = 88.4 %) 组间的距离平方和占了整体距离平方和的的88.4%,也就是说各个聚类间的距离做到了最大
Available components: 运行kmeans函数返回的对象所包含的各个组成部分
[1] "cluster" "centers" "totss" "withinss"
[5] "tot.withinss" "betweenss" "size"
("cluster"是一个整数向量,用于表示记录所属的聚类
"centers"是一个矩阵,表示每聚类中各个变量的中心点
"totss"表示所生成聚类的总体距离平方和
"withinss"表示各个聚类组内的距离平方和
"tot.withinss"表示聚类组内的距离平方和总量
"betweenss"表示聚类组间的聚类平方和总量
"size"表示每个聚类组中成员的数量)
创建一个连续表,在三个聚类中分别统计各种花出现的次数
> table(iris$Species, kc$cluster)
1 2 3
setosa 0 50 0
versicolor 2 0 48
virginica 36 0 14
根据最后的聚类结果画出散点图,数据为结果集中的列"Sepal.Length"和"Sepal.Width",颜色为用1,2,3表示的缺省颜色
> plot(newiris[c("Sepal.Length", "Sepal.Width")], col = kc$cluster)
在图上标出每个聚类的中心点
〉points(kc$centers[,c("Sepal.Length", "Sepal.Width")], col = 1:3, pch = 8, cex=2)
一个用R语言进行聚类分析的例子相关推荐
- R语言Apriori算法实现例子
R语言Apriori算法实现例子 以西饼屋数据集为例进行分析 代码部分 第一部分 每行解读 setwd("-")#定位根目录 data.frame(table(Breakfast[ ...
- R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数)
R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数) 目录
- R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数)
R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数) 目录
- R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数)
R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数) 目录
- R语言KMeans聚类分析确定最优聚类簇数实战:Calinski-Harabasz准则(确定最优聚类簇数)
R语言KMeans聚类分析确定最优聚类簇数实战:Calinski-Harabasz准则(确定最优聚类簇数) 目录
- r语言kmodes_聚类分析——k-means算法及R语言实现
我们知道『物以类聚,人以群分』,这里并不是分类问题,而是聚类问题. 两者主要区别在于,分类是将一组数据根据不同的类区分,已经知道有哪些类,也就是数据已经有了类的标签.而聚类是一种事先不知道有多少类,通 ...
- k均值聚类算法案例 r语言iris_聚类分析—系统聚类
聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,最后的结果是希望同类之间的差异性尽可能小,不同类之间的差异性尽可能大.不同的类具有能够表达异于其他类的指标,这样针对不同的类,后续就能采取不一样 ...
- 基于R语言的聚类分析(k-means,层次聚类)
今天给大家展示基于R语言的聚类,在此之前呢,首先谈谈聚类分析,以及常见的聚类模型,说起聚类我们都知道,就是按照一定的相似性度量方式,把接近的一些个体聚在一起.这里主要是相似性度量,不同的数据类型,我们 ...
- R语言实战 聚类分析
16.聚类分析 1.前言 聚类分析是一种数据规约技术,在与揭露一个数据集中观测值的子集,可以把大量的观测值规约为若干个类,而类即是被定义为若干个观测值组成的群组,组内相似度高于组间相似度,即是聚类.最 ...
最新文章
- 学习笔记之xss原理篇
- 服务器端执行javascript脚本
- leetcode算法题--二分查找
- 本周值得读的15篇AI论文,还有源码搭配服用
- 搞多媒体开发?吴威麒:先拉个书单看看
- octave安装 缺java_Octave信号包安装
- 计算机博士论文答谢,这篇博士论文《致谢》刷屏,句句扎心
- 华为鸿蒙发布2.0,华为做到了!鸿蒙2.0正式发布,苹果安卓有危机?
- OpenStack精华问答 | OpenStack都有哪些基础服务?
- python小波分解与重构_小波分解和重构
- pid和linux的关系,linux – bash pid和$$之间的区别
- Servlet CDI Example Analysis
- 如何卸载ultraedit_卸载不掉的软件怎么办(彻底卸载软件方法介绍)
- sis地址发布器_Go 1.15 正式发布:看看都有哪些值得关注的变化
- php 评论插件,typecho插件:TeComment评论增强插件
- python中shape错误_python中shape错误
- Vue3+node.js实战项目网易云音乐APP(二)
- Windows应用商店0x80131500错误
- Huffman树(哈夫曼树)
- JWT、JWS与JWE
热门文章
- Android开发——小技巧:推荐辅助工具(icon图标网站、在线取色网站以及视频学习网站)
- form表单序列化JSON
- css content-box 和 border-box
- springboot项目:驾校预约管理系统5y0y2(java+VUE+Mybatis+Maven+Mysql)
- 为什么你四处奔波海投简历,他却在专心挑offer?
- android studio 代码覆盖率,AndroidStudio中使用Jacoco统计Android应用程序代码覆盖率
- 搭建web服务器得教程
- [分布式系统][事务]对2PC的理解
- 发明计算机作文300字,我发明的机器人作文300字(通用6篇)
- 微信小程序请求封装及案例展示