因此,我和一位朋友的任务是为旧的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
现在我们按如下方式处理其余的训练数据。
现在我的朋友比我更像一个数学家,我更像是一名计算机科学家。因此,使用另一个名为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个数据集,它们由我们的距离函数分开。
我们现在有5个数据集,我们删除了以下内容:
所以现在我们的最终数据集如下所示:
DayOfWeek(1-7) Customers(normalised) Promo(0 OR 1) StateHoliday(0 OR 1)
到目前为止,当我们训练我们的神经网络时,我们网络的准确性和验证灵敏度只会收敛到一个数字并且不会让步,无论我们设定什么时代或学习速度或动力。我们尝试过不同的集群,它们仍然会聚合到不同的数字。我们制作了一个包含所有聚类的大数据集,并且数值仍在收敛。
我们制作了一个没有聚类分离的大型数据集,准确性和验证准确性在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")
我们甚至尝试添加删除一些功能,但同样的问题仍然存在。
预处理数据是否是一个好主意?
您如何处理这些数据以获得良好的效果?
哪种类型的层/神经元适合?
我们应该规范化数据吗?