今天老肥和大家分享的是三一数据应用大赛-挖掘机工作模式识别的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.py
、requirements.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——