R - 在监督学习中使用虚拟变量和定量变量的神经网络包
Posted
技术标签:
【中文标题】R - 在监督学习中使用虚拟变量和定量变量的神经网络包【英文标题】:R - Neuralnet package using dummies and quantitative variables in supervised learning 【发布时间】:2020-10-03 07:41:44 【问题描述】:我正在为 R 使用包 neuralnet
,并希望使用监督学习。
在我的设置中,我有 15 个解释变量(其中 8 个是虚拟变量,每个虚拟都包含 0 and 1
作为值,其他解释变量是实数)。
但是,我想使用所有解释变量来预测目标向量(实数)。
所以,我的设置是一个回归问题。
如果我在没有假人的情况下运行我的神经网络,neuralnet()
-函数会产生结果。
但是,通过合并假人,我收到错误消息:
显然,假人会导致错误。在没有它们的情况下运行该功能可以正常工作。
我怎样才能正确地制作考虑假人的神经网络并创建输出?
请在下面找到可重现的示例以及神经网络设置:
#### install packages
# install.packages("devtools")
# require(devtools)
# devtools::install_github("bips-hb/neuralnet") # CRAN version contains bug, use github version
# require(neuralnet)
### create data
set.seed(1)
dt <- matrix(rnorm(200), nrow = 200, ncol = 3)
dummy1 <- as.factor( c(rep(1,100), rep(0,100)) ) # create vector with data (1,0) for first dummy, save as factor
dummy2 <- as.factor( c(rep(0,100), rep(1,100)) ) # create vector with data (0,1) for second dummy, save as factor
dummy_df <- data.frame(dummy1, dummy2) # merging both dummies into dataframe
class(dummy_df[,1]) # factor
class(dummy_df[,2]) # factor
# bringing original data and dummies together
train <- cbind(as.data.frame(dt), dummy_df)
# see colnames
colnames(train)
# start neural net
nnet <- neuralnet(formula = V1 ~ V2 + V3 + dummy1 + dummy2, # use V1 as target for supervised learning
data = train,
hidden = 1, # neurons
threshold = 0.01, # termination derivative is reached
rep = 5, # trainings
startweights = NULL, # starting weights
learningrate.factor = list(minus = 0.5, plus = 1.2), # increasing and decrasing factors
algorithm = "rprop+", # rprop algorithm with weight updating
err.fct = "sse", # use sum squared errors as error function
act.fct = "tanh", # use hyperbolic tangent
linear.output = TRUE, # output function is linear, regression problem
lifesign = "full", # print behavior
stepmax = 200000)
感谢您的帮助!
【问题讨论】:
【参考方案1】:neuralnet
似乎没有将因子作为输入(预测变量)。只需使用假人的数值,就可以了。
dummy1 <- as.numeric(dummy1)
dummy2 <- as.numeric(dummy2)
dummy_df <- data.frame(dummy1, dummy2)
只要您的因子只有两个水平,这就可以正常工作。如果您有两个以上的级别,请使用dummy coding。
【讨论】:
【参考方案2】:添加到 Dominiks 的答案,他似乎绝对正确,合并虚拟变量相当简单,或者使用像(我相信)dummmies 这样的包,或者使用基本包和model.matrix
,如下所示
dt <- matrix(rnorm(200), nrow = 200, ncol = 3)
dummy1 <- as.factor( c(rep(1,100), rep(0,100)) ) # create vector with data (1,0) for first dummy, save as factor
dummy2 <- as.factor( c(rep(0,100), rep(1,100)) ) # create vector with data (0,1) for second dummy, save as factor
dummy_df <- data.frame(dummy1, dummy2) # merging both dummies into dataframe
mm <- model.matrix(~ dummy1 + dummy2 - 1, data = dummy_df) #-1 removes intercept.
train <- cbind(dt, mm)
neuralnet::neuralnet(V1 ~ . , data = train) #possibly adding -1 to the formula is sensible as well.
【讨论】:
以上是关于R - 在监督学习中使用虚拟变量和定量变量的神经网络包的主要内容,如果未能解决你的问题,请参考以下文章