当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R recipes step_impute_knn 通过 k 最近邻进行插补


step_impute_knn() 创建配方步骤的规范,该步骤将使用最近邻居来估算缺失数据。

用法

step_impute_knn(
  recipe,
  ...,
  role = NA,
  trained = FALSE,
  neighbors = 5,
  impute_with = imp_vars(all_predictors()),
  options = list(nthread = 1, eps = 1e-08),
  ref_data = NULL,
  columns = NULL,
  skip = FALSE,
  id = rand_id("impute_knn")
)

step_knnimpute(
  recipe,
  ...,
  role = NA,
  trained = FALSE,
  neighbors = 5,
  impute_with = imp_vars(all_predictors()),
  options = list(nthread = 1, eps = 1e-08),
  ref_data = NULL,
  columns = NULL,
  skip = FALSE,
  id = rand_id("impute_knn")
)

参数

recipe

一个菜谱对象。该步骤将添加到此配方的操作序列中。

...

一个或多个选择器函数用于选择要估算的变量。当与 imp_vars 一起使用时,这些点指示哪些变量用于预测每个变量中的缺失数据。有关更多详细信息,请参阅selections()

role

由于没有创建新变量,因此此步骤未使用。

trained

指示预处理数量是否已估计的逻辑。

neighbors

邻居的数量。

impute_with

调用 imp_vars 来指定使用哪些变量来插补变量,这些变量可以包含由逗号或不同选择器分隔的特定变量名称(请参阅 selections() )。如果某个列同时包含在要插补的列表和插补预测变量的列表中,则该列将从后者中删除,并且不会用于插补本身。

options

要传递给 gower::gower_topn() 的命名选项列表。当前可用选项为 nthreadeps

ref_data

一组数据,将反映在此插补步骤之前完成的数据预处理。在 prep() 训练该步骤之前,这是 NULL

columns

所选变量名称的字符串。该字段是一个占位符,一旦使用 prep() 就会被填充。

skip

一个合乎逻辑的。当bake() 烘焙食谱时是否应该跳过此步骤?虽然所有操作都是在 prep() 运行时烘焙的,但某些操作可能无法对新数据进行(例如处理结果变量)。使用skip = TRUE时应小心,因为它可能会影响后续操作的计算。

id

该步骤特有的字符串,用于标识它。

recipe 的更新版本,将新步骤添加到任何现有操作的序列中。

细节

该步骤使用训练集来估算任何其他数据集。唯一可用的距离函数是高尔距离,它可用于标称数据和数值数据的混合。

一旦确定了最近邻,该众数将用于预测名义变量,而平均值将用于数值数据。请注意,如果基础数据是整数,平均值也会转换为整数。

请注意,如果要估算的变量也在 impute_with 中,则该变量将被忽略。

如果大多数(或全部)插补变量也缺失,则插补后可能仍会出现缺失值。

recipes 0.1.16 开始,该函数名称从 step_knnimpute() 更改为 step_impute_knn()

整理

当您tidy()此步骤时,将返回包含列terms(用于插补的选择器或变量)、predictors(用于插补的变量)和neighbors 的小标题。

调整参数

此步骤有 1 个调整参数:

  • neighbors : # 最近邻居(类型:整数,默认值:5)

箱重

底层操作不允许使用案例权重。

参考

Gower, C. (1971)“一般相似系数及其一些属性”,生物识别学,857-871。

也可以看看

例子

library(recipes)
data(biomass, package = "modeldata")

biomass_tr <- biomass[biomass$dataset == "Training", ]
biomass_te <- biomass[biomass$dataset == "Testing", ]
biomass_te_whole <- biomass_te

# induce some missing data at random
set.seed(9039)
carb_missing <- sample(1:nrow(biomass_te), 3)
nitro_missing <- sample(1:nrow(biomass_te), 3)

biomass_te$carbon[carb_missing] <- NA
biomass_te$nitrogen[nitro_missing] <- NA

rec <- recipe(
  HHV ~ carbon + hydrogen + oxygen + nitrogen + sulfur,
  data = biomass_tr
)

ratio_recipe <- rec %>%
  step_impute_knn(all_predictors(), neighbors = 3)
ratio_recipe2 <- prep(ratio_recipe, training = biomass_tr)
imputed <- bake(ratio_recipe2, biomass_te)

# how well did it work?
summary(biomass_te_whole$carbon)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   27.80   44.24   47.30   47.96   49.00   79.34 
cbind(
  before = biomass_te_whole$carbon[carb_missing],
  after = imputed$carbon[carb_missing]
)
#>      before    after
#> [1,]  46.83 47.43000
#> [2,]  47.80 47.53333
#> [3,]  46.40 46.21000

summary(biomass_te_whole$nitrogen)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   0.010   0.295   0.690   1.092   1.450   4.790 
cbind(
  before = biomass_te_whole$nitrogen[nitro_missing],
  after = imputed$nitrogen[nitro_missing]
)
#>      before      after
#> [1,]   1.24 0.59333333
#> [2,]   0.30 0.92333333
#> [3,]   0.06 0.04666667

tidy(ratio_recipe, number = 1)
#> # A tibble: 1 × 4
#>   terms            predictors neighbors id              
#>   <chr>            <chr>          <dbl> <chr>           
#> 1 all_predictors() NA                 3 impute_knn_iyPXM
tidy(ratio_recipe2, number = 1)
#> # A tibble: 20 × 4
#>    terms    predictors neighbors id              
#>    <chr>    <chr>          <dbl> <chr>           
#>  1 carbon   hydrogen           3 impute_knn_iyPXM
#>  2 carbon   oxygen             3 impute_knn_iyPXM
#>  3 carbon   nitrogen           3 impute_knn_iyPXM
#>  4 carbon   sulfur             3 impute_knn_iyPXM
#>  5 hydrogen carbon             3 impute_knn_iyPXM
#>  6 hydrogen oxygen             3 impute_knn_iyPXM
#>  7 hydrogen nitrogen           3 impute_knn_iyPXM
#>  8 hydrogen sulfur             3 impute_knn_iyPXM
#>  9 oxygen   carbon             3 impute_knn_iyPXM
#> 10 oxygen   hydrogen           3 impute_knn_iyPXM
#> 11 oxygen   nitrogen           3 impute_knn_iyPXM
#> 12 oxygen   sulfur             3 impute_knn_iyPXM
#> 13 nitrogen carbon             3 impute_knn_iyPXM
#> 14 nitrogen hydrogen           3 impute_knn_iyPXM
#> 15 nitrogen oxygen             3 impute_knn_iyPXM
#> 16 nitrogen sulfur             3 impute_knn_iyPXM
#> 17 sulfur   carbon             3 impute_knn_iyPXM
#> 18 sulfur   hydrogen           3 impute_knn_iyPXM
#> 19 sulfur   oxygen             3 impute_knn_iyPXM
#> 20 sulfur   nitrogen           3 impute_knn_iyPXM
源代码:R/impute_knn.R

相关用法


注:本文由纯净天空筛选整理自Max Kuhn等大神的英文原创作品 Impute via k-nearest neighbors。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。