R语言离群值的检测

R ldboyghg 17℃ 0评论
r语言离群值的检测主要方法是
1):单变量离群值的检测,利用函数boxplot.stats()
      如果点小于一分位点-四分位距 或者点的值大于三分位+四分位距 ,认为其是离群值。
     在箱型图中可以明显的看到离群值的存在。
    set.seed(3147)
   x <- rnorm(100)
  summary(x)
 out1 <- boxplot.stats(x)
 out <- boxplot.stats(x)$out
 boxplot(x)
1
 plot(x)
 out.point <- matrix(c(which(x %in% out), x[which(x %in% out)]), ncol = 2)
#将特殊点标识
 points(out.point, col =’red’, pch = 4)
2
#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)
  3

转载请注明:生命不息,奋斗不止 » R语言离群值的检测

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址