當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。