上一篇记录了比赛信息、数据集信息、以及使用了简单的几个Dense堆叠的神经网络进行训练并最终进行销量预测的结果。
机器学习笔记 - Kaggle表格游乐场 Jan 2022 学习一_bashendixie5的博客-CSDN博客Kaggle的表格游乐场从2021年开始,每个月1号都会有新的比赛,奖品应该是什么小礼品,官方的意思是给为初学者举办的比赛,不过在这里能看到高手们的思考问题的思路以及处理的办法,确实是收益良多。1、Tabular Playground Series - Jan 2022有两家(虚构的)独立连锁店销售 Kaggle 商品,它们希望成为所有 Kaggle 产品的官方出口。 我们决定看看 Kaggle 社区是否可以帮助我们确定哪家连锁店在未来的销售情况最好...https://blog.csdn.net/bashendixie5/article/details/122440925
这次使用的数据集和上一篇使用的数据集有了很大的扩充。上一篇用于训练的数据只有11列,这一篇使用的数据扩充到了170列,主要参考了Kaggle其它人的数据扩充方式,回头有时间详细整理下数据扩充过程。
参考代码
# 导入包
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
import tensorflow.keras.callbacks as callbacks
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Conv2D,Conv1D,Embedding
from tensorflow.keras.layers import MaxPooling2D, MaxPooling1D
from tensorflow.keras.layers import Activation
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense, Dropout
import tensorflow.keras.optimizers as optimizers
from tensorflow.keras.utils import to_categorical, plot_model
from tensorflow.keras import backend as K
import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_score,train_test_split
# 构建模型
def build_model():
model = Sequential()
model.add(Conv1D(16, 3, input_shape=(170, 1), activation='relu'))
model.add(Conv1D(16, 3, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Conv1D(64, 3, activation='relu'))
model.add(Conv1D(64, 3, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Conv1D(128, 3, activation='relu'))
model.add(Conv1D(128, 3, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Conv1D(64, 3, activation='relu'))
model.add(Conv1D(64, 3, activation='relu', padding='same'))
model.add(MaxPooling1D(3, padding='same'))
model.add(Flatten())
model.add(Dense(1, activation='linear'))
model.compile(optimizer=optimizers.Adam(), loss='mse', metrics=['mae', 'mse'])
return model
# 读取训练数据
data = pd.read_csv('data/train_k_data.csv')
# 增加维度
trains = np.expand_dims(data.values.astype(float), axis=2)
# 读取标签数据,就是销量
label = pd.read_csv('data/train_k_label.csv')
labels = label.num_sold
#创建模型
model = build_model()
# 当监测数量停止改善时停止训练
early_stop = callbacks.EarlyStopping(monitor='val_loss', patience=50)
# 检查点
save_func = callbacks.ModelCheckpoint(filepath='tabular_conv_1.h5', save_best_only=True)
# 训练模型
H = model.fit(trains, labels, epochs=500, verbose=1, validation_split=0.1, callbacks=[early_stop, save_func])
参考代码
# 读取上面训练好的模型
model = load_model("tabular_conv_1.h5")
# 读取测试数据
tests = pd.read_csv('data/test_k.csv')
# 增加维度
tests = np.expand_dims(tests.values.astype(float), axis=2)
# 进行预测
predictions = model.predict(tests, batch_size=6570)
因为比赛已经结束,所以可以直接看到私有排行和公共排行的分数,得分如下图,比之前的几层Dense堆叠好一些。