Нейронная сеть: в нейронах [[i]] %*% весов [[i]]: требуются числовые / сложные матричные / векторные аргументы

Я пытаюсь метод нейронной сети на мои данные, и я застрял. я всегда получаю сообщение:

in neurons[[i]] %*% weights[[i]] : requires numeric/complex matrix/vector arguments

факты таковы:

  1. я читаю свои данные, используя read.csvЯ добавляю ссылку на файл с некоторыми из моих данных, надеюсь, это поможет https://www.dropbox.com/s/b1btx0cnhmj229p/collineardata0.4%287.2.2017%29.csv?dl=0
  2. у меня нет данных в моих данных (я проверил дважды)
  3. результат str(data) является:

    "data.frame": 20 баллов 457 переменных: $ X300,5_алинин.сульфат: число 0,351 0,542 0,902 0,656 1 ... $ X300,5_bromocresol.green: число 0,435 0,603 0,749 0,314 0,922 ... $ X300,5_бромфенол. синий: число 0,415 0,662 0,863 0,345 0,784 ... $ X300.5_bromothymol.blue: число 0,2365 0,0343 0,4106 0,3867 0,8037 ... $ X300,5_chlorophenol.red: число 0,465 0,1998 0,7786 0,0699 1 ... $ X300,5_cresol.red: число 0,534 0,311 0,678 0,213 0,821 ... продолжение

  4. я пытался использовать модель.matrix

  5. код, который я пробовал на разных наборах данных (например, радужная оболочка), и это было хорошо.

Может кто-нибудь попробовать и предложить, что не так с моими данными / чтения данных?

код

require(neuralnet)
require(MASS) 
require(grid)

require(nnet)

#READ IN DATA
data<-read.table("data.csv", sep=",", dec=".", head=TRUE)
dim(data)

# Create Vector of Column Max and Min Values
maxs <- apply(data[,3:459], 2, max)
mins <- apply(data[,3:459], 2, min)

# Use scale() and convert the resulting matrix to a data frame
scaled.data <- as.data.frame(scale(data[,3:459],center = mins, scale =   maxs - mins))

# Check out results
print(head(scaled.data,2))

#create formula
feats <- names(scaled.data)

# Concatenate strings
f <- paste(feats,collapse=' + ')
f <- paste('data$Type ~',f)

# Convert to formula
f <- as.formula(f)

f

#creating neural net
nn <- neuralnet(f,model,hidden=c(21,15),linear.output=FALSE)
str(scaled.data)

apply(scaled.data,2,function(x) sum(is.na(x)))

1 ответ

Есть несколько вещей, не так с вашим кодом.

1.В вашей зависимой переменной много факторов Type, neuralnet принимает только числовой ввод, поэтому вы должны преобразовать его в двоичную матрицу с model.matrix,

y <- model.matrix(~ Type + 0, data = data[,1,drop=FALSE])

# fix up names for as.formula
y_feats <- gsub(" |\\+", "", colnames(y))
colnames(y) <- y_feats

scaled.data <- cbind(y, scaled.data)

# Concatenate strings
f <- paste(feats,collapse=' + ')
y_f <- paste(y_feats,collapse=' + ')
f <- paste(y_f, '~',f)

# Convert to formula
f <- as.formula(f)

2. Вы даже не прошли мимо scaled.data к neuralnet позвони в любом случае.

nn <- neuralnet(f,scaled.data,hidden=c(21,15),linear.output=FALSE)

Функция будет запущена сейчас, но вам нужно разобраться с проблемами мультикласса (выходящими за рамки этого вопроса). Этот пакет не выводит прямые вероятности, поэтому вы должны быть осторожны.

Другие вопросы по тегам