神经网络模型验证准确性和转换准确性永远不会改变

时间:2017-12-09 22:41:31

标签: python machine-learning neural-network dataset keras

任务:

因此,我和一位朋友的任务是为旧的Kaggle比赛制作一个神经网络,这是一个回归问题,因为你必须预测商店的销售量达到x个月的数量Here。< / p>

数据集:

我们决定使用Keras和Pandas对火车数据集进行预处理。火车数据集包含以下字段

(括号内的文字不在数据集中,只是为了显示范围和数据类型)

Store(1-1115)   DayOfWeek(1-7)  Date(YYYY-MM-DD)    Sales(int)  Customers(int)  Open(0 OR 1)    Promo(0 OR 1)   StateHoliday(0,a,b,c)   SchoolHoliday(0 OR 1)

我们如何处理/制作数据集:

Train.csv
Y:
所以我们决定从训练数据集中删除“Sales”并将其用作Y,这是我第一个问题的目标。 我们应该规范化Y /销售目标数据吗?

X
现在我们按如下方式处理其余的训练数据。

  • 我们删除日期,因为我们认为它不会提供太多用途 特别是如果我们按顺序放置数据。
  • 我们已将State Holiday更改为(0或1)二进制值,以表明它是/不是州假日的天气。我们还将其更改为0.25 / 0.5 / 0.75 / 1.0以表示所有州假日,我们在数据集的不同迭代中完成此操作(不同的迭代部分后来很重要)
  • 然后我们将客户规范化为0-1,就像销售
  • 一样
  • 我们还删除了学校假期,因为我们认为它没有足够的价值来实现销售目标
  • 我们也删除了Open,好像商店已关闭它没有销售,只是没有意义保持
  • 我们还在数据集的一次迭代中摆脱了Day Of Week,并将其保存在另一个

现在我的朋友比我更像一个数学家,我更像是一名计算机科学家。因此,使用另一个名为Store.csv的竞赛中的数据集,它看起来如下:
Store.csv

Store(1-1115)   StoreType(a-d)  Assortment(a-c) CompetitionDistance(int Meters) CompetitionOpenSinceMonth(int M)    CompetitionOpenSinceYear(int YYYY)  Promo2(0 OR 1)  Promo2SinceWeek(int)    Promo2SinceYear(YYYY)   PromoInterval(Str months seperated by csv)

现在我的朋友写了一个距离函数来为我们的训练数据集制作N个聚类,函数如下(我们确定了5个聚类):

  

我根据客户距离商店类型将最相似的内容放在一起   分类和促销

然后我们有5个数据集,它们由我们的距离函数分开。

Final Training dataset before dropping cluuter, sales and store

我们现在有5个数据集,我们删除了以下内容:

  • 集群
  • 存储
  • 销售 - 将其另存为Y / Target

所以现在我们的最终数据集如下所示:

DayOfWeek(1-7)  Customers(normalised)   Promo(0 OR 1)   StateHoliday(0 OR 1)

Final Training dataset

问题

到目前为止,当我们训练我们的神经网络时,我们网络的准确性和验证灵敏度只会收敛到一个数字并且不会让步,无论我们设定什么时代或学习速度或动力。我们尝试过不同的集群,它们仍然会聚合到不同的数字。我们制作了一个包含所有聚类的大数据集,并且数值仍在收敛。

我们制作了一个没有聚类分离的大型数据集,准确性和验证准确性在2/3/4时期之后达到了固定数量,并且从未改变。

我们制作的网络如下所示:

model = Sequential()
model.add(Dense(8, input_dim=4, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(3, activation='relu'))
model.add(Dense(1, activation='relu'))

# model.add(Dense(1, activation='linear'))

model.compile(loss="MSE", optimizer="nadam", metrics=['accuracy'])

model.fit(x=xt.as_matrix(), y=yt.as_matrix(), validation_data=(xv.as_matrix(), yv.as_matrix()), epochs=5000)

print("stop")

我们甚至尝试添加删除一些功能,但同样的问题仍然存在。

问题

  • 为什么数字会收敛,无论我们改变数据集?
  • 这可能是网络形状/激活功能/丢失/优化器 问题?
  • 数据集存在问题吗?
  • 预处理数据是否是一个好主意?

  • 您如何处理这些数据以获得良好的效果?

  • 哪种类型的层/神经元适合?

  • 我们应该规范化数据吗?

0 个答案:

没有答案