【问题标题】:L1 penalized regression fails to predict from modelL1 惩罚回归无法从模型中预测
【发布时间】:2016-10-19 16:51:05
【问题描述】:

这个问题可能过于具体,但我会重视在我的数据集上使用 predict 函数时可能出现的问题。

我正在使用的程序如下:

require(penalized)
# neg contains negative data
# pos contains positive data

现在,以下过程旨在构建可比较的(在正面和负面案例方面平衡)训练和验证数据集。

# 50% negative training set
negSamp <- neg %>% sample_frac(0.5) %>% as.data.frame()
# Negative validation set
negCompl <- neg[setdiff(row.names(neg),row.names(negSamp)),]
# 50% positive training set 
posSamp <- pos %>% sample_frac(0.5) %>% as.data.frame()
# Positive validation set
posCompl <- pos[setdiff(row.names(pos),row.names(posSamp)),]
# Combine sets
validat <- rbind(negSamp,posSamp)
training <- rbind(negCompl,posCompl)

好的,现在我们有两个可比较的集合。

[1] FALSE  TRUE
> dim(training)
[1] 1061  381
> dim(validat)
[1] 1060  381
> identical(names(training),names(validat))
[1] TRUE

我将模型拟合到训练集没有问题(并且我尝试在此处使用一系列 Lambda1 值)。但是,将模型拟合到验证数据集失败了,错误描述很奇怪。

> fit <- penalized(VoiceTremor,training[-1],data=training,lambda1=40,standardize=TRUE)
# nonzero coefficients: 13
> fit2 <- predict(fit, penalized=validat[-1], data=validat)
Error in .local(object, ...) : 
  row counts of "penalized", "unpenalized" and/or "data" do not match

只是为了确保这不是由于数据集中的某些 NA:

> identical(validat,na.omit(validat))
[1] TRUE

奇怪的是,我可能会生成一些与正确数据集相当的新数据:

data.frame(VoiceTremor="NVT",matrix(rnorm(380000),nrow=1000,ncol=380) ) -> neg
data.frame(VoiceTremor="VT",matrix(rnorm(380000),nrow=1000,ncol=380) ) -> pos
> dim(pos)
[1] 1000  381
> dim(neg)
[1] 1000  381

并运行上述程序,然后第二次拟合就起作用了! 怎么会?我的第二个(非训练)数据集可能有什么问题?

【问题讨论】:

    标签: r model-validation model-fitting


    【解决方案1】:

    好的,

    我找到了解决这个问题的方法。问题在于我发现互补数据集。

    neg[setdiff(row.names(neg),row.names(negSamp)),]
    

    没有做正确的事,但是

    neg %>% 
    rownames_to_column() %>% 
    filter(! rowname %in% row.names(negSamp)) %>% 
    column_to_rownames() %>% data.frame()
    

    确实如此。有了这个更改,再加上使用data.frame 而不是as.data.frame,一切都可以正常工作。

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 2014-12-16
      • 2016-03-30
      • 1970-01-01
      • 2021-08-31
      • 2015-03-05
      • 1970-01-01
      • 2017-05-27
      • 2021-04-04
      相关资源
      最近更新 更多