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

思路:首先,通过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()

猜你喜欢

转载自www.cnblogs.com/xiaomingzaixian/p/9271607.html
今日推荐