
1) 【一句话结论】
针对生猪未来7天体重预测任务,采用融合季节性特征与时间延迟的LSTM序列到序列模型,通过滑动窗口构建多特征时间序列,结合MSE和MAE评估,有效捕捉生长动态与周期性变化。
2) 【原理/概念讲解】
要解决多特征时间序列预测问题,需明确模型与特征的核心逻辑:
hour_sin、month_cos);diff(1)),保留波动信息(生长速度比绝对值更关键)。n_neighbors=3),保留局部特征,避免全局平均偏差;[Q1-1.5IQR, Q3+1.5IQR]的值),截断处理,防止模型过拟合。3) 【对比与适用场景】
| 模型类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| ARIMA | 自回归积分滑动平均模型 | 适合单一时间序列,捕捉线性关系,参数(p,d,q) | 简单时间序列预测(如单一体重序列) | 需数据平稳化,参数调优复杂,无法整合多特征 |
| LSTM | 长短期记忆网络 | 适合序列数据,捕捉长期依赖,多层结构 | 复杂序列预测(多特征+时间依赖) | 需大量数据,计算资源高,需处理序列长度 |
| XGBoost | 梯度提升树模型 | 适合非线性关系,处理多特征,特征重要性 | 多特征混合预测(如饲料+环境+时间) | 需特征工程,防止过拟合,计算效率高 |
4) 【示例】
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.impute import KNNImputer
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
# 加载数据
data = pd.read_csv('pig_data.csv')
# 数据预处理
# 缺失值处理
imputer = KNNImputer(n_neighbors=3)
data_imputed = imputer.fit_transform(data)
# 特征工程
data['hour_sin'] = np.sin(2*np.pi*data['饲喂时间']/24)
data['hour_cos'] = np.cos(2*np.pi*data['饲喂时间']/24)
data['age_sin'] = np.sin(2*np.pi*data['年龄']/365)
data['month_sin'] = np.sin(2*np.pi*data['月份']/12)
data['month_cos'] = np.cos(2*np.pi*data['月份']/12)
# 标准化(除目标变量)
scaler = StandardScaler()
X = scaler.fit_transform(data.drop('体重', axis=1))
y = data['体重']
# 构建滑动窗口数据(输入序列长度7,预测序列长度7)
def create_sequences(X, y, seq_length=7, pred_length=7):
sequences = []
targets = []
for i in range(len(X) - seq_length - pred_length + 1):
seq = X[i:i+seq_length]
target = y[i+seq_length:i+seq_length+pred_length]
sequences.append(seq)
targets.append(target)
return np.array(sequences), np.array(targets)
X_seq, y_seq = create_sequences(X, y, seq_length=7, pred_length=7)
# 构建LSTM模型
model = Sequential()
model.add(LSTM(64, return_sequences=True, input_shape=(X_seq.shape[1], X_seq.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(64))
model.add(Dropout(0.2))
model.add(Dense(y_seq.shape[1])) # 输出预测的7天体重
model.compile(optimizer='adam', loss='mse')
# 训练模型
model.fit(X_seq, y_seq, epochs=20, batch_size=32, validation_split=0.2)
# 预测(滑动窗口生成新数据)
# 假设新数据为X_new,构建输入序列后预测
5) 【面试口播版答案】
面试官您好,针对预测生猪未来7天体重的任务,我会选择基于LSTM的序列到序列模型,并融入季节性特征与时间延迟处理。首先,模型选择上,考虑到数据包含体重、饲料消耗、环境温湿度等多维度时间特征,LSTM擅长捕捉序列的长期依赖关系,适合多特征混合预测。特征工程方面,对饲喂时间、猪只年龄、月份等时间特征做周期转换(sin/cos),模拟24小时或一年周期;环境温湿度等连续特征标准化,消除量纲影响;体重和饲料消耗量做一阶差分,保留波动信息。数据预处理中,缺失值用KNN插值(保留局部特征),异常值通过IQR方法截断。模型训练时,用MSE和MAE评估,通过交叉验证调优超参数。预测时,采用滑动窗口策略,输入过去7天特征预测未来7天体重,LSTM逐步生成预测值,既能捕捉时间动态,又能利用多特征的非线性关系,提升精度。
6) 【追问清单】
month_sin, month_cos),或使用季节性LSTM模型(添加季节性输入层)。7) 【常见坑/雷区】