文章目录

  • 写在前面
  • 安装必要的模块和文件
  • 1.模块
  • 2.文件
  • 下载数据
  • 读取数据
  • 训练模型
  • 训练过程
  • 评估模型效果
  • 测试集
  • 准备提交材料
  • 提交结果
  • 写在最后
  • 后面的训练


写在前面

这篇接上一篇教程2,终于要看到autogluon在竞赛中的应用了。

安装必要的模块和文件

1.模块

pip install kaggle

2.文件

下载API文件,通过在kaggle个人账号,点击头像

kaggle双gpu跑不满 kaggle gpu使用_数据


kaggle双gpu跑不满 kaggle gpu使用_读取数据_02


kaggle双gpu跑不满 kaggle gpu使用_json_03


然后会得到一个kaggle.json文件,如果你是用kaggle cli 工具时,且你的电脑是Linux,OSX或其他基于UNIX系统时,把这个文件放置在~/.kaggle/kaggle.json ,windows则放置在C:\Users.kaggle\kaggle.json。不使用客户端的时候就无所谓了

下载数据

可以通过命令行下载数据

kaggle competitions download -c [COMPETITION]
kaggle competitions download -c ieee-fraud-detection

这边的[COMPETITION]替换为项目名,我这边将其改成了ieee-fraud-detection,但是下载过程报了403 error,也就是说没有kaggle服务器理解了我的这次下载请求,但由于我没有权限访问而拒绝了。查看了下我的json文件和放置位置,正常,折腾了一下下没有解决,算了改为手动下载吧。

原文件信息如下(五个子文件):

kaggle双gpu跑不满 kaggle gpu使用_数据_04

读取数据

在做实践中,改下自己的目录directory即可

import pandas as pd
import numpy as np
from autogluon.tabular import TabularPredictor

directory = '~/github/ieee-fraud-detection/'  # directory where you have downloaded the data CSV files from the competition
label = 'isFraud'  # name of target variable to predict in this competition
eval_metric = 'roc_auc'  # Optional: specify that competition evaluation metric is AUC
save_path = directory + 'AutoGluonModels/'  # where to store trained models

train_identity = pd.read_csv(directory+'train_identity.csv')
train_transaction = pd.read_csv(directory+'train_transaction.csv')

因为训练集包含多个csv文件,所以我们需要将其合并成一个大的csv文件以便后面的AutoGluon语句调用,这边官网也给出了代码。

train_data = pd.merge(train_transaction, train_identity, on='TransactionID', how='left')

简单的合并命令,第一次学到类似的命令还是从成哥的数据库课程学到的,on代表根据那个列名称进行合并,how代表连接方式,表示的是主要以左边还是以右边的数据库为准,或者二者兼容的,具体可查阅命令详情。

训练模型

这边其实跟之前的教程变化不大,但是就是time_limit设置的大了点

predictor = TabularPredictor(label=label, eval_metric=eval_metric, path=save_path, verbosity=3).fit(
    train_data, presets='best_quality', time_limit=3600
)

results = predictor.fit_summary()

训练过程

kaggle双gpu跑不满 kaggle gpu使用_json_05


kaggle双gpu跑不满 kaggle gpu使用_kaggle双gpu跑不满_06


训练一万轮,但是大约在700多就迭代停止了,因为实在是太慢了,我都看了n个冰冰的视频了,程序还没跑完我就手动停止了,哈哈哈。

kaggle双gpu跑不满 kaggle gpu使用_数据_07


快速训练

subsample_size = 500  # subsample subset of data for faster demo, try setting this to much larger values
train_data = train_data.sample(n=subsample_size, random_state=0)
print(train_data.head())
predictor = TabularPredictor(label=label, eval_metric=eval_metric, path=save_path, verbosity=3).fit(
    train_data, presets='best_quality'
)

评估模型效果

测试集

测试集同样做与训练集一致的操作,因为训练集的列名和测试集的列名有着不一样,是id-10与id_10的区别,所以列名做了个修改

test_identity = pd.read_csv(directory+'test_identity.csv')
test_transaction = pd.read_csv(directory+'test_transaction.csv')
test_data = pd.merge(test_transaction, test_identity, on='TransactionID', how='left')  # same join applied to training files
a = [i.replace("-","_") for i in test_data.columns]
subsample_size = 500  # subsample subset of data for faster demo, try setting this to much larger values
test_data = test_data.sample(n=subsample_size, random_state=0)


y_predproba = predictor.predict_proba(test_data)
y_predproba.head(5)  # some example predicted fraud-probabilities

kaggle双gpu跑不满 kaggle gpu使用_数据_08

预测的正类是什么

predictor.positive_class

kaggle双gpu跑不满 kaggle gpu使用_json_09

预测的分类时

predictor.class_labels  # classes in this list correspond to columns of predict_proba() output

kaggle双gpu跑不满 kaggle gpu使用_json_10

预测分类的概率,且指指定正类

y_predproba = predictor.predict_proba(test_data, as_multiclass=False)

准备提交材料

submission = pd.read_csv(directory+'sample_submission.csv')
submission['isFraud'] = y_predproba
submission.head()
submission.to_csv(directory+'my_submission.csv', index=False)

提交结果

kaggle competitions submit -c ieee-fraud-detection -f sample_submission.csv -m "my first submission"

写在最后

大概关于在kaggle项目中autoGluon的应用就是大致如此了,感觉跟我想的不大一样呀,我以为的是比较高大上,怎么一到我这儿就这么平民的感觉了。唉,果然还是太菜了么。

后面的训练

本来想要用全部样本训练的,然后只训练一个分类器,但是没办法还是显示内存不够

nn_options = {  # specifies non-default hyperparameter values for neural network models
    'num_epochs': 10
}
hyperparameter_tune_kwargs = { 
    'num_trials': num_trials,
    'scheduler' : 'local',
    'searcher': search_strategy,
}
num_trials = 5  # try at most 5 different hyperparameter configurations for each type of model
search_strategy = 'auto'  
hyperparameters = { 
                   'NN': nn_options
                  } 
predictor = TabularPredictor(label=label, eval_metric=eval_metric, path=save_path, verbosity=3).fit(
    train_data, presets='good_quality_faster_inference_only_refit',
    hyperparameters=hyperparameters, hyperparameter_tune_kwargs=hyperparameter_tune_kwargs
)