Используйте thing[:]
>>> a = [1,2]
>>> b = a[:]
>>> a += [3]
>>> a
[1, 2, 3]
>>> b
[1, 2]
>>>
Сделайте str (cv_data) и убедитесь, что они все числовые.
Попробуйте отрегулировать значение threshold
до значения более 0,01 или stepmax
до более чем 1e06 или с помощью threshold
0,1, а затем уменьшите его оттуда. Вы также можете добавить аргумент lifesign = "full"
, чтобы наблюдать за производительностью создания модели с шагом 1000 шагов, чтобы действительно набрать порог. Это «разрешило» не двоичную ошибку, которую я имел, но точность модели, средняя квадратичная ошибка и другие результаты были меньше, чем удовлетворение в качестве прямого результата.
Старайтесь, чтобы вы никогда не устанавливали startweights
в функции neuralnet()
. Согласно документации
neuralnet(formula, data, hidden = 1, threshold = 0.01,
stepmax = 1e+05, rep = 1, startweights = NULL,
learningrate.limit = NULL,
learningrate.factor = list(minus = 0.5, plus = 1.2),
learningrate=NULL, lifesign = "none",
lifesign.step = 1000, algorithm = "rprop+",
err.fct = "sse", act.fct = "logistic",
linear.output = TRUE, exclude = NULL,
constant.weights = NULL, likelihood = FALSE)
startweights a vector containing starting values for the weights. The weights will not be randomly initialized.
Обратите внимание, что значение по умолчанию NULL, и оно НЕ будет инициализировано случайным образом. Попытайтесь что-то там положить и посмотрите, работает ли это.
Я просто столкнулся с той же проблемой. Проверяя исходный код функции compute
, мы видим, что он принимает один из результирующих атрибутов (т. Е. weights
), определенный только тогда, когда сеть заканчивает обучение безупречным.
> trace("compute",edit=TRUE)
function (x, covariate, rep = 1) {
nn <- x
linear.output <- nn$linear.output
weights <- nn$weights[[rep]]
[...]
}
Я думаю, что реальная проблема заключается в том, что neuralnet
не сохраняет текущую сеть после достижения значения stepmax
, вызывая эту ошибку позже в коде compute
.
Изменить
Кажется, вы можете избежать этого сброса, комментируя строки 65 & amp; 66 функции calculate.neuralnet
> fixInNamespace("calculate.neuralnet", pos="package:neuralnet")
[...]
#if (reached.threshold > threshold)
# return(result = list(output.vector = NULL, weights = NULL))
[...]
Тогда все работает как прелесть:)