AutoGluon-教程2-提升更高精度

  • 写在前面
  • 订正
    • 训练模型(加入验证集)
      • 选定特定分类器
      • 如何获取指定分类器的参数
    • 额外部分
      • 输出预测概率
      • 在测试集上定义其他输出标准
      • 拟合过程中发生了什么
      • 更高的输出精度(参数设置)
      • 定义搜索空间
        • 训练结果
      • 模型的解释性(特征的重要性)
    • 减少时间操作
      • 删除模型中部分分类器
      • 将交叉验证的模型整合到一块去
      • 参数部分
    • 碰到内存不够怎么办
    • 硬盘空间不够怎么办
  • 写在后面

写在前面

接上一节喽,链接:

订正

关于predict.显示的模型一般是最优模型,而最优模型可由predictor.get_model_best()获得

训练模型(加入验证集)

# 加载训练集
from autogluon.tabular import TabularDataset, TabularPredictor
import numpy as np
train_data = TabularDataset('https://autogluon.s3.amazonaws.com/datasets/Inc/train.csv')
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())# 加载验证集和测试集
new_data = TabularDataset('https://autogluon.s3.amazonaws.com/datasets/Inc/test.csv')
test_data = new_data[5000:].copy()  # this should be separate data in your applications
y_test = test_data[label]
test_data_nolabel = test_data.drop(columns=[label])  # delete label column
val_data = new_data[:5000].copy()# 定义评估指标,accuracy是默认的
metric = 'accuracy' # we specify eval-metric just for demo (unnecessary as it's the default)

选定特定分类器

predictor.predict(test_data, model='LightGBM')

如何获取指定分类器的参数

all_models = predictor.get_model_names()
model_to_use = all_models[i]
specific_model = predictor._trainer.load_model(model_to_use)# Objects defined below are dicts of various information (not printed here as they are quite large):
model_info = specific_model.get_info()
predictor_information = predictor.info()

这边我看了model_info,里面就是

这个应该就是模型的具体信息了,着实有点多,让人眼花缭乱。

额外部分

输出预测概率

pred_probs = predictor.predict_proba(test_data_nolab)
pred_probs.head(5)

在测试集上定义其他输出标准

predictor.leaderboard(test_data, extra_metrics=['accuracy', 'balanced_accuracy', 'log_loss'], silent=True)


可以选择的输出有’[‘accuracy’, ‘acc’, ‘balanced_accuracy’, ‘mcc’, ‘roc_auc’, ‘roc_auc_ovo_macro’, ‘average_precision’, ‘log_loss’, ‘nll’, ‘pac_score’, ‘precision’, ‘precision_macro’, ‘precision_micro’, ‘precision_samples’, ‘precision_weighted’, ‘recall’, ‘recall_macro’, ‘recall_micro’, ‘recall_samples’, ‘recall_weighted’, ‘f1’, ‘f1_macro’, ‘f1_micro’, ‘f1_samples’, ‘f1_weighted’, ‘r2’, ‘mean_squared_error’, ‘mse’, ‘root_mean_squared_error’, ‘rmse’, ‘mean_absolute_error’, ‘mae’, ‘median_absolute_error’, ‘spearmanr’, ‘pearsonr’, ‘pinball_loss’, ‘pinball’, ‘soft_log_loss’]’,兄弟,眼睛花不花,哈哈哈。

拟合过程中发生了什么

results = predictor.fit_summary()

这张图的score_val代表的是模型在验证集的性能表现,而pred_time_则表示在集上预测所花的时间,还有就是fit_*拟合的时间

更高的输出精度(参数设置)

增加训练时间的一般都会增加输出精度

  • time_limit : 模型训练的最长等待时间,通常不设置
  • eval_metric: 评估指标,AUC还是精度等
  • presets: 默认为’medium_quality_faster_train’,损失了精度但是速度比较快。要是设置为“best_quality”,则会做bagging和stacking以提高性能
  • Tuning_data: 这个作为验证集数据的参数,官网建议如果没有特别的理由时不加,让机器自己从训练集中分割出一小部分验证集,这边值得一提的是机器还能自己根据数据使用分层抽样等,可以说是非常人性化了。
  • holdout_frac:这个参数指定从训练集出分割出多少比例的验证集
  • num_bag_folds = 5-10,这个应该是类似k倍交叉验证,会增加训练时间
  • num_stack_levels = 1-3,stacking 水平
  • num_bag_sets:减少方差,但是增加训练时间
