为 R 中的前 N 个值子集命名数字
Subsetting a named numeric for top N values in R
我有一个很大的数字对象,它是隔离森林模型的输出。
我希望对模型的输出进行子集化以找到前 N 个异常值。使用 here 中的示例代码,我可以找到最大的离群值,但我希望找到不止一个离群值
我的数据如下:
if (!require("pacman")) install.packages("pacman")
pacman::p_load(isotree)
set.seed(1)
m <- 100
n <- 2
X <- matrix(rnorm(m * n), nrow = m)
# ADD CLEAR OUTLIER TO THE DATA
X <- rbind(X, c(3, 3))
# TRAIN AN ISOLATION FOREST MODEL
iso <- isolation.forest(X, ntrees = 10, nthreads = 1)
# MAKE A PREDICTION TO SCORE EACH ROW
pred <- predict(iso, X)
最大离群值可以使用以下方法进行子集化
X[which.max(pred), ]
dplyr::slice_max
似乎与我的大型数字对象不兼容。
任何可以让我对数据进行子集化以找到前 N 个异常值的建议都将不胜感激。
这是否解决了您的问题?
library(tidyverse)
#install.packages("isotree")
library(isotree)
set.seed(1)
m <- 100
n <- 2
X <- matrix(rnorm(m * n), nrow = m)
# ADD CLEAR OUTLIER TO THE DATA
X <- rbind(X, c(3, 3))
# TRAIN AN ISOLATION FOREST MODEL
iso <- isolation.forest(X, ntrees = 10, nthreads = 1)
# MAKE A PREDICTION TO SCORE EACH ROW
pred <- predict(iso, X)
X[which.max(pred), ]
#> [1] 3 3
# Perhaps this?
data.frame(X, "pred" = pred) %>%
slice_max(order_by = pred, n = 3)
#> X1 X2 pred
#> 1 3.000000 3.0000000 0.7306871
#> 2 -1.523567 -1.4672500 0.6496666
#> 3 -2.214700 -0.6506964 0.5982211
# Or maybe this?
data.frame(X, "pred" = pred) %>%
slice_max(order_by = X1, n = 3)
#> X1 X2 pred
#> 1 3.000000 3.0000000 0.7306871
#> 2 2.401618 0.4251004 0.5014570
#> 3 2.172612 0.2075383 0.4811756
由 reprex package (v2.0.1)
创建于 2022-04-06
我有一个很大的数字对象,它是隔离森林模型的输出。
我希望对模型的输出进行子集化以找到前 N 个异常值。使用 here 中的示例代码,我可以找到最大的离群值,但我希望找到不止一个离群值
我的数据如下:
if (!require("pacman")) install.packages("pacman")
pacman::p_load(isotree)
set.seed(1)
m <- 100
n <- 2
X <- matrix(rnorm(m * n), nrow = m)
# ADD CLEAR OUTLIER TO THE DATA
X <- rbind(X, c(3, 3))
# TRAIN AN ISOLATION FOREST MODEL
iso <- isolation.forest(X, ntrees = 10, nthreads = 1)
# MAKE A PREDICTION TO SCORE EACH ROW
pred <- predict(iso, X)
最大离群值可以使用以下方法进行子集化
X[which.max(pred), ]
dplyr::slice_max
似乎与我的大型数字对象不兼容。
任何可以让我对数据进行子集化以找到前 N 个异常值的建议都将不胜感激。
这是否解决了您的问题?
library(tidyverse)
#install.packages("isotree")
library(isotree)
set.seed(1)
m <- 100
n <- 2
X <- matrix(rnorm(m * n), nrow = m)
# ADD CLEAR OUTLIER TO THE DATA
X <- rbind(X, c(3, 3))
# TRAIN AN ISOLATION FOREST MODEL
iso <- isolation.forest(X, ntrees = 10, nthreads = 1)
# MAKE A PREDICTION TO SCORE EACH ROW
pred <- predict(iso, X)
X[which.max(pred), ]
#> [1] 3 3
# Perhaps this?
data.frame(X, "pred" = pred) %>%
slice_max(order_by = pred, n = 3)
#> X1 X2 pred
#> 1 3.000000 3.0000000 0.7306871
#> 2 -1.523567 -1.4672500 0.6496666
#> 3 -2.214700 -0.6506964 0.5982211
# Or maybe this?
data.frame(X, "pred" = pred) %>%
slice_max(order_by = X1, n = 3)
#> X1 X2 pred
#> 1 3.000000 3.0000000 0.7306871
#> 2 2.401618 0.4251004 0.5014570
#> 3 2.172612 0.2075383 0.4811756
由 reprex package (v2.0.1)
创建于 2022-04-06