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 - 在监督学习中使用虚拟变量和定量变量的神经网络包的主要内容,如果未能解决你的问题,请参考以下文章

数学建模:1.监督学习--回归分析模型

避免虚拟变量陷阱和神经网络

如何用神经网络实现连续型变量的回归预测?

回归(regression)与分类(classification)的区别

83-预测分析-R语言实现-神经网络

机器学习上的一些容易混淆的概念