r语言kmodes_聚类分析——k-means算法及R语言实现
我们知道『物以类聚,人以群分』,这里并不是分类问题,而是聚类问题。
两者主要区别在于,分类是将一组数据根据不同的类区分,已经知道有哪些类,也就是数据已经有了类的标签。而聚类是一种事先不知道有多少类,通过算法学习,分出来了一些类别。
分类跟聚类也分别是有监督学习和无监督学习的范畴。
k-means算法
k-means是聚类算法中最简单的,也是最常用的一种方法。
这里的
指的是初始规定要将数据集分成的类别,means是各类别数据的均值作为中心点。
算法步骤:
1.初始设置要分成的类别
,及随机选取数据集中
个点作为初始点
2.根据相似性度量函数将其他点与初始点做比较,离哪个值近就分到哪一个类
3.将分出来的
类求取平均值,作为新的中心点
4.重复步骤,直到中心点不变或者变化不大(即收敛)或者达到规定的迭代次数则停止
相似性度量有多种函数,一般使用欧式距离。相似性度量函数
补充:为什么会使用均值作为中心点的选择呢?
这主要是因为目标函数的设置决定的。我们使用误差平方和作为聚类的目标函数,即
。
这里的
表示
个类,
表示第
个中心,
,
是欧几里得距离。
对第
个中心
求解,最小化上述公式。对上述公式求导并令导数等于0,得到如下公式:
可以看到,每个簇中能够让目标函数达到最小的中心点就是这个簇的均值。
举例说明
下面以一个具体例子来说明k-means算法步骤。数据集如下。
因为是二维的,可以画下散点图看下。
直观来看,这个数据集是有两类的,也就是两个簇,一个是在右上角,一个是在左下角。可以使用算法看下是否符合预判。
Step1:
那我们可以设置
为2,初始中心值就选
。
Step2:
下面就是计算剩下的点到中心点的距离,使用欧氏距离。
比较之后,发现剩下的点到
距离更近,那现在有了两类:
Step3:
然后重新选择中心点,第一类只有一个值,则仍然为
。第二类按照5个点的均值作为中心点
: ((1+3+8+9+10)/5, (2+1+8+10+7)/5) = (6.2,5.6)。重新计算距离。
现在分成的两类为
Step4:
Step2和Step3中心点相差较大,重新选择中心点。
这次就是两个类中数据的均值作为新的中心点了。分别为
。
现在仍然是两类
继续下去,中心点不变,也就是达到收敛了。分成的两类就是上面两组,与散点图观察到的一致。
R语言实现
使用R语言自带的函数及可视化包。
数据及包的准备
# 载入数据
data("USArrests")
# 数据标准化
data
head(data)
# 可视化包
library(factoextra)
确定最佳聚类数,选择坡度不明显的点作为聚类数。
# 确定聚类数
fviz_nbclust(data, kmeans, method = "wss") + geom_vline(xintercept = 4, linetype = 2)
# 另一种方法
wss
for (i in 2:15)
wss[i]
plot(1:15, wss, type="b", xlab="Number of Clusters",ylab="Within groups sum of squares")
可以选择4个类别。下面进行聚类。
#利用k-mean是进行聚类
km
# 查看结果
print(km)
查看结果并分析数据:print(km)
K-means clustering with 4 clusters of sizes 13, 16, 8, 13
Cluster means:
Murder Assault UrbanPop Rape
1 0.6950701 1.0394414 0.7226370 1.27693964
2 -0.4894375 -0.3826001 0.5758298 -0.26165379
3 1.4118898 0.8743346 -0.8145211 0.01927104
4 -0.9615407 -1.1066010 -0.9301069 -0.96676331
Clustering vector:
Alabama Alaska Arizona Arkansas
3 1 1 3
California Colorado Connecticut Delaware
1 1 2 2
Florida Georgia Hawaii Idaho
1 3 2 4
Illinois Indiana Iowa Kansas
1 2 4 2
Kentucky Louisiana Maine Maryland
4 3 4 1
Massachusetts Michigan Minnesota Mississippi
2 1 4 3
Missouri Montana Nebraska Nevada
1 4 4 1
New Hampshire New Jersey New Mexico New York
4 2 1 1
North Carolina North Dakota Ohio Oklahoma
3 4 2 2
Oregon Pennsylvania Rhode Island South Carolina
2 2 2 3
South Dakota Tennessee Texas Utah
4 3 1 2
Vermont Virginia Washington West Virginia
4 2 2 4
Wisconsin Wyoming
4 2
Within cluster sum of squares by cluster:
[1] 19.922437 16.212213 8.316061 11.952463
(between_SS / total_SS = 71.2 %)
Available components:
[1] "cluster" "centers" "totss" "withinss"
[5] "tot.withinss" "betweenss" "size" "iter"
[9] "ifault"
第一行结果是4类,每个类别的数据个数。
下面是聚类的中心点。
然后是每个值所属哪个类别。
Within cluster sum of squares by cluster:是组间距离平方和。
聚类的目的是组内距离小,组间距离大。between_SS / total_SS就是组间距离占总距离的占比,越接近1越好。
聚类可视化
fviz_cluster(km, data = data,
palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
ellipse.type = "euclid",
star.plot = TRUE,
repel = TRUE,
ggtheme = theme_minimal()
)
k-means不足
①需要确定分类数
,一般根据经验或者已经有预判,其次是根据上面的方法确定分类数量。
②初始值的选取会影响最终聚类效果,并且目标函数
可能会达到局部最优解。这个有相应的改进方法,包括k-means++和二分k-means。
③对于类似下面圆形的数据集,聚类效果很差,主要是算法原因。所以还有其他的聚类算法,比如基于密度的方法等。
不过k-means实现简单,易于理解,应用很广泛。
r语言kmodes_聚类分析——k-means算法及R语言实现相关推荐
- kmeans改进 matlab,基于距离函数的改进k―means 算法
摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...
- k means算法C语言伪代码,K均值算法(K-Means)
1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...
- k近邻算法原理c语言,实验二 K-近邻算法及应用
作业信息 一.[实验目的] 理解K-近邻算法原理,能实现算法K近邻算法: 掌握常见的距离度量方法: 掌握K近邻树实现算法: 针对特定应用场景及数据,能应用K近邻解决实际问题. 二.[实验内容] 实现曼 ...
- 判断魔方阵c语言程序设计_魔方阵算法及C语言实现
1 魔方阵概念 2填充的,每一行.每一列.对角线之和均相等的方阵,阶数n = 3,4,5-.魔方阵也称为幻方阵. 例如三阶魔方阵为: 魔方阵有什么的规律呢? 魔方阵分为奇幻方和偶幻方.而偶幻方又分为是 ...
- 分类算法——K近邻算法及其R实现
原理:已知样本集中每一个数据与所属分类的对应关系,输入没有标签的新数据后,将新数据与训练集的数据对应特征进行比较,找出"距离"最近的k(通常k<20)数据,选择这k个数据中出 ...
- python 聚类分析 k means
Kmeans 是一种动态聚类方法,其基本思想是:首先随机选取 K 个点作为初始凝聚点,按照距离最近原则划分为 K 类:然后重新计算 K 个类的重心作为新的凝聚点,再按照距离最近原则重新分类:重复这一过 ...
- 最短路径迪杰斯特拉算法 c语言,Dijkstra第K最短路径算法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //运筹学之最短路径 #include #include #define M 99999 int main() { int G[100][100]; in ...
- 滑动窗口滤波 c语言,关于中值滤波算法 以及C语言实现
1.什么是中值滤波? 中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护 ...
- lfu算法实现c语言_哈希查找算法(C语言实现)
上一节介绍了有关哈希表及其构造过程的相关知识,本节将介绍如何利用哈希表实现查找操作.在哈希表中进行查找的操作同哈希表的构建过程类似,其具体实现思路为:对于给定的关键字 K,将其带入哈希函数中,求得与该 ...
最新文章
- 腾讯云主机安全防护(云镜卸载)--/usr/local/qcloud/YunJing/YDEyes/YDService
- 数列分块入门2(区间小于c的个数)
- [C#参考]锁定lock
- resultSet.next() 位置处报错:java.lang.OutOfMemoryError: Java heap space
- shell脚本学习(3)文件判断
- 在Vue项目中引入echarts图表的方法(引入cdn)
- 高等代数--线性方程组
- k3梅林和官改哪个稳定_要功能还是要稳定 — 斐讯 K3 由LEDE 转战官改ROOT版
- 最小平方误差算法(LMSE) python实现
- 一张图看懂零维到十维空间
- Oralce ERP中AP模块Vender银行信息查询语句
- 【转】如何成为一名黑客--Eric Steven Raymond
- 36岁大数据人被中台问倒,没点架构思维,连面试都过不了?
- Puzzle(自认为是模拟)
- 我的博客在百度:http://hi.baidu.com/sunmoonzhangli
- 58集团2017校招(第一次正规的笔试)
- shell脚本之sed编辑器
- 2018最新(传智播客)黑马WEB前端36期全套
- 链表-单向链表的实现
- 《淘宝店铺设计装修一册通》一2.6 光影魔术手——简单方便的修图工具