【问题标题】:How to use deepnet for classification in R如何在 R 中使用 deepnet 进行分类
【发布时间】:2016-07-21 09:36:58
【问题描述】:

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

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 包解决分类问题?

【问题讨论】:

    标签: r classification


    【解决方案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) 即可看到它们是数字的(为确保您可以通过 class(x) 和 class(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&lt;- as.numeric() 将其转换为数字

    【讨论】:

    • 当我使用数字时,我得到的是回归模型,而不是分类。结果,在预测之后我得到了数字结果,而不是类 ID。
    • @Osm 分类和回归非常相似。如果你想得到精确的二进制值,你应该四舍五入你的输出预测。例如使用 round(x) 那么你会将那些接近于零的值设为零,将接近于 1 的值设为一。此外,如果模型没有正确预测它,您可能有 2 或 3 个等,这对于您要计算的混淆矩阵非常有用
    猜你喜欢
    • 2013-10-18
    • 2017-11-29
    • 2015-02-07
    • 1970-01-01
    • 2015-08-17
    • 2011-09-12
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多