R语言离群值的检测

标签:
r语言离群值聚类 |
分类: DataMining |
r语言离群值的检测主要方法是
如果点小于一分位点-四分位距 或者点的值大于三分位+四分位距
,认为其是离群值。
在箱型图中可以明显的看到离群值的存在。
set.seed(3147)
x <- rnorm(100)
summary(x)
out1 <- boxplot.stats(x)
out <- boxplot.stats(x)$out
boxplot(x)
plot(x)
out.point <- matrix(c(which(x %in% out),
x[which(x %in% out)]), ncol = 2)
points(out.point, col ='red', pch = 4)
1):单变量离群值的检测,利用函数boxplot.stats()
#将特殊点标识
#2. 基于局部离群因子 lof:local outlier factor
library(lattice)
library(grid)
library(DMwR)
iris <- read.csv("D:\\Program Files\\R\\work\\iris.csv",
header = T)
nrow(iris)
names(iris)
iris2 <- iris[, -5]
outlier.scores <- lofactor(iris2, k = 5)
plot(outlier.scores)
plot(density(outlier.scores))
#选择前5
outliers <- order(outlier.scores,decreasing=T)[1:5]
iris2[outliers, ]
n <- nrow(iris2)
n
labels <- 1:n
labels
labels[-outliers] <- "."
biplot(iris2)
pch <- rep(".", n)
pch[outliers ] <- "+"
col <- rep("black", n)
col[outliers] <- "red"
pairs(iris2, pch=pch, col=col)
#3.通过聚类
计算点和所属类中心点的距离
iris2<-iris[, -5]
kmeans.result <- kmeans(iris2, 3)
kmeans.result$centers
#每个点所属的类中心
centers <- kmeans.result$centers[kmeans.result$cluster,
]
distances <- sqrt(rowSums((iris2 - centers)^2))
outliers<- order(distances, decreasing=T)[1:5]
names(iris2)
plot(iris2[, 1:2], pch="o", col = kmeans.result$cluster)
#类的中心点
points(kmeans.result$centers[, 1:2], col=1:3, pch =8)
#离群点
points(iris2[outliers, 1:2], pch ="+", col =4)