datawhale科大讯飞锂离子电池温度预测赛道Baseline复现全过程

原文档:

1、理解任务和数据集

        下载并解压完data.zip文件后,可以看到存在train.csv和test.csv两个csv文件。打开train.csv,可以发现里面有比赛的五种电池数据和基本的序号、时间数据;打开test.csv,可以发现里面少了电炉上下部空间17个测温点的测量温度值——而这正是我们需要预测并上传到赛事方的预测目标。

2、基准模型的基本结构

        我们采用的是LightGBM模型,采用MAE作为评价指标。这里我们先把库的安装及导入以及数据的引入忽略,先讨论主体的构建问题。

以上图片是datawhale官方文档里给出的步骤,不过我觉得这更接近于功能模块,而不是代码实现中的步骤,我将试图找出后者:

        2.1数据管道

我们要做的操作是将数据预处理后输入一个模型,然后接受模型的输出并上传。我们先不关心数据处理的中间环节,先考虑把数据引进来并且确定数据最终如何保存:

管道的两端处理完了,现在我们来想想模型需要什么样的数据——模型需要知道预测的目标是什么、模型需要划分出训练集和验证集、模型本身的一些基本参数以及源代码带有的禁用的训练日志输出:

关注到这些数据中时间是一个很特殊的基本变量,我们要对其进行时间特征的提取,这也是特征工程的一部分,可以更好地发现数据之间的时间相关性:

# 时间特征函数
def time_feature(data: pd.DataFrame, pred_labels: list=None) -> pd.DataFrame:
    """提取数据中的时间特征。

    输入: 
        data: Pandas.DataFrame
            需要提取时间特征的数据。

        pred_labels: list, 默认值: None
            需要预测的标签的列表。如果是测试集,不需要填入。
    
    输出: data: Pandas.DataFrame
            提取时间特征后的数据。
    """
    
    data = data.copy() # 复制数据,避免后续影响原始数据。
    data = data.drop(columns=["序号"]) # 去掉”序号“特征。
    
    data["时间"] = pd.to_datetime(data["时间"]) # 将”时间“特征的文本内容转换为 Pandas 可处理的格式。
    data["month"] = data["时间"].dt.month # 添加新特征“month”,代表”当前月份“。
    data["day"] = data["时间"].dt.day # 添加新特征“day”,代表”当前日期“。
    data["hour"] = data["时间"].dt.hour # 添加新特征“hour”,代表”当前小时“。
    data["minute"] = data["时间"].dt.minute # 添加新特征“minute”,代表”当前分钟“。
    data["weekofyear"] = data["时间"].dt.isocalendar().week.astype(int) # 添加新特征“weekofyear”,代表”当年第几周“,并转换成 int,否则 LightGBM 无法处理。
    data["dayofyear"] = data["时间"].dt.dayofyear # 添加新特征“dayofyear”,代表”当年第几日“。
    data["dayofweek"] = data["时间"].dt.dayofweek # 添加新特征“dayofweek”,代表”当周第几日“。
    data["is_weekend"] = data["时间"].dt.dayofweek // 6 # 添加新特征“is_weekend”,代表”是否是
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值