【问题标题】:Facing issues with sparse.model.matrixsparse.model.matrix 面临的问题
【发布时间】:2020-07-09 23:45:39
【问题描述】:

我正在尝试输入由 30 个变量组成的数据,其中 10 个是因子变量。 我正在运行 xgboost 并尝试使用 sparse.model.matrix 函数对数据进行热编码,但出现错误显示为

"""contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]]) 中的错误: 对比只能应用于具有 2 个或更多级别的因子""" 你能告诉我如何克服这个错误

trainm <- sparse.model.matrix(pol ~.-1, data = train)

【问题讨论】:

    标签: r xgboost


    【解决方案1】:

    错误是由于只有一个级别的因素造成的。请看这个例子,对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])
    

    【讨论】:

    • 那么如果我删除一级变量代码会正常工作吗?
    • 是的。至少这是我的猜测,不知道你的数据。如果上述方法不适合您,您可以发布一个可重现的示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2021-10-02
    • 2013-05-18
    • 1970-01-01
    相关资源
    最近更新 更多