【问题标题】:How to convert predicted values into binary variables and save them to a CSV如何将预测值转换为二进制变量并将它们保存到 CSV
【发布时间】:2015-04-11 00:19:28
【问题描述】:

我在测试数据上建立了一个决策树模型,然后用它来预测测试数据集中的值。

dtpredict<-predict(ct1, testdat, type="class")

输出如下:

      1       2       3       4       5       6 
    Class_2 Class_2 Class_6 Class_2 Class_8 Class_2 

我想写一个 csv 看起来像:

id, Class_1, Class_2, Class_3, Class_4, Class_5, Class_6, Class_7, Class_8, Class_9
1, 0, 1, 0, 0, 0, 0, 0, 0, 0
2, 0, 1, 0, 0, 0, 0, 0, 0, 0
3, 0, 0, 0, 0, 0, 1, 0, 0, 0
4, 0, 1, 0, 0, 0, 0, 0, 0, 0
5, 0, 0, 0, 0, 0, 0, 0, 1, 0
6, 0, 1, 0, 0, 0, 0, 0, 0, 0

【问题讨论】:

  • 您的数据存储如何?它是 data.frame 还是 data.table?查看 write.tablewrite.csv() 基本 R 函数。

标签: r


【解决方案1】:

有一个名为 dummies 的包做得很好......

install.packages("dummies")
library(dummies)

x <- factor(c("Class_2", "Class_2", "Class_6", "Class_2", "Class_8", "Class_2"),
            levels = paste("Class", 1:9, sep="_"))

dummy(x, drop = FALSE)

     xClass_1 xClass_2 xClass_3 xClass_4 xClass_5 xClass_6 xClass_7 xClass_8 xClass_9
[1,]        0        1        0        0        0        0        0        0        0
[2,]        0        1        0        0        0        0        0        0        0
[3,]        0        0        0        0        0        1        0        0        0
[4,]        0        1        0        0        0        0        0        0        0
[5,]        0        0        0        0        0        0        0        1        0
[6,]        0        1        0        0        0        0        0        0        0

剩下的就是去掉“x”,但这不应该太难用这样的东西:

d <- dummy(x,drop = FALSE)
colnames(d) <- sub("x", "", colnames(d))

然后保存到磁盘:

write.csv(d, "somefile.csv", row.names = FALSE)

【讨论】:

  • 感谢多米尼克,这很有效。我必须通过以下方式删除 x: colnames(d)
  • 嗯,好的,我会进行编辑。感谢您的反馈,很高兴它奏效了。不要忘记接受答案,因为这对您的代表也有好处! :)
【解决方案2】:

呃,010101 的逻辑是什么?如果是这样,它们在您的示例中没有多大意义,所有都是 1 类(不对应于您的示例 dtpredict)。如果它们是逻辑的......

# if dtpredict is a factor vector, where the values are the classes
# and the names are the boolean values:
values = as.numeric(as.character(names(dtpredict)))
classes = as.character(dtpredict)
x = data.frame(id=names(classes))
for(class in sort(unique(classes)){
     x[ , class] = as.numeric(sapply(classes, FUN=function(p) p==class])
}
write.csv(x, 'blah.csv')

【讨论】:

  • 嘿希拉里,对不起这个世界的新手......如果你再看我的帖子,似乎有人更正了它,以便 0 和 1 与我之前包含的输出相对应......所以0 和 1 表示对象是否属于该类。我试过你的代码,但没有用。我希望看到它运行,因为它看起来比之后像 Dominic 的工作那样删除 x 更优雅。所以回答你的问题,我相信 dt predict 是一个因子向量?但不确定?
  • 嘿,威廉,没问题。好的,所以它们是合乎逻辑的——但它们被困在因子变量中。我想我认为类是名称,逻辑是值,但它可能会被切换。也许试试这个更新的代码?如果代码不起作用,错误消息总是很方便。
猜你喜欢
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 2014-07-25
  • 2019-03-31
相关资源
最近更新 更多