[未完待续……]
1.辅助信息
包名称:isotree
包的版本:0.5.14
网址:英文R文档
2.孤立森林原理
3.基本描述
孤立森林算法最初是为了检测离群值(有时称为异常值)的算法。在基本孤立森林的基础上,还形成了速度更快的SCiForest算法、找到聚类离群值的FCF算法。
4.句法
isolation.forest(
data,
sample_size = min(nrow(data), 10000L),
ntrees = 500,
ndim = min(3, ncol(data)),
ntry = 1,
categ_cols = NULL,
max_depth = ceiling(log2(sample_size)),
ncols_per_tree = ncol(data),
prob_pick_pooled_gain = 0,
prob_pick_avg_gain = 0,
prob_pick_full_gain = 0,
prob_pick_dens = 0,
prob_pick_col_by_range = 0,
prob_pick_col_by_var = 0,
prob_pick_col_by_kurt = 0,
min_gain = 0,
missing_action = ifelse(ndim > 1, "impute", "divide"),
new_categ_action = ifelse(ndim > 1, "impute", "weighted"),
categ_split_type = ifelse(ndim > 1, "subset", "single_categ"),
all_perm = FALSE,
coef_by_prop = FALSE,
recode_categ = FALSE,
weights_as_sample_prob = TRUE,
sample_with_replacement = FALSE,
penalize_range = FALSE,
standardize_data = TRUE,
scoring_metric = "depth",
fast_bratio = TRUE,
weigh_by_kurtosis = FALSE,
coefs = "uniform",
assume_full_distr = TRUE,
build_imputer = FALSE,
output_imputations = FALSE,
min_imp_obs = 3,
depth_imp = "higher",
weigh_imp_rows = "inverse",
output_score = FALSE,
output_dist = FALSE,
square_dist = FALSE,
sample_weights = NULL,
column_weights = NULL,
seed = 1,
use_long_double = FALSE,
nthreads = parallel::detectCores()
)
内容 | 含义 | 补充说明 |
---|---|---|
data | 用于建模的数据 | 格式要求:data.frame,data.table,tibble |
sample_size | 构建每个二叉树的数据子样本的样本量 | 部分文献推荐值是256,但本算法包创作者的默认值是data(用于建模的数据)的行数。如果设置为NULL,或者0-1之间的数值,会有其他的含义 |
ntrees | 建模时二叉树的数量 | 推荐值是100(后面的案例中一般取100,其他资料中也是取100),默认值是10。取值大小与数据的列数、是否存在分类变量、分类变量的分类数量等多个因素有关。取值是否合理,可以查看结果中的分数值分布是否合理 |
ndim | 在分叉时考虑的列的数量 | 取1,建立单变量模型(single-variable model)。取值大于1,本文档称为扩展模型(extended model)。有资料推荐值取2或3。如果取NULL,算法认为取全部列。 |
prob_pick_pooled_gain | 是否让概率阈值取使a pooled standard deviation gain criterion最大的值 | 取0或1。 |
prob_pick_avg_gain | 在根据特征划分数据时,阈值是否是使平均标准差最大化的阈值。 | 取0或1。 |
5.案例
案例1:检测一个明显的离群值
伪代码:
生成2个特征的(随机值)数据
加入一个明显的离散值(行)
拟合模型
计算结果
显示结果
# 生成2个特征的数据
library(isotree)
set.seed(1)
m <- 100
n <- 2
X <- matrix(rnorm(m * n), nrow = m)
# 加入一个明显的离散值
X <- rbind(X, c(3, 3))
# 拟合模型
iso <- isolation.forest(X, ntrees = 10, nthreads = 1)
# 计算结果
pred <- predict(iso, X)
# 显示结果
cat("Point with highest outlier score: ",
X[which.max(pred), ], "\n")