我正在尝试输入包含30个变量的数据,其中10个是因子变量。 我正在运行xgboost并尝试使用sparse.model.matrix函数对数据进行热编码,但是显示为
时出现错误“”“
contrasts<-
(*tmp*
中的错误,值= contr.funs [1 + isOF [nn]]): 对比度只能应用于具有2个或更多级别的因素“”“ 你能让我知道如何克服这个错误吗?
trainm <- sparse.model.matrix(pol ~.-1, data = train)
答案 0 :(得分:0)
该错误是由于只有一个级别的因素引起的。请参见以下示例,该示例与sparse.model.matrix
包中实现的Matrix
的说明略有修改:
library(Matrix)
dd <- data.frame(a = gl(3,4), b = gl(4,1,12), c = gl(1,1, 12))
sparse.model.matrix(~ ., dd)
这会引发您的错误,因为c仅是一个因子:
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
对比度只能应用于2个或更多级别的因子
我不知道您的原始数据,但是像这样可以通过将任何因素扔掉一个级别来解决。
sparse.model.matrix(~.,dd[,sapply(dd, nlevels) > 1])