time_limit = 60  # for quick demonstration only, you should set this to longest time you are willing to wait (in seconds)
metric = 'roc_auc'  # specify your evaluation metric here
predictor = TabularPredictor(label, eval_metric=metric).fit(train_data, time_limit=time_limit, presets='best_quality')
predictor.leaderboard(test_data, silent=True)

定义搜索空间

import autogluon.core as agnn_options = {  # specifies non-default hyperparameter values for neural network models'num_epochs': 10,  # number of training epochs (controls training time of NN models)'learning_rate': ag.space.Real(1e-4, 1e-2, default=5e-4, log=True),  # learning rate used in training (real-valued hyperparameter searched on log-scale)'activation': ag.space.Categorical('relu', 'softrelu', 'tanh'),  # activation function used in NN (categorical hyperparameter, default = first entry)'layers': ag.space.Categorical([100], [1000], [200, 100], [300, 200, 100]),  # each choice for categorical hyperparameter 'layers' corresponds to list of sizes for each NN layer to use'dropout_prob': ag.space.Real(0.0, 0.5, default=0.1),  # dropout probability (real-valued hyperparameter)
}gbm_options = {  # specifies non-default hyperparameter values for lightGBM gradient boosted trees'num_boost_round': 100,  # number of boosting rounds (controls training time of GBM models)'num_leaves': ag.space.Int(lower=26, upper=66, default=36),  # number of leaves in trees (integer hyperparameter)
}hyperparameters = {  # hyperparameters of each model type'GBM': gbm_options,'NN': nn_options,  # NOTE: comment this line out if you get errors on Mac OSX}  # When these keys are missing from hyperparameters dict, no models of that type are trainedtime_limit = 2*60  # train various models for ~2 min
num_trials = 5  # try at most 5 different hyperparameter configurations for each type of model
search_strategy = 'auto'  # to tune hyperparameters using Bayesian optimization routine with a local schedulerhyperparameter_tune_kwargs = {  # HPO is not performed unless hyperparameter_tune_kwargs is specified'num_trials': num_trials,'scheduler' : 'local','searcher': search_strategy,
}predictor = TabularPredictor(label=label, eval_metric=metric).fit(train_data, tuning_data=val_data, time_limit=time_limit,hyperparameters=hyperparameters, hyperparameter_tune_kwargs=hyperparameter_tune_kwargs,
)

这部分就是根据自己的需求个性化定义一下搜索空间了,然后由于定义了搜索空间,所以这模型就只有nn和GBM了

训练结果

y_pred = predictor.predict(test_data_nolabel)
print("Predictions:  ", list(y_pred)[:5])
perf = predictor.evaluate(test_data, auxiliary_metrics=False)
results = predictor.fit_summary()


可以看到准确率只有0.29,下面是其他模型的准确率

模型的解释性(特征的重要性)

芜湖,特征的重要性来喽。

predictor.feature_importance(test_data)


这样如果你需要进行特征工程或缩小特征的话,也可以运行这部分代码哦。我是一般在深度学习不过滤特征的,机器学习过程会过滤特征。

减少时间操作

# 模型启用
predictor.persist_models()num_test = 20
preds = np.array(['']*num_test, dtype='object')
for i in range(num_test):datapoint = test_data_nolabel.iloc[[i]]pred_numpy = predictor.predict(datapoint, as_pandas=False)preds[i] = pred_numpy[0]perf = predictor.evaluate_predictions(y_test[:num_test], preds, auxiliary_metrics=True)
print("Predictions: ", preds)# 释放内存
predictor.unpersist_models()  # free memory by clearing models, future predict() calls will load models from disk

