2016-07-21 3 views
0

Когда я использовать код из примера:Как использовать Deepnet для классификации в R

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)) 

я получаю сообщение об ошибке:

Error in batch_y - nn$post[[i]] : non-numeric argument to binary operator

Как я могу использовать Deepnet пакет для задачи классификации?

ответ

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

привести вас к символьному вектору, который неприемлем для пакета. так что вы получите ошибку

class(y) 
#[1] "character" 

Права у должно быть числовыми следующим

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

если вы видите внутри у, вы можете обнаружить, что у вас есть 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)) 

Если вы теперь посмотрите на свой х и у по ул просто написать ул (х) или ул (у) вы можете увидеть, что они являются цифровыми (чтобы убедиться, что вы можете проверить их по классу (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()

+0

Когда я использую числовое значение, я получаю модель регрессии, а не классификацию. В результате после предсказания я получил числовые результаты, а не идентификатор классов. – Osm

+0

@ Классификация и регресс ОСОм очень похожи. вы должны округлить свое предсказание вывода, если хотите получить точные двоичные значения. например, используйте ** round (x) **, тогда у вас будут те, которые близки к нулю, как ноль, так и те, которые близки к 1 как единое целое. кроме того, если модель не предсказывала это правильно, у вас может быть 2 или 3 и т. д., что может быть очень полезно для матрицы замешательства, которую вы собираетесь рассчитать – Learner

Смежные вопросы