我在R中使用神经网络包来将神经网络分类器拟合到我的数据中。
net <- neuralnet(Y1+Y2+Y3~X1+X2+X3, binary.data, hidden=45,
rep=10, err.fct="ce", linear.output=FALSE)
现在我的问题是我的binary.data框架有300个特征向量和10个输出类。因此,如果我手动将这些目标和特征添加到Neuralnet分类器的公式中,那将非常繁琐。
在拟合数据后,训练过的权重在哪里?
由于我将神经网络与45个隐藏神经元,300个特征和10个类相匹配,因此我希望两个权重矩阵一个尺寸为300x45,另一个尺寸为45x10?
我会在哪里找到那些重量矩阵?
答案 0 :(得分:1)
遗憾的是,neuralnet()
需要您在函数内指定公式。您可以使用'paste'函数指定它,如@thothal的答案中所示。如果你想避免这种情况,你可以使用RSNNS
包而不是'neuralnet',你可以用输入/输出数据帧的形式呈现你的整个输入和输出功能。
要查看权重,您可以使用plot.nn()
或gwplot()
,但这不会为您提供矩阵输出。同样RSNNS
包允许您通过对您的神经网络对象使用$getCompleteWeightMatrix
后缀来提取矩阵形式的权重。
答案 1 :(得分:1)
因此,对于公式,您可以使用类似的东西(我使用lm
,但使用公式接口的任何函数都是相同的原则):
dat <- as.data.frame(matrix(rnorm(100000), ncol = 100))
dat$y <- rnorm(NROW(dat))
mF <- formula(paste("y ~" , paste(names(dat)[-101], collapse = "+")))
lm(mF, data = dat)
因此,您自动生成formula
并且您不必自己对整个公式进行硬编码,但您可以生成它。另一个选择是使用.
限定符,该限定符读作公式中尚未出现的所有其他内容。
来自?formula
:
公式中有两种对'。'的特殊解释。该 通常的一个是模型拟合的“数据”参数 函数和意义'公式中不包含的所有列': 见'terms.formula'。在'update.formula'的上下文中,仅, 它意味着“以前在公式的这一部分中所做的事情”。