R聚类

来源:互联网 发布:什么是数据库规范化 编辑:程序博客网 时间:2024/05/18 02:10
聚类
关键度量指标:距离
距离的定义
常用距离(薛毅书P469)
绝对值距离  manhattan
欧氏距离Euclide  euclidean
闵可夫斯基距离
切比雪夫距离Chebyshev  maximum
马氏距离
Lance和Williams距离  Lance   canberra   Williams  minkowski
离散变量的距离计算
dist( )函数
x1=c(1,2,3,4,5)
x2=c(3,2,1,4,6)
x3=c(5,3,5,6,2)
x=data.frame(x1,x2,x3)
dist(x,method = "euclidean")
数据中心化且标准化
scale(x, center = TRUE, scale = TRUE)
极差标准化(薛毅书P473)
sweep(x, 2, apply(x, 2, mean))


对变量进行分类的指标:相似系数
距离:对样本进行分类
相似系数:对变量进行分类
常用相似系数:夹角余弦,相关系数(薛毅书P475)


(凝聚的)层次聚类法 思想
1 开始时,每个样本各自作为一类
2 规定某种度量作为样本之间的距离及类与类之间的距离,并计算之
3 将距离最短的两个类合并为一个新类
4 重复2-3,即不断合并最近的两个类,每次减少一个类,直至所有样本被合并为一类
各种类与类之间距离计算的方法 (薛毅书P476)
最短距离法
最长距离法
中间距离法
类平均法
重心法
离差平方和法
层次聚类hclust( )函数
x<-c(1,2,6,8,11)
dim(x)<-c(5,1)
d<-dist(x)
hc1<-hclust(d,"single")
hc2<-hclust(d,"complete")
hc3<-hclust(d,"median")
hc4<-hclust(d,"mcquitty")
#绘出谱系图
opar<-par(mfrow=c(2,2))
plot(hc1,hang=-1)
plot(hc2,hang=-1)
plot(hc3,hang=-1)
plot(hc4,hang=-1)
par(opar)


各种谱系图画法
as.dendrogram( )函数(薛毅书P482)
dend1<-as.dendrogram(hc1)
opar <- par(mfrow = c(2, 2),mar = c(4,3,1,2))
plot(dend1)
plot(dend1, nodePar=list(pch = c(1,NA),
cex=0.8, lab.cex=0.8),
type = "t", center=TRUE)
plot(dend1, edgePar=list(col = 1:2, lty = 2:3),
dLeaf=1, edge.root = TRUE)
plot(dend1, nodePar=list(pch = 2:1,
cex=.4*2:1, col=2:3),
horiz=TRUE)
par(opar)
分多少个类
rect.hclust( )函数
plot(hc1,hang=-1)
rect.hclust(hc1,k=2)


K-means聚类
x=iris[,1:4]
km=kmeans(x,3)
km
K-means算法的优缺点
有效率,而且不容易受初始值选择的影响
不能处理非球形的簇
不能处理不同尺寸,不同密度的簇
离群值可能有较大干扰(因此要先剔除)
基于有代表性的点的技术:K中心聚类法
算法步骤
1 随机选择k个点作为“中心点”
2 计算剩余的点到这k个中心点的距离,每个点被分配到最近的中心点组成聚簇
3 随机选择一个非中心点Or,用它代替某个现有的中心点Oj,计算这个代换的总代价S
4 如果S<0,则用Or代替Oj,形成新的k个中心点集合
5 重复2,直至中心点集合不发生变化
K中心法的实现:PAM
PAM使用离差平方和来计算成本S(类似于ward距离的计算)
R语言的cluster包实现了PAM
K中心法的优点:对于“噪音较大和存在离群值的情况,K中心法更加健壮,不像
Kmeans那样容易受到极端数据影响
K中心法的缺点:执行代价更高
library(cluster)
x=iris[,1:4]
kc=pam(x,3)
kc
基于密度的方法: DBSCAN
DBSCAN = Density-Based Spatial Clustering of Applications with Noise
本算法将具有足够高密度的区域划分为簇,并可以发现任何形状的聚类
r-邻域:给定点半径r内的区域
核心点:如果一个点的r-邻域至少包含最少数目M个点,则称该点为核心点
直接密度可达:如果点p在核心点q的r-邻域内,则称p是从q出发可以直接密度可达
如果存在点链p1,p2, …, pn,p1=q,pn=p,pi+1是从pi关于r和M直接密度可达,则称点p
是从q关于r和M密度可达的
如果样本集D中存在点o,使得点p、 q是从o关于 r和M密度可达的,那么点p、 q是关于r
和M密度相连的
DBSCAN
1 指定合适的 r 和 M
2 计算所有的样本点,如果点p的r邻域里有超过M个点,则创建一个以p为核心点的新簇
3 反复寻找这些核心点直接密度可达(之后可能是密度可达)的点,将其加入到相应的簇,对于核心点发生“密度相连”状况的簇,给予合并
4 当没有新的点可以被添加到任何簇时,算法结束
DBSCAN算法描述
输入: 包含n个对象的数据库,半径e,最少数目MinPts;
输出:所有生成的簇,达到密度要求。
(1)Repeat
(2)从数据库中抽出一个未处理的点;
(3)IF抽出的点是核心点 THEN 找出所有从该点密度可达的对象,形成一个簇;
(4)ELSE 抽出的点是边缘点(非核心对象),跳出本次循环,寻找下一个点;
(5)UNTIL 所有的点都被处理。
DBSCAN对用户定义的参数很敏感,细微的不同都可能导致差别很大的结果,而参数的选择无规律可循,只能靠经验确定
孤立点检测
又称为异常检测,离群值检测等
 什么是孤立点?孤立点是一个观测值,它与其它观测值的差别如此之大,以至于怀疑
它是由不同的机制产生的
 孤立点的一些场景
1 网站日志中的孤立点,试图入侵者
2 一群学生中的孤立点,天才 or 白痴?
3 天气数据,灾害,极端天气
4 信用卡行为,试图欺诈者
5 低概率事件,接种疫苗后却发病的
6 实验误差或仪器和操作问题造成的错误数据 等等
统计方法
检测一元正态分布中的离群点,指出离均值标准差数
多元正态分布的离群值
判断点到分布中心的距离(马氏距离,why?)
基于邻近度的孤立点检测
选取合适的正整数k
计算每个点和前k个最近邻的平均距离,得到孤立度指标
如果孤立度超过预定阈值,则找到孤立点
基于聚类的孤立点检测
首先聚类所有的点
对某个待测点评估它属于某一簇的程度。方法是设定一目标函数(例如kmeans法时的
簇的误差平方和),如果删去此点能显著地改善此项目标函数,则可以将该点定位为
孤立点
0 0