神经网络的预测函数给出奇怪的结果

我对机器学习技术和R语言编程都比较新手,目前正在尝试将神经网络拟合到我的一些数据上。然而,神经网络的预测结果对我来说毫无意义。我已经查看了StackOverflow,但没有找到解决这个问题的方案。

我的数据(这是测试集的一部分,训练集的格式相同)

    target monday tuesday wednesday thursday friday saturday  indepedent428    277      1       0         0        0      0        0        3317429    204      0       1         0        0      0        0        1942430    309      0       0         1        0      0        0        2346431    487      0       0         0        1      0        0        2394432    289      0       0         0        0      1        0        2023433    411      0       0         0        0      0        1        1886434    182      0       0         0        0      0        0        1750435    296      1       0         0        0      0        0        1749436    212      0       1         0        0      0        0        1810437    308      0       0         1        0      0        0        2021438    378      0       0         0        1      0        0        2494439    329      0       0         0        0      1        0        2110440    349      0       0         0        0      0        1        1933

我的代码

resultsnn <- neuralnet(target~monday+tuesday+wednesday+thursday+friday+saturday+independent,data=training,hidden=3,threshold=0.01,linear.output = TRUE)compute(resultsnn,test[,2:8])$net.result

我的结果(所有测试集案例的预测值都相同)

           [,1]428 508.4962231429 508.4962231430 508.4962231431 508.4962231432 508.4962231433 508.4962231434 508.4962231435 508.4962231436 508.4962231437 508.4962231438 508.4962231439 508.4962231440 508.4962231

我还尝试了什么?

我尝试了不使用虚拟变量的版本(只包括独立变量,这并没有改变结果的类型)

我创建了一些合成数据并将其用作输入,对于相同的代码,这确实能正常工作:

#构建训练集input_train <- as.data.frame(c(1:100))output_train <- as.data.frame(c(sqrt((1:100)+1)))train <- cbind.data.frame(output_train,input_train)colnames(train) <- c("output","input")#构建测试集input_test <- as.data.frame(c(101:150))output_test <- as.data.frame(c(sqrt((101:150)+1)))test <- cbind.data.frame(output_test,input_test)colnames(test) <- c("output","input")#NEURALNET包#神经网络3个神经元res.train <- neuralnet(output~input,data=train,hidden=3,threshold=0.01) #训练神经网络compute(res.train,test[,2])$net.result #使用神经网络在测试集上进行预测

我还尝试了其他包(例如,nnetRSNNS),但这些包在使用合成数据时已经无法提供正确的预测。

一些额外信息

关于数据类型的额外信息:

str(test) 'data.frame':  82 obs. of  8 variables:  $ target     : int  277 204 309 487 289 411 182 296 212 308 ...  $ monday     : int  1 0 0 0 0 0 0 1 0 0 ...  $ tuesday    : int  0 1 0 0 0 0 0 0 1 0 ...  $ wednesday  : int  0 0 1 0 0 0 0 0 0 1 ...  $ thursday   : int  0 0 0 1 0 0 0 0 0 0 ...  $ friday     : int  0 0 0 0 1 0 0 0 0 0 ...  $ saturday   : int  0 0 0 0 0 1 0 0 0 0 ...  $ independent: int  3317 1942 2346 2394 2023 1886 1750 1749 1810 2021 ...str(training) 'data.frame':  397 obs. of  8 variables:  $ target     : int  1079 1164 1069 1038 629 412 873 790 904 898 ...  $ monday     : int  0 0 0 0 0 0 1 0 0 0 ...  $ tuesday    : int  1 0 0 0 0 0 0 1 0 0 ...  $ wednesday  : int  0 1 0 0 0 0 0 0 1 0 ...  $ thursday   : int  0 0 1 0 0 0 0 0 0 1 ...  $ friday     : int  0 0 0 1 0 0 0 0 0 0 ...  $ saturday   : int  0 0 0 0 1 0 0 0 0 0 ...  $ independent: int  2249 2381 4185 2899 2387 2145 2933 2617 2378 3569 ...

如果您需要任何额外信息,请告诉我!感谢大家的帮助(:


回答:

看起来target和independent之间没有信号。暂时忽略工作日,如果你拟合带有和不带有梯度的线性模型:

# 一个查看响应与independent的线性模型(带截距)lm1 <- lm(target ~ indepedent, data = training)lm1## Call:# lm(formula = target ~ indepedent, data = training)## Coefficients:#  (Intercept)    indepedent  # 206.37312594    0.04853823 # 仅截距lm0 <- lm(target ~ 1, data = training)lm0## Call:# lm(formula = target ~ 1, data = training)## Coefficients:# (Intercept)  #   310.0769  # 两个模型的数据等同于可能的结果plot(target ~ indepedent, data = training)lines(fitted(lm1) ~ indepedent, data = training, lty = 2)lines(fitted(lm0) ~ indepedent, data = training, col = 2)

… 仅截距的模型更受青睐:

# 测试哪个模型更好# 大p值表明我们乐于接受简单模型anova(lm0, lm1)# Analysis of Variance Table## Model 1: target ~ 1# Model 2: target ~ indepedent#   Res.Df       RSS Df  Sum of Sq       F  Pr(>F)# 1     12 86990.923                             # 2     11 81792.165  1 5198.7582 0.69917 0.42086head(fitted(lm0))#         428         429         430         431         432         433 # 310.0769231 310.0769231 310.0769231 310.0769231 310.0769231 310.0769231

所以这也是机器学习方法告诉你的。简单模型预测对于每个independent值,target都有一个单一的值。显然,添加工作日变量并不能改善这一点。

你看到玩具示例的预测是因为响应中有一个强信号。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注