【AutoGluon_02】更优精度与特征重要性

除了autogluon最基础的模型之外,还可以对其进行调参等操作,这样跑出来可以有更高的准确率。

1、优化改良版autogluon

参数设置:

(参数设置)增加训练时间的一般都会增加输出精度
time_limit : 模型训练的最长等待时间,通常不设置
eval_metric: 指定评价指标例如,AUC还是精度等
‘f1’ (for binary classification), 
‘roc_auc’ (for binary classification), 
‘log_loss’ (for classification), ‘
‘mean_absolute_error’ (for regression),
‘median_absolute_error’ (for regression)
presets: 默认为’medium_quality_faster_train’,可以按medium_quality good_quality high_quality best_quality的顺序测试,找到适合的模型。损失了精度但是速度比较快。要是设置为“best_quality”,则会做bagging和stacking以提高性能。
presets=‘best_quality’:利用bagging/staking,准确度高但是运行时间长。
presets=‘medium_quality’:选择的算法运行时间较短,但准确率会差一点。
折中的办法就是:presets=[‘good_quality’, ‘optimize_for_deployment’]
Tuning_data: 这个作为验证集数据的参数,官网建议如果没有特别的理由时不加,让机器自己从训练集中分割出一小部分验证集,这边值得一提的是机器还能自己根据数据使用分层抽样等,可以说是非常人性化了。
holdout_frac:这个参数指定从训练集出分割出多少比例的验证集
num_bag_folds = 5-10,这个应该是类似k倍交叉验证,会增加训练时间
num_stack_levels = 1-3,stacking 水平
num_bag_sets:减少方差,但是增加训练时间

优化改良版代码:

import pandas as pd
from sklearn.model_selection import train_test_split
from autogluon.tabular import TabularDataset, TabularPredictor

df = TabularDataset('test.csv')
label = "label"
X=df
y=df[label]

#划分数据集并使用autogluon自动训练,  可根据需要指定预测方式problem_type=‘regression’: 回归问题;‘classfication’: 分类问题
train_x,test_x,train_y,test_y=train_test_split(X,y,test_size=0.2,random_state=0)
predictor = TabularPredictor(label= label).fit(train_data=train_x,ag_args_fit={'num_gpus':-1})
# predictor = tabular.TabularPredictor(label='Label_mL',problem_type='regression').fit(train_data=train_x,ag_args_fit={'num_gpus':-1})

#使用高质量模型
# time_limit = 60  # for quick demonstration only, you should set this to longest time you are willing to wait (in seconds)
# metric = 'roc_auc'
# predictor = TabularPredictor(label= label, eval_metric=metric).fit(train_data=train_x, time_limit=time_limit, presets='best_quality',ag_args_fit={'num_gpus':-1})

test_data = TabularDataset(test_x)
leaderboard = predictor.leaderboard(test_data)   #预测结果看板

#删除标签列作为测试集 ; 也可以选择一个新的需要预测的数据
test_data_t=test_x.drop(labels=[ label],axis=1)
# df2 = TabularDataset('能力值_.csv')
# test_data_t = df2.drop(labels=[ label],axis=1)

#方式1:使用指定最优模型输出结果
# pred_y=predictor.predict(test_data_t,model='XGBoost')
#方式2:使用默认predictor模型输出结果
pred_y=predictor.predict(test_data_t)
print(pred_y) #打印预测结果
#预测发生的概率
proba_y=predictor.predict_proba(test_data_t)
print(proba_y)

#结果输出
test_x["pred_y"] = pred_y
test_x
# df["proba_y"] = proba_y[1]
# df2.to_csv("result2.csv",encoding="utf_8_sig")

2、快速使用

autogluon自动寻找最优模型:

