前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三一挖掘机工作模式识别Baseline分享

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

作者头像
老肥码码码
发布2021-06-21 20:21:44
7410
发布2021-06-21 20:21:44
举报

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

数据兑阅与导入

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

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

代码语言:javascript
复制
!ls ../input/*/*.zip | xargs -n1 unzip -d /home/workspace/ 

模型训练

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

代码语言:javascript
复制

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,我们需要进行修改以便读取模型进行在线的推理,这里非常重要的部分是我们需要使用绝对路径而非相对路径。

代码语言:javascript
复制
    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, 我们需要将代码需要安装的库以及版本罗列,如下所示:

代码语言:javascript
复制
pandas==1.2.0
lightgbm==3.2.1
numpy==1.18.1

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

代码语言:javascript
复制
python /home/workspace/project/model/run.py  /home/workspace/train/mode1/ sub.csv

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

代码语言:javascript
复制
cd  /home/workspace/project

zip -r models.zip model

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

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

代码语言:javascript
复制
——END——

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与数据之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据兑阅与导入
  • 模型训练
  • 在线提交
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档