三一挖掘机工作模式识别Baseline分享

老肥码码码

共 4728字,需浏览 10分钟

 ·

2021-05-29 20:54

今天老肥和大家分享的是三一数据应用大赛-挖掘机工作模式识别的Baseline方案,全流程需在DCLab平台上进行,选手需要在平台上进行数据处理、算法调试。现在很多比赛平台出于数据保密等原因都需要在平台上进行数据处理、模型训练与预测,平台的使用方法不尽相同,这也是我第一次使用DCLab平台,很多选手都遇到了无法成功提交的问题,现在就来来替大家踩踩坑,让大家少走一些弯路。

数据兑阅与导入

在成功报名比赛通过审核之后,使用DC平台发送的站内邮件里的兑阅码对数据进行兑阅。


然后创建项目之后将数据动态挂载,在notebook中输入命令对数据进行解压缩操作。

!ls ../input/*/*.zip | xargs -n1 unzip -d /home/workspace/ 

模型训练

导入数据之后我们可以在notebook中进行数据读取、特征提取与模型训练,这里的过程与在本地进行数据挖掘无异,每一个文件作为一行数据来进行模型训练,下面是我采用的一个粗糙的统计特征提取过程。模型训练完成之后记得将模型保存以便提交的时候进行推理使用。


def get_features(data):
    data = data.sort_values('receive_time')
    for f in ['action_code''alarm_code''auto_idling''workmode''intake_temperature''gear''fuel_temperature''displacement_speed']:
        data[f'{f}_nunique'] = data[f].nunique()
    
    data['count'] = len(data)
    for f in ['altitude''avg_fuel_consumption''cooling_water_temperature''battery_voltage''day_fuel_consumption''displacement_direction''engine_output_power''engine_speed',
             'fuel_level''hydraulic_oil_temperature''intake_temperature''oil_pressure''pump1_current''pump1_flow''pump1_pressure''pump_total_absorbed_power''pump_total_absorbed_torque',
              'realtime_fuel_consumption''total_idle_time'
             ]:
        data[f'{f}_max'] = data[f].max()
        data[f'{f}_mean'] = data[f].mean()
        data[f'{f}_min'] = data[f].min()
        data[f'{f}_std'] = data[f].std()
        data[f'{f}_skew'] = data[f].skew()
    return data.drop_duplicates('serial_no').drop(origin_cols, axis=1)

在线提交

很多选手在这里遇到了各种提交报错的问题,我也不例外。下面是我踩坑多次后的成功提交的流程,首先将模型文件与run.pyrequirements.txt统一放在文件名为model的文件夹下。


对于run.py,我们需要进行修改以便读取模型进行在线的推理,这里非常重要的部分是我们需要使用绝对路径而非相对路径。

    to_pred_file_list = [os.path.join(to_pred_dir,f) for f in os.listdir(to_pred_dir)]

    result = []
    predictions_lgb = np.zeros((len(to_pred_file_list)))
    data = None
    for path in to_pred_file_list:
        d = pd.read_csv(path)
        d = get_features(d)
        data = pd.concat([data, d])
    features = data.columns
    features = features.drop('serial_no')
    cwd = sys.argv[0]
    # 获取当前路径
    for i in range(5):
        clf = lgb.Booster(model_file=os.path.join(cwd[:-6], f'model_{i}.txt'))
        y_pred = clf.predict(data[features], num_iteration=clf.best_iteration)
        predictions_lgb[:] += y_pred / 5   

    y_pred = [1 if i >= 0.5 else 0 for i in predictions_lgb]
    data['label'] = y_pred
    data[['serial_no''label']].to_csv(result_save_path,index=None)

对于requirements.txt, 我们需要将代码需要安装的库以及版本罗列,如下所示:

pandas==1.2.0
lightgbm==3.2.1
numpy==1.18.1

这里还有一种离线测试的方法,查看是否能够成功运行。

python /home/workspace/project/model/run.py  /home/workspace/train/mode1/ sub.csv

接着打开终端,输入命令进入project目录, 然后对model文件进行压缩,最后使用命令进行提交,将token替换成自己的即可。

cd  /home/workspace/project

zip -r models.zip model

castlecli --third sany --source /home/workspace/project/models.zip --token *********

至此,我们就完成了整个流程,从数据加载特征工程以及模型在线推理的过程,本文所有代码已经上传,在后台回复挖掘机即可。

——END——


扫码二维码

获取更多精彩

老肥码码码


浏览 84
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报