R语言中基于聚类的离群点挖掘

本文介绍了一种使用K-means算法进行离群点检测的方法。首先利用K-means算法将数据集划分为多个簇,接着计算每个数据点到其最近簇中心的距离,并与预设阈值比较以判断是否为离群点。最后通过图表直观展示离群点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:首先,通过K-means算法将数据点划分为成若K个簇;然后计算每一个数据对象到最近簇的中心距离,来与离群点设置的阈值进行比较,以此来判别该数据对象是否是离群点。

1.读取数据

data<- read.csv(read_file,header = T)

2.K-meas聚类

# 设置聚类数
center_num <- 5
# 调用kmeans
km <- kmeans(data,center_num)

3.计算各样本数据到最近中心的距离(nrow=189261是样本记录个数,根据实际情况进行设置)

#各样本欧式距离
for(i in 1:center_num){
   distance <- data.frame(sqrt(rowSums((new_data-matrix(km$centers[i,],nrow=189261,ncol=center_num,byrow=T))^2)))
}
#欧氏距离最小值
y=apply(distance,1,min)

4.绘制离群点图

# 设置阈值为2.5
y_lable <- 2.5
sub=which(y>y_lable)
y1=y[-sub]
y2=y[sub]
plot(1:length(y),y,xlim=c(0,length(y)),xlab=paste("样本点","(dist=",y_lable,")",sep=""),ylab="欧氏距离",col="blue")
points(which(y>y_lable),y2,pch=19,col="red")
dev.off()

 

转载于:https://www.cnblogs.com/xiaomingzaixian/p/9271607.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值