如何在R中使用deepnet进行分类

时间:2016-07-21 09:36:59

标签: r classification

当我使用示例中的代码时:

library(deepnet)
Var1 <- c(rnorm(50, 1, 0.5), rnorm(50, -0.6, 0.2))
Var2 <- c(rnorm(50, -0.8, 0.2), rnorm(50, 2, 1))
x <- matrix(c(Var1, Var2), nrow = 100, ncol = 2)
y <- c(rep(1, 50), rep(0, 50))
nn <- dbn.dnn.train(x, y, hidden = c(5))

它有效。但是当我使用这段代码时:

Var1 <- c(rnorm(50, 1, 0.5), rnorm(50, -0.6, 0.2))
Var2 <- c(rnorm(50, -0.8, 0.2), rnorm(50, 2, 1))
x <- matrix(c(Var1, Var2), nrow = 100, ncol = 2)
**y <- c(rep("1", 50), rep("0", 50))**
nn <- dbn.dnn.train(x, y, hidden = c(5))

我收到错误:

  

batch_y中的错误 - nn $ post [[i]]:二元运算符的非数字参数

如何使用deepnet包进行分类问题?

1 个答案:

答案 0 :(得分:1)

y1 <- c(rep("1", 50), rep("0", 50))

引导您进入包裹无法接受的字符向量。这样你就会收到错误

class(y)
#[1] "character"

右边的y应该是数字,如下所示

y <- c(rep(1, 50), rep(0, 50))
class(y)
#[1] "numeric"

如果你在y里面看到,你会发现你有1或0这是分类的二进制值

> table(y)
#y
# 0  1 
#50 50 

如果您想按照手册中的说明进行训练,可以执行以下操作来训练和预测测试集

Var1 <- c(rnorm(50, 1, 0.5), rnorm(50, -0.6, 0.2))
Var2 <- c(rnorm(50, -0.8, 0.2), rnorm(50, 2, 1))
x <- matrix(c(Var1, Var2), nrow = 100, ncol = 2)
y <- c(rep(1, 50), rep(0, 50))

如果您现在通过 str 查看x和y,只需编写 str(x) str(y)即可看到它们是数字的(为了确保,您可以按类(x)和类(y)检查它们。

拥有你的X和y之后,你可以建立你的模型

dnn <- dbn.dnn.train(x, y, hidden = c(5, 5))

如果您有预测的测试集,那么您可以使用例如手册中提到的

来预测它
test_Var1 <- c(rnorm(50, 1, 0.5), rnorm(50, -0.6, 0.2))
test_Var2 <- c(rnorm(50, -0.8, 0.2), rnorm(50, 2, 1))
test_x <- matrix(c(test_Var1, test_Var2), nrow = 100, ncol = 2)
nn.test(dnn, test_x, y)

#[1] 0.25

同样,你的test_x必须是数字。如果您的问题是您将值作为字符,那么您可以通过mydata<- as.numeric()

将其转换为数字