R model.matrix setup - PullRequest
       4

R model.matrix setup

4 голосов
/ 13 февраля 2012

У меня есть набор данных, для которого я использую функцию model.matrix() для преобразования факторных переменных в фиктивные переменные. Мои данные содержат 10 таких столбцов, каждый из которых имеет 3 уровня (2,3,4), и я создаю фиктивные переменные для каждого из них в отдельности.

xFormData <- function(dataset){
    mm0 <- model.matrix(~ factor(dataset$type) , data=dataset)
    mm1 <- model.matrix(~ factor(dataset$type_last1), data = dataset)
    mm2 <- model.matrix(~ factor(dataset$type_last2), data = dataset)
    mm3 <- model.matrix(~ factor(dataset$type_last3), data = dataset)
    mm4 <- model.matrix(~ factor(dataset$type_last4), data = dataset)
    mm5 <- model.matrix(~ factor(dataset$type_last5), data = dataset)
    mm6 <- model.matrix(~ factor(dataset$type_last6), data = dataset)
    mm7 <- model.matrix(~ factor(dataset$type_last7), data = dataset)
    mm8 <- model.matrix(~ factor(dataset$type_last8), data = dataset)
    mm9 <- model.matrix(~ factor(dataset$type_last9), data = dataset)
    mm10 <- model.matrix(~ factor(dataset$type_last10), data = dataset)

    dataset <- cbind(dataset, mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7, mm8, mm9, mm10)

dataset
}

Мне интересно, является ли это неправильной процедурой, так как после запуска randomForest для данных и построения графика важности переменной он отображал разные столбцы фиктивных переменных по отдельности. Так, скажем, столбцы 61-63 были 3 фиктивными переменными для столбца 10, randomForest видит столбец 62 сам по себе как важный предиктор.

У меня есть 2 вопроса:

1) Это нормально?

2) Если нет, как я могу сгруппировать фиктивные переменные, чтобы rf знал, что они вместе?

1 Ответ

3 голосов
/ 13 февраля 2012

Это нормально, и в любом случае происходит за кадром, если вы оставили факторы как факторы.Различные уровни фактора являются различными функциями для большинства целей машинного обучения.Подумайте о случайном примере, подобном test outcome ~ school: Возможно, посещение школы A очень предсказуемо, пройдете ли вы тест или нет, но не школу B или школу C. Тогда функция школы A будет полезна, но не другие.

Это описано в одном из caret документов виньетки: http://cran.r -project.org / web / packages / caret / vignettes / caretMisc.pdf

Кроме того, набор данных cars, включенный в caret, должен быть полезным примером.Он содержит 2 фактора - «производитель» и «тип автомобиля», которые были фиктивно закодированы в ряд числовых функций для целей машинного обучения.

data(cars, package='caret')
head(cars)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...