对于时间序列数据,训练集和测试集的划分应考虑时间顺序,确保训练数据仅包含过去的数据,测试数据用于预测未来趋势。这样可以避免未来数据“泄漏”到训练阶段,导致结果失真。
5.1 分割方法
- 时间分割:根据时间顺序划分训练集和测试集。
- 划分比例:通常按 80% 的数据用于训练,20% 的数据用于测试。
以下代码实现基于时间顺序的分割。
1. 确定分割点
我们将数据按时间排序,划分为训练集和测试集。
# 确认数据按时间排序
data_features.sort_index(inplace=True)
# 确定分割比例(80% 训练,20% 测试)
split_ratio = 0.8
split_index = int(len(data_features) * split_ratio)
# 划分训练集和测试集
train_data = data_features.iloc[:split_index]
test_data = data_features.iloc[split_index:]
print(f"训练集大小: {train_data.shape}")
print(f"测试集大小: {test_data.shape}")
2. 可视化训练集和测试集
通过可视化展示训练集和测试集的划分效果,确保数据分割合理。
# 可视化训练集和测试集的划分
plt.figure(figsize=(16, 8))
plt.plot(train_data.index, train_data['LandAverageTemperature'], color='blue', label='Training Data')
plt.plot(test_data.index, test_data['LandAverageTemperature'], color='red', label='Testing Data')
plt.axvline(train_data.index[-1], color='black', linestyle='--', label='Split Point')
plt.title('Training and Testing Data Split', fontsize=16)
plt.xlabel('Year', fontsize=14)
plt.ylabel('Temperature (°C)', fontsize=14)
plt.legend()
plt.grid(True)
plt.show()
![图片[1]-5. 数据分割-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/10/image-240-1024x555.png)
3. 分割结果确认
打印训练集和测试集的时间范围,确保分割符合时间序列的逻辑。
# 确认训练集和测试集的时间范围
print(f"训练集时间范围: {train_data.index.min()} - {train_data.index.max()}")
print(f"测试集时间范围: {test_data.index.min()} - {test_data.index.max()}")
5.2 小结
- 时间分割:数据按照时间顺序划分,避免未来数据泄漏到训练集中。
- 划分比例:采用 80% 的数据作为训练集,20% 的数据作为测试集。
- 可视化:通过图表展示训练集和测试集的划分效果,验证分割的合理性。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END













请登录后查看评论内容