2017-02-19 27 views
0

У меня есть много столбцов в фрейме данных с флагами «0» и «1». Они относятся к классу «integer», когда я импортирую dataframe.Xgboost - Нужно ли преобразовывать целые числа в коэффициенты, если они только 0 и 1

0 обозначает отсутствие, а 1 обозначает присутствие во всех столбцах.

мне нужно, чтобы преобразовать их в fators ли? [Факторы делают уровни 1 & 2 в то время как в настоящее время они почти одинаковы 0 & 1 хотя целые]

Я планирую позже использовать xgboost для построения прогнозной модели. Xgboost работает только с числовыми столбцами, поэтому, если я преобразовываю столбцы в коэффициент, тогда мне нужно будет однострочно закодировать их, чтобы преобразовать их в числовые.

(сторона вопрос: всегда ли мы должны отбросить один столбец, если мы делаем один горячий кодирования для удаления коллинеарности)

+0

Не правильный форум, чтобы спросить это. Вы можете попробовать [Cross Validated] (http://stats.stackexchange.com). –

+0

Спасибо, что сообщили мне. – Aman

+0

Я прошу отличить @ KarthikArumugham, это вопрос программирования, попадающий в сферу действия SO. – abhiieor

ответ

0

Короткий ответ: Зависит. Да, просто для лучшей интерпретации переменных. Нет, поскольку для переменных 0/1 целое число и коэффициенты одинаковы.

Если вы спросите мое личное мнение, то я больше отношусь к ДА; так как вы, скорее всего, также будете иметь некоторые категориальные переменные, которые либо имеют строковые значения, либо более 2 уровней или 2 целых уровня, отличных от 0 и 1. Во всех вышеупомянутых случаях переменные 0/1 integer и коэффициенты оба не равны. Только конкретный случай двоичных уровней 0/1; целочисленная переменная и факторы одинаковы. Таким образом, вы можете захотеть согласовать свою кодировку и даже захотите принять ее для случая 0/1.

Чтобы увидеть себя:

a <- c(1,2,1,2,1,2,5) 
c<-as.character(a) 
b<-as.factor(c) 
d<-as.integer(b) 

Здесь я просто играл с a вектор, который в конце концов дает мне:

> d 
[1] 1 2 1 2 1 2 3 

Так что, если вы не хотите, чтобы отладить почему значения меняются в дальнейшем используйте as.factor() от начала.

Ответ на вопрос: Да. Найдите model.matrix() и contrasts.arg для получения этого в R.

0

Ошибка указывает, что xgb.DMatrix принимает числовые значения, где данные были целыми.

Для преобразования данных в числовом использования

train[] <- lapply(train, as.numeric) 

, а затем использовать

xgb.DMatrix(data=data.matrix(train))