from autogluon.tabular import TabularDataset, TabularPredictor
train_data = TabularDataset('https://autogluon.s3.amazonaws.com/datasets/In
c/train.csv')
test_data = TabularDataset('https://autogluon.s3.amazonaws.com/datasets/In
c/test.csv')
predictor = TabularPredictor(label='class').fit(train_data=train_data)
predictions = predictor.predict(test_data)
score = predictor.evaluate(test_data)

3、模型训练

  • 将数据转换为 autogluon 中所需格式,并定义预测标签,不考虑时间成本追求最优模型,5择交
    叉检验、模型融合
  • 使⽤CPU训练了⼤约20分钟,可以看到最优模型为 WeightedEnsemble_L3
from autogluon.tabular import TabularDataset, TabularPredictor
train_data = TabularDataset(df_train)
# 预测标签
label = 'satisfaction_level'
# 模型保存⽂件名
save_path = 'agModels-predictClass'
# 建⽴预测模型,verbosity(0~4),默认为2就好
predictor = TabularPredictor(label=label,path=save_path,verbosity=0)
# presets='best_quality'不考虑时间成本,追求最好模型
predictor.fit(train_data,presets='best_quality',num_bag_folds=5,num_bag_se
ts=1,num_stack_levels=1)
# 输出模型表现
predictor.leaderboard(silent=True)

在这里插入图片描述

轻量级超参数:

predictor_light = TabularPredictor(label=label, eval_metric=metric).fit(tra
in_data, hyperparameters='very_light', time_limit=30)
excluded_model_types = ['KNN', 'NN_TORCH', 'custom']
predictor_light = TabularPredictor(label=label, eval_metric=metric).fit(tra
in_data, excluded_model_types=excluded_model_types, time_limit=30)

4、更高的输出精度

time_limit = 60 # for quick demonstration only, you should set this to lon
gest 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, tim
e_limit=time_limit, presets='best_quality')
predictor.leaderboard(test_data, silent=True)

在这里插入图片描述

使用GPU训练:

from autogluon.tabular import TabularPredictor
predictor = TabularPredictor(label=label).fit(
 train_data=train_data,
 hyperparameters=hyperparameters,
 feature_metadata=feature_metadata,
 # presets = 'best_quality',
 time_limit=0.2*3600,
 ag_args_fit={'num_gpus':-1})
# # by default, all available gpus are used by AutoMM
# predictor.fit(hyperparameters={"env.num_gpus": -1})
# # use 1 gpu only
# predictor.fit(hyperparameters={"env.num_gpus": 1})

5、模型评估

(1)模型排行榜

predictor.leaderboard(test_data, silent=True)#输出排⾏榜
predictor.leaderboard(extra_info=True, silent=True)#输出拓展的每个算法运⾏数据的排⾏榜

(2)输出各特征重要性

# 删除其余模型(减少内存开销)
predictor.delete_models(models_to_keep='best')
# 输出最优模型
predictor.get_model_best()
# 输出特征重要程度
predictor.feature_importance(train_data)

在这里插入图片描述

(3)模型性能可视化

返回拟合过程中的各个指标:时间、精度等

results = predictor.fit_summary(show_plot=True)

在这里插入图片描述

6、输出最终模型

直接输出6种评估指标,以及预测结果

perf = predictor.evaluate_predictions(y_true=y_test, y_pred=y_pred, auxilia
ry_metrics=True)# 结果评估

在这里插入图片描述
输出指定值,准确率、召回率、F1值

7、预测

查看模型信息:

predictor.problem_type # 查看预测类型,即回归还是分类
predictor.feature_metadata # 数据标签列的数据类型
predictor.features() # 特征
predictor.get_model_best() # 输出表现最好的模型

导⼊测试数据集, autogluon 会⾃动使⽤最优模型进⾏预测:

# 导⼊预测数据
test_data = TabularDataset(df_test)
# 导⼊模型
predictor = TabularPredictor.load(save_path)
# 得到预测值
y_pred = predictor.predict(test_data)
y_pred
#预测发⽣的概率
proba_y=predictor.predict_proba(test_data_t)
print(proba_y)

当我们调⽤时,AutoGluon 会⾃动使⽤ 在验证数据上显示最佳性能的模型(即 加权系综)。相反,我们
可以指定⽤于哪个模型 像这样的预测:predict()

predictor.predict(test_data)
predictor.predict(test_data, model='LightGBM')
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温欣2030

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值