intel oneAPI2023黑客松大赛赛道二建模方案介绍

intel oneAPI2023黑客松大赛赛道二建模方案介绍

       本次和小伙伴报名了赛道二:淡水质量预测。这个赛题主要是给出24个特征变量(标签变量、类别变量、文本变量、数值变量等)共计5956842条数,标签1和标签0的比例约为3:7,本质是个二分类问题。

       由于主办方没有给出测试集,所以要自己本地划分测试集做分析,我们主要按75:25的比例划分了训练集和测试集,并采用accuracy作为评估指标。参考主办方给出的相关代码文件GitHub - idz-cn/2023hackathon: 2023 Hackathon,主要使用modin、sklearex和xgboost三个工具。其中modin用于加速数据读取和数据加工,可无缝衔接原生pandas接口;sklearnex无缝优化skearn了的相关模型和算法,包括但不限于逻辑回归、朴素贝叶斯;xgboost主要是表格类分类题目的神兵利器。建模流程包括数据读取、数据预处理、模型训练与模型评估。

                                                               数据预处理代码

le_cat = 'Color, Source, Month'.split(', ')
for i in le_cat:
    le = LabelEncoder()
    data[i] = data[i].astype('str')
    data[i] = le.fit_transform(data[i])
   其他一些工作还包括没有提升的特征工程:对一些特征重要度比较高的特征进行减法和除法运算,衍生新的特征,但没有实际提升;分Source和Month进行建模也没有提升;对类别变量进行频率计算也没有提升。

                                                             模型训练与推理代码

# XGB模型十折交叉平权融合预测
def train_and_predict(train_data,train_label,test_data):
    NFOLD = 10
    random_state = 2021
    KF = StratifiedKFold(n_splits=NFOLD, shuffle=True, random_state=random_state)
    oof_xgb = np.zeros(len(train))
    predictions_xgb = np.zeros(len(test))
    params = {'booster': 'gbtree',
                      'objective': 'binary:logistic',
                      'eval_metric': 'error',
                      'max_depth': 6,
                      'subsample': 0.8,
                      'colsample_bytree': 0.8,
                      'colsample_bylevel': 0.8,
                      'colsample_bynode':0.8,
                      'seed': random_state,
                      'nthread': 4,
                      'eta':0.05
                      }
    for fold_, (trn_idx, val_idx) in enumerate(KF.split(train_data,train_label)):
        print('----------------------- fold {} -----------------------'.format(str(fold_+1)))
        train_matrix = xgboost.DMatrix(train_data.iloc[trn_idx], label = train_label.iloc[trn_idx])
        valid_matrix = xgboost.DMatrix(train_data.iloc[val_idx], label = train_label.iloc[val_idx])
        test_matrix = xgboost.DMatrix(test_data)
        valid_oof = xgboost.DMatrix(train_data.iloc[val_idx])
        watchlist = [(train_matrix, 'train'),(valid_matrix, 'eval')]
        model = xgboost.train(params, train_matrix, num_boost_round = 50000, evals = watchlist, verbose_eval = 200, early_stopping_rounds = 200)
        predictions_xgb[:] += (model.predict(test_matrix , ntree_limit = model.best_ntree_limit)/ NFOLD)
        oof_xgb[val_idx] = model.predict(valid_oof , ntree_limit = model.best_ntree_limit)

    return predictions_xgb , oof_xgb

pred_xgb , oof_xgb = train_and_predict(train,train_label,test)

 在建模分析中,十折调参的lightgbm和十折xgboost的平权集成融合 > 十折xgboost > 一折xgboost。

 整体建模方案比较简单。主要收获是了解到英特尔OneAPI的相关机器学习工具包,面对大数据量场景可以有效加速数据读取和数据处理,在本机测试中modin【Ray】确实能优化pandas的数据读取。对于sklearn的优化,下面两行就能加速优化,非常方便(需要放在sklearn包导入前)。

from sklearnex import patch_sklearn
patch_sklearn()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值