三一挖掘機(jī)工作模式識(shí)別Baseline分享
今天老肥和大家分享的是三一數(shù)據(jù)應(yīng)用大賽-挖掘機(jī)工作模式識(shí)別的Baseline方案,全流程需在DCLab平臺(tái)上進(jìn)行,選手需要在平臺(tái)上進(jìn)行數(shù)據(jù)處理、算法調(diào)試。現(xiàn)在很多比賽平臺(tái)出于數(shù)據(jù)保密等原因都需要在平臺(tái)上進(jìn)行數(shù)據(jù)處理、模型訓(xùn)練與預(yù)測(cè),平臺(tái)的使用方法不盡相同,這也是我第一次使用DCLab平臺(tái),很多選手都遇到了無法成功提交的問題,現(xiàn)在就來來替大家踩踩坑,讓大家少走一些彎路。
數(shù)據(jù)兌閱與導(dǎo)入
在成功報(bào)名比賽通過審核之后,使用DC平臺(tái)發(fā)送的站內(nèi)郵件里的兌閱碼對(duì)數(shù)據(jù)進(jìn)行兌閱。

然后創(chuàng)建項(xiàng)目之后將數(shù)據(jù)動(dòng)態(tài)掛載,在notebook中輸入命令對(duì)數(shù)據(jù)進(jìn)行解壓縮操作。
!ls ../input/*/*.zip | xargs -n1 unzip -d /home/workspace/
模型訓(xùn)練
導(dǎo)入數(shù)據(jù)之后我們可以在notebook中進(jìn)行數(shù)據(jù)讀取、特征提取與模型訓(xùn)練,這里的過程與在本地進(jìn)行數(shù)據(jù)挖掘無異,每一個(gè)文件作為一行數(shù)據(jù)來進(jìn)行模型訓(xùn)練,下面是我采用的一個(gè)粗糙的統(tǒng)計(jì)特征提取過程。模型訓(xùn)練完成之后記得將模型保存以便提交的時(shí)候進(jìn)行推理使用。
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)
在線提交
很多選手在這里遇到了各種提交報(bào)錯(cuò)的問題,我也不例外。下面是我踩坑多次后的成功提交的流程,首先將模型文件與run.py、requirements.txt統(tǒng)一放在文件名為model的文件夾下。

對(duì)于run.py,我們需要進(jìn)行修改以便讀取模型進(jìn)行在線的推理,這里非常重要的部分是我們需要使用絕對(duì)路徑而非相對(duì)路徑。
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]
# 獲取當(dāng)前路徑
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)
對(duì)于requirements.txt, 我們需要將代碼需要安裝的庫以及版本羅列,如下所示:
pandas==1.2.0
lightgbm==3.2.1
numpy==1.18.1
這里還有一種離線測(cè)試的方法,查看是否能夠成功運(yùn)行。
python /home/workspace/project/model/run.py /home/workspace/train/mode1/ sub.csv
接著打開終端,輸入命令進(jìn)入project目錄, 然后對(duì)model文件進(jìn)行壓縮,最后使用命令進(jìn)行提交,將token替換成自己的即可。
cd /home/workspace/project
zip -r models.zip model
castlecli --third sany --source /home/workspace/project/models.zip --token *********
至此,我們就完成了整個(gè)流程,從數(shù)據(jù)加載特征工程以及模型在線推理的過程,本文所有代碼已經(jīng)上傳,在后臺(tái)回復(fù)「挖掘機(jī)」即可。
——END——
掃碼二維碼
獲取更多精彩
老肥碼碼碼

