2015-12-04 2 views
-1

Предположим, у меня есть набор данных с несколькими столбцами, а один из них - gender. Насколько я понимаю, knnImputation() со стандартными параметрами вычисляет метрику, где все переменные обрабатываются одинаково, в то время как я хочу создать какое-то правило, когда, например, наличие того же gender настоятельно рекомендуется при поиске соседей (например, gender имеет более сильное влияние на общий вес или только строки с одним и тем же полу выбраны (это можно сделать путем расщепления, а затем повторной сборки наборов для обучения и тестирования, но, возможно, существует более простой способ)).R: предпочтения взвешенного вменения/вменения

Я вижу, что kNNImpute() имеет параметр impute.fn для функции вменения, а knnImputation() имеет meth для метода. Как создать такое правило, которое будет гибким и простым в редактировании (например, написано как функция чего-то подобного)?

+0

Какой пакет вы используете /, где делает 'knnImputation «Из чего? –

+0

Использование выбора переменных широко обсуждается в литературе (особенно в отношении кластеризации). Но я не знаю многих ** реализованных ** методов расчета, которые его используют. [Tutz and Ramzan 2015] (http://www.sciencedirect.com/science/article/pii/S0167947315001061), например, не имеют реализации своего метода, насколько мне известно. –

+0

@Alex Я использую 'knnImputation()' из '{DMwR}' или 'kNNImpute()' из '{imputation}', но я могу использовать что-нибудь еще, если у него есть метод, который я хочу. Все, что я хочу, это либо манипулировать весом для одной переменной (пол), либо выбирать из линий, имеющих только один и тот же пол. – Slowpoke

ответ

1

Это не будет делать переменную выбор, но он будет приписывать используя Knn используя только те строки, которые имеют соответствующий пол g как вы предлагаете в комментариях:

Sys.setenv("PKG_CXXFLAGS"="-std=c++0x") # needed for the lambda functions in Rcpp 
# install/load package, create example data 
devtools::install_github("alexwhitworth/imputation") 
library(imputation) 

set.seed(1345) 
g <- sample(c("M", "F"), 100, replace=T) 
a <- matrix(rnorm(1000), ncol=10) 
a[a>1.5] <- NA 
df <- data.frame(a,g) 

# subset by gender, exclude character column from kNN (which doesn't 
# handle character variables) 
df_f <- kNN_impute(df[df$g == "F", 1:10], k= 3, q= 2, check_scale = FALSE, parallel= FALSE) 
df_m <- kNN_impute(df[df$g == "M", 1:10], k= 3, q= 2, check_scale = FALSE, parallel= FALSE) 

# recombine. Can use rownames as key 
df2 <- data.frame(rbind(df_f$x, df_m$x)) 
df2 <- df2[order(as.integer(rownames(df2))),] 
df2$g <- df$g 
+0

Спасибо! Странно, что такая вещь (выбор переменной) еще не реализована. – Slowpoke

+0

Если я не услышу ответа от Тутца и Рамзана, я буду использовать выбор переменных в своем пакете ... Это не было приоритетом. В настоящее время выполнение kNN в масштабе имеет более высокий приоритет, следовательно, распараллеливание, использование Rcpp/C++ и возможность использования навесов. –

+0

#Alex Спасибо, моя идея заключалась в том, что если мы возьмем, например, набор данных Titanic (или некоторые данные о продажах и т. Д.), Мы можем предположить, что женщины с большей вероятностью выживут (или купят что-нибудь хорошее и т. Д.), Поэтому мы должны дать этот переменный дополнительный вес, поэтому для вменения предпочтительны записи с одним и тем же полу, а другой пол может быть выбран, если другие переменные действительно близки. Параметр может быть выбран путем выполнения вменения и создания модели для другой метрики, а затем сравнения ошибок выборки. Поэтому я попытался проверить такой подход и проверить его производительность. – Slowpoke

Смежные вопросы