【Datawhale AI夏令营】电力需求预测挑战赛 Task02

task02

Task2 版本教程将使用机器学习模型解决本次问题,模型使用简单,数据不需要过多预处理;

使用机器学习方法一般主要需要从 获取数据&增强特征提取模型 三个方面下手。

  • 使用机器学习方法有哪几个步骤?

    一般的使用机器学习模型解决问题的主要步骤为探索性数据分析、数据预处理、提取特征、切分训练集与验证集、训练模型、预测结果。

特征

这里主要构建了 历史平移特征窗口统计特征;每种特征都是有理可据的,具体说明如下:

  • **历史平移特征:**通过历史平移获取上个阶段的信息;如下图所示,可以将d-1时间的信息给到d时间,d时间信息给到d+1时间,这样就实现了平移一个单位的特征构建。

  • **窗口统计特征:**窗口统计可以构建不同的窗口大小,然后基于窗口范围进统计均值、最大值、最小值、中位数、方差的信息,可以反映最近阶段数据的变化情况。如下图所示,可以将d时刻之前的三个时间单位的信息进行统计构建特征给我d时刻。

模型

选择使用Lightgbm模型,也是通常作为数据挖掘比赛的基线模型,在不需要过程调参的情况的也能得到比较稳定的分数。另外需要注意的是,训练集和验证集的构建,因为数据存在时序关系,所以严格按照时序进行切分,这里选择原始给出训练数据集dt为30之后作为训练数据,之前的数据作为验证数据,这样保证了数据不存在穿越问题(不使用未来数据预测历史数据)。

error

def time_model(lgb, train_df, test_df, cols):
    # 训练集和验证集切分
    trn_x, trn_y = train_df[train_df.dt>=31][cols], train_df[train_df.dt>=31]['target']
    val_x, val_y = train_df[train_df.dt<=30][cols], train_df[train_df.dt<=30]['target']
    # 构建模型输入数据
    train_matrix = lgb.Dataset(trn_x, label=trn_y)
    valid_matrix = lgb.Dataset(val_x, label=val_y)
    # lightgbm参数
    lgb_params = {
        'boosting_type': 'gbdt',
        'objective': 'regression',
        'metric': 'mse',
        'min_child_weight': 5,
        'num_leaves': 2 ** 5,
        'lambda_l2': 10,
        'feature_fraction': 0.8,
        'bagging_fraction': 0.8,
        'bagging_freq': 4,
        'learning_rate': 0.05,
        'seed': 2024,
        'nthread' : 16,
        'verbose' : -1,
    }
    # 训练模型
    model = lgb.train(lgb_params, train_matrix, 50000, valid_sets=[train_matrix, valid_matrix], 
                      categorical_feature=[], verbose_eval=500, early_stopping_rounds=500)
    # 验证集和测试集结果预测
    val_pred = model.predict(val_x, num_iteration=model.best_iteration)
    test_pred = model.predict(test_df[cols], num_iteration=model.best_iteration)
    # 离线分数评估
    score = mean_squared_error(val_pred, val_y)
    print(score)
       
    return val_pred, test_pred
    
lgb_oof, lgb_test = time_model(lgb, train, test, train_cols)

# 保存结果文件到本地
test['target'] = lgb_test
test[['id','dt','target']].to_csv('submit.csv', index=None)

调用lightgbm库,设置了早停轮次“early_stopping_rounds”参数和打印log间隔“verbose_eval”参数后出现UserWarning。

或者提示TypeError: fit() got an unexpected keyword argument ‘early_stopping_rounds‘。
在这里插入图片描述
解决方法:参考 https://blog.csdn.net/weixin_51723388/article/details/124578560
因为lightgbm packages升级了,一些功能或者效果上有所区别。(后续具体分析)

import lightgbm
 
cv_results = lightgbm.cv(
                    metrics='auc',
                    ###
                    early_stopping_rounds=30, 
                    verbose_eval=True 
                    ###
                    )        

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 17:24:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 17:24:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 17:24:03       58 阅读
  4. Python语言-面向对象

    2024-07-16 17:24:03       69 阅读

热门阅读

  1. axios js请求后端的使用直接使用

    2024-07-16 17:24:03       16 阅读
  2. py每日spider案例之影视搜索篇

    2024-07-16 17:24:03       21 阅读
  3. Triple协议 和dubbo协议

    2024-07-16 17:24:03       21 阅读
  4. 靖江美食元宇宙

    2024-07-16 17:24:03       20 阅读
  5. Git---git本地配置commit_template提交模板,规范开发

    2024-07-16 17:24:03       19 阅读
  6. C#面:dot net core里面的路径是如何处理的?

    2024-07-16 17:24:03       18 阅读
  7. 解析企业为何需要专线接入公有云

    2024-07-16 17:24:03       20 阅读
  8. Node.js 事件循环

    2024-07-16 17:24:03       21 阅读