默认情况下,autogluon一次将模型加载到内存中,只有在预测所需时才能成为内存。这种策略对于stacking/bagging是强大的,但导致预测时间较慢。如果计划反复进行预测(例如,在一次的新数据点而不是一个大型测试数据集上),可以首先指定推理所需的所有模型应加载到内存中,如上所示。当然可以指定特定的分类器或全部的分类器模型
我是用不上这个功能了,感觉

删除模型中部分分类器

additional_ensembles = predictor.fit_weighted_ensemble(expand_pareto_frontier=True)
print("Alternative ensembles you can use for prediction:", additional_ensembles)predictor.leaderboard(only_pareto_frontier=True, silent=True)
model_for_prediction = additional_ensembles[0]
predictions = predictor.predict(test_data, model=model_for_prediction)
predictor.delete_models(models_to_delete=additional_ensembles, dry_run=False)  # delete these extra models so they don't affect rest of tutorial

将交叉验证的模型整合到一块去

refit_model_map = predictor.refit_full()
print("Name of each refit-full model corresponding to a previous bagged ensemble:")
print(refit_model_map)
predictor.leaderboard(test_data, silent=True)

这边说这么做是可以大大降低memory/latency requirements (but may also reduce accuracy),因为最后整合了所有交叉模型,也就是利用了所有的数据,后面也就没有模型的验证评估了(原先的验证集是从训练集分出的一小块数据)

参数部分

  • hyperparameters: 选择’very_light’,“‘light’”,“toy”
  • time_limit: 选择比较短的时间
  • excluded_model_types:去掉某些已知的训练比较慢的模型
  • presets :跟上面精度提高的类似,不过是选用了不同的参数以达到不同的效果
presets = ['good_quality_faster_inference_only_refit', 'optimize_for_deployment']
predictor_light = TabularPredictor(label=label, eval_metric=metric).fit(train_data, presets=presets, time_limit=30)
excluded_model_types = ['KNN', 'NN', 'custom']
predictor_light = TabularPredictor(label=label, eval_metric=metric).fit(train_data, excluded_model_types=excluded_model_types, time_limit=30,
presets=presets,hyperparameters='very_light')

碰到内存不够怎么办

  • 设置num_bag_sets = 1(也可以尝试大于1)。
  • 设定excluded_model_types = [‘KNN’, ‘XT’ ,‘RF’](或这些模型的某些子集)。
  • 尝试不同的presets。
  • 设置HyperParameters

硬盘空间不够怎么办

  • 删除之前保存过模型的文件夹
  • 调用predictor.save_space()来删除fit生成的中间文件
  • 只保留最优模型,调用语句predictor.delete_models(models_to_keep='best', dry_run=False)
  • 把optimize_for_deployment加到presets 中
    当然,降低磁盘空间的同时,也会使模型的搭建倾向于准确率略小,实际上这是一个时间空间与准确率的权衡

写在后面

大概通过这两篇的写作,我好像对这个模块有一个大致的了解了,接下来看下它对于kaggle竞赛项目的指导作用后,我就要转战第二部分图像预测部分了,希望我的小破电脑能hold住

AutoGluon-教程2-提升更高精度相关推荐

  1. CVPR 2019 | 目标检测之面向更高精度的包围框回归

    CVPR 2019 | 目标检测之面向更高精度的包围框回归 背景介绍 主要内容 包围框参数化 用于包围框回归的KL loss 测试阶段的方差投票机制 实验分析 实验细节: 实验结果: 总结 参考文献 ...

  2. Kali Linux 安全渗透教程第七更 大学霸1.4.3安装至VMware Workstation

    Kali Linux 安全渗透教程<第七更>大学霸 1.4.3安装至VMware Workstation VMware Workstation是一款功能强大的桌面虚拟计算机软件.它允许用户 ...

  3. Kali Linux 安全渗透教程第六更1.4.2 安装至USB驱动器Kali Linux

    1.4.2  安装至USB驱动器Kali Linux 安全渗透教程<第六更> Kali Linux USB驱动器提供了一种能力,它能永久的保存系统设置.永久更新.在USB设备上安装软件包, ...

  4. Kali Linux 安全渗透教程第五更1.4 安装Kali Linux

    Kali Linux 安全渗透教程<第五更>1.4 安装Kali Linux Kali Linux 安全渗透教程<第五更>1.4 安装Kali Linux Kali Linux ...

  5. STM32 进阶教程 4 - 软件实现高精度延时 2

    前言 软件工程师在在实际项目开发过程中,软件延时想必或多或少都有接触过,诸如delay_s(x); delay_ms(x);delay_us(x)等类型的延时函数大家也一定见过或自已曾经实现过,本节给 ...

  6. 联想17TV语音遥控教程 语音点播更方便

    原标题:联想17TV语音遥控教程 语音点播更方便 联想17TV电视集成最先进的语音识别技术,语音遥控功能为用户提供了便利,联想17TV电视语音遥控功能怎么用?下面就为大家讲解联想17TV电视语音遥控操 ...

  7. 【完全免费】全新VRay Next(4.0) for SketchUp 教程入门提升基础篇正式发布!

    作者:活力网 今天为大家带来的是 VRay Next(4.0) for SketchUp入门到提升教程(基础篇) 该系列课程章节大致分为 基础应用.UI界面.参数面板.灯光.材质.物体.综合与案例等 ...

  8. 【2020年BNN网络的SOTA—— ReActNet 】以简单的操作得到更高精度的二值神经网络

    作者| Cocoon 编辑| 3D视觉开发者社区 导语: 本文是由香港科技大学发布于ECCV 2020的论文,是Bi-Real Net作者对二值化研究领域的最新成果,拥有着69.4%的精度,作者通过简 ...

  9. 网站权重的提升更需要得到重视

    众所周知,一个企业网站在同等网站中具有更高的权重,这意味着搜索引擎对该网站的信任程度也越高,同样也会尽最大程度去为相关用户推荐,由此可见网站高权重的重要性.那么我们应该怎样进行网站权重的提高呢?下面就 ...

最新文章

  1. 关于SpringMVC和Struts2的区别
  2. Java Web项目的发布
  3. datatables插件AJAX请求数据报错Uncaught TypeError: Cannot read property ‘length‘ of undefined
  4. 以前我们学计算机编程,在编程之前像计算机一样思考
  5. css改变指针形状,css 指针样式
  6. Android代码抄袭Java曝猛料 新证据出现
  7. virtual析构函数的作用?
  8. Android 替换字体的方式以及同时替换多种字体
  9. 远程桌面管理工具汇总
  10. 腾讯云服务器安装AMH控制面板
  11. 正则只能输入数字java_正则表达式限制输入字符,数字,汉字等
  12. java求1~20阶乘之和
  13. 【VB底层开发经典入门】VB编写植物大战僵尸辅助开发视频教程
  14. [flink]各种大厂开源案例
  15. 福禄克FLUKE TIX650红外热像仪3.5英寸高像素大屏
  16. Android:Volley实现参数,字符数组,文件,图片的上传
  17. 远程服务器和宽带连接711有关系吗,宽带连接错误711,教您电脑宽带连接错误711怎么解决...
  18. 岚图高管解读近50亿融资:东风跟投9亿 考虑后续IPO
  19. 计算机终端通讯380023,华为发布首款5G手机Mate20X,通讯服务商标注册属于第几类?...
  20. 24V转12V,9V,8V,6V,5V,3.3V,3V降压芯片和线性LDO选型介绍

热门文章

  1. 学会数据恢复方法,做数据恢复精灵!
  2. 视频中人体行为识别与理解综述_杨兴江_笔记
  3. N的阶乘(N!)中的末尾有多少个0
  4. 关于H3C 防火墙和交换机做端口汇聚
  5. VC2019 VC2022添加导入Word Excel AutoCAD Surfer等类型库(typelibaray)的方法
  6. 集成工具pager duty 自动打电话
  7. Oracle数据库性能优化杂谈
  8. 数据库性能优化有哪些方式?
  9. RN拆包实践的一些经验教训
  10. Vysor无线连接投屏使用