今更欠損値対応:mlr
今更欠損値対応:mlr
欠損値対応
TREEベースのアルゴリズムでモデルを構築することが多いので欠損値対応は必要ないと思っていた。 今回はモデルを構築する前にクラスタリングすることにしてkmeansのため欠損値対応が必要になった。
平均値に置換
難しいことをしたいわけではなく、単純に平均値に置換したい。 平均値に置換するのは良い方法ではないみたいだけどわかりやすい。
欠損値対応のパッケージ
毎回、コードを書くのは大変なのでパッケージで対応したい。 miやmiceはもっと小難しいことをしているみたいで平均値置換にむいてない?
欠損値対応
サンプルコード
# https://mlr-org.github.io/mlr-tutorial/release/html/create_imputation/index.html
library(mlr)
## Loading required package: BBmisc
## Loading required package: ggplot2
## Loading required package: ParamHelpers
data(airquality)
summary(airquality)
## Ozone Solar.R Wind Temp
## Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00
## 1st Qu.: 18.00 1st Qu.:115.8 1st Qu.: 7.400 1st Qu.:72.00
## Median : 31.50 Median :205.0 Median : 9.700 Median :79.00
## Mean : 42.13 Mean :185.9 Mean : 9.958 Mean :77.88
## 3rd Qu.: 63.25 3rd Qu.:258.8 3rd Qu.:11.500 3rd Qu.:85.00
## Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00
## NA's :37 NA's :7
## Month Day
## Min. :5.000 Min. : 1.0
## 1st Qu.:6.000 1st Qu.: 8.0
## Median :7.000 Median :16.0
## Mean :6.993 Mean :15.8
## 3rd Qu.:8.000 3rd Qu.:23.0
## Max. :9.000 Max. :31.0
##
imp <- impute(
airquality,
cols = list(
Ozone = imputeMean(),
Solar.R = imputeMean()
)
)
head(imp$data, 10)
## Ozone Solar.R Wind Temp Month Day
## 1 41.00000 190.0000 7.4 67 5 1
## 2 36.00000 118.0000 8.0 72 5 2
## 3 12.00000 149.0000 12.6 74 5 3
## 4 18.00000 313.0000 11.5 62 5 4
## 5 42.12931 185.9315 14.3 56 5 5
## 6 28.00000 185.9315 14.9 66 5 6
## 7 23.00000 299.0000 8.6 65 5 7
## 8 19.00000 99.0000 13.8 59 5 8
## 9 8.00000 19.0000 20.1 61 5 9
## 10 42.12931 194.0000 8.6 69 5 10
str(imp)
## List of 2
## $ data:'data.frame': 153 obs. of 6 variables:
## ..$ Ozone : num [1:153] 41 36 12 18 42.1 ...
## ..$ Solar.R: num [1:153] 190 118 149 313 186 ...
## ..$ Wind : num [1:153] 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
## ..$ Temp : int [1:153] 67 72 74 62 56 66 65 59 61 69 ...
## ..$ Month : int [1:153] 5 5 5 5 5 5 5 5 5 5 ...
## ..$ Day : int [1:153] 1 2 3 4 5 6 7 8 9 10 ...
## $ desc:List of 9
## ..$ target : chr(0)
## ..$ features : chr [1:6] "Ozone" "Solar.R" "Wind" "Temp" ...
## ..$ lvls : Named list()
## ..$ impute :List of 2
## .. ..$ Ozone :List of 2
## .. .. ..$ impute:function (data, target, col, const)
## .. .. ..$ args : num 42.1
## .. ..$ Solar.R:List of 2
## .. .. ..$ impute:function (data, target, col, const)
## .. .. ..$ args : num 186
## ..$ dummies : chr(0)
## ..$ dummy.type : chr "factor"
## ..$ force.dummies : logi FALSE
## ..$ impute.new.levels : logi TRUE
## ..$ recode.factor.levels: logi TRUE
## ..- attr(*, "class")= chr "ImputationDesc"
summary(imp$data)
## Ozone Solar.R Wind Temp
## Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00
## 1st Qu.: 21.00 1st Qu.:120.0 1st Qu.: 7.400 1st Qu.:72.00
## Median : 42.13 Median :194.0 Median : 9.700 Median :79.00
## Mean : 42.13 Mean :185.9 Mean : 9.958 Mean :77.88
## 3rd Qu.: 46.00 3rd Qu.:256.0 3rd Qu.:11.500 3rd Qu.:85.00
## Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00
## Month Day
## Min. :5.000 Min. : 1.0
## 1st Qu.:6.000 1st Qu.: 8.0
## Median :7.000 Median :16.0
## Mean :6.993 Mean :15.8
## 3rd Qu.:8.000 3rd Qu.:23.0
## Max. :9.000 Max. :31.0