从数据探索到模型构建的全流程实践
数据探索
数据观测
我们首先使用netCDF4库读取气象数据:
from netCDF4 import Dataset
nc_path = "data/初赛训练集/nwp_data_train/1/NWP_1/20240101.nc"
dataset = Dataset(nc_path, mode='r')
数据集包含以下关键变量:
channel: 8个气象特征(ghi, poai, sp, t2m, tcc, tp, u100, v100)
data: 维度为(1, 24, 8, 11, 11)的5维数组
数据可视化
通过绘制24小时的特征变化曲线,我们发现了一些有趣的规律:
主要观察:
ghi与poai呈现明显的正相关关系
功率(power)在凌晨时段较高,上午急剧下降
tp(降水)特征呈现单调递增趋势
数据处理
数据降维
将11×11的网格数据降维为单一标量值:
mean_values = np.array([np.mean(data[:, :, i, :, :][0], axis=(1, 2))
for i in range(8)]).T
1.
2.
时间对齐
气象数据时间精度为小时,而功率数据为15分钟,我们进行了时间对齐处理:
target = target[target['时间'].str.endswith('00:00')]
1.
特征工程
我们创建了两个新特征:
def feature_combine(df):
df["wind_speed"] = np.sqrt(df['u100']**2 + df['v100']**2)
df["h"] = df.index % 24 # 小时特征
return df
1.
2.
3.
4.
这些新特征能够更好地捕捉数据中的物理规律和时间模式。
模型构建
我们采用LightGBM模型,使用5折交叉验证:
复制
def cv_model(clf, train_x, train_y, test_x, seed=2024):
folds = 5
kf = KFold(n_splits=folds, shuffle=True, random_state=seed)
# ...交叉验证实现...
1.
2.
3.
4.
关键参数设置:
params = {
'boosting_type': 'gbdt',
'objective': 'regression',
'metric': 'rmse',
'num_leaves': 2**8,
'learning_rate': 0.1,
# ...其他参数...
}
1.
2.
3.
4.
5.
6.
7.
8.
结果与展望
完整的数据分析流程,还深入理解了特征工程的重要性。未来可以在以下方面继续优化:
尝试更复杂的特征组合
使用深度学习模型进行对比
引入更多外部特征数据
-----------------------------------
©著作权归作者所有:来自51CTO博客作者DeepSeaAI的原创作品,请联系作者获取转载授权,否则将追究法律责任
从数据探索到模型构建的全流程实践
https://blog.51cto.com/yuhaibao324/14679606
