Task3---使用深度学习模型 #Datawhale AI夏令营

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import LSTM, Dense, RepeatVector, TimeDistributed
from keras.optimizers import Adam

train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

# 数据预处理
def preprocess_data(df, look_back=100):
    # 将数据按照id进行分组
    grouped = df.groupby('id')
    datasets = {}
    for id, group in grouped:
        datasets[id] = group.values
        
    # 准备训练数据集
    X, Y = [], []
    for id, data in datasets.items():
        for i in range(10, 15): # 每个id构建5个序列
            a = data[i:(i + look_back), 3]
            a = np.append(a, np.array([0]*(100-len(a))))
            X.append(a[::-1])
            Y.append(data[i-10:i, 3][::-1])
    
    # 准备测试数据集
    OOT = []
    for id, data in datasets.items():
        a = data[:100, 3]
        a = np.append(a, np.array([0]*(100-len(a))))
        OOT.append(a[::-1])
    
    return np.array(X, dtype=np.float64), np.array(Y, dtype=np.float64), np.array(OOT, dtype=np.float64)

# 定义模型
def build_model(look_back, n_features, n_output):
    model = Sequential()
    model.add(LSTM(50, input_shape=(look_back, n_features)))
    model.add(RepeatVector(n_output))
    model.add(LSTM(50, return_sequences=True))
    model.add(TimeDistributed(Dense(1)))
    model.compile(loss='mean_squared_error', optimizer=Adam(0.001))
    return model

# 构建和训练模型
look_back = 100  # 序列长度
n_features = 1  # 假设每个时间点只有一个特征
n_output = 10  # 预测未来10个时间单位的值

# 预处理数据
X, Y, OOT = preprocess_data(train, look_back=look_back)

# 构建模型
model = build_model(look_back, n_features, n_output)

# 训练模型
model.fit(X, Y, epochs=10, batch_size=64, verbose=1)

# 进行预测
predicted_values = model.predict(OOT)

以下是代码的详细解释:

  1. 导入库:代码开始处导入了所需的库,包括数据处理库NumPy和Pandas,以及用于构建LSTM模型的Keras库。

  2. 读取数据:使用Pandas的read_csv函数读取训练数据集train.csv和测试数据集test.csv

  3. 定义数据预处理函数

    1. preprocess_data函数用于准备训练和测试数据。

    2. 数据按id列进行分组。

    3. 对于每个id,提取特定列(索引为3的列)的数据作为时间序列。

    4. 创建多个序列,每个序列长度为look_back,默认为100。

    5. 序列被反转,并且如果序列长度不足100,则用0填充。

    6. 训练数据集的标签Y是序列的一部分,同样进行反转。

    7. 测试数据集(OOT,Out-Of-Time)也被反转并用0填充以满足序列长度要求。

  4. 定义模型构建函数

    1. build_model函数用于构建LSTM模型。

    2. 模型包括一个LSTM层,用于学习时间序列数据的特征,以及一个重复向量层RepeatVector,用于复制上一个LSTM层的输出以供下一个LSTM层使用。

    3. 再次使用LSTM层和时间分布的密集层来预测序列的下一个值。

    4. 模型使用均方误差作为损失函数,并使用Adam优化器。

  5. 构建和训练模型

    1. 设置序列长度look_back、特征数n_features和输出时间单位数n_output

    2. 调用preprocess_data函数预处理训练数据。

    3. 使用build_model函数构建模型。

    4. 使用模型的fit方法训练模型,指定迭代次数(epochs)和批量大小(batch_size)。

  6. 进行预测

    1. 使用训练好的模型对测试数据集进行预测。

    2. 这里需要注意注意自行将预测结果转化为提交格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值