调研AutoGluon数据处理与Tabular-NN

hyperparams = {'NN': {'num_epochs': 10, 'activation': 'relu', 'dropout_prob': ag.Real(0.0,0.5)}, 'GBM': {'num_boost_round': 1000, 'learning_rate': ag.Real(0.01,0.1,log=True)} }进入autogluon.task.tabular_prediction.tabular_prediction.Tabular
摘要由CSDN通过智能技术生成

可以参考一下这篇博客:AutoGluon Tabular 表数据全流程自动机器学习 AutoML ,不过这位博主虽然有所总结,但是没有深入代码层面。

剥开果壳,直击AG技术核心

hyperparams = {
   'NN': {
   'num_epochs': 10, 'activation': 'relu', 'dropout_prob': ag.Real(0.0,0.5)}, 
               'GBM': {
   'num_boost_round': 1000, 'learning_rate': ag.Real(0.01,0.1,log=True)} }

进入autogluon.task.tabular_prediction.tabular_prediction.TabularPrediction#fit,映入眼帘的是

learner = Learner(path_context=output_directory, label=label, problem_type=problem_type, objective_func=eval_metric, stopping_metric=stopping_metric,
                  id_columns=id_columns, feature_generator=feature_generator, trainer_type=trainer_type,
                  label_count_threshold=label_count_threshold, random_seed=random_seed)
learner.fit(X=train_data, X_test=tuning_data, scheduler_options=scheduler_options,
            hyperparameter_tune=hyperparameter_tune, feature_prune=feature_prune,
            holdout_frac=holdout_frac, num_bagging_folds=num_bagging_folds, num_bagging_sets=num_bagging_sets, stack_ensemble_levels=stack_ensemble_levels,
            hyperparameters=hyperparameters, ag_args_fit=ag_args_fit, excluded_model_types=excluded_model_types, time_limit=time_limits_orig, save_data=cache_data, save_bagged_folds=save_bagged_folds, verbosity=verbosity)

Learner:autogluon.utils.tabular.ml.learner.default_learner.DefaultLearner#__init__

Learner encompasses full problem, loading initial data, feature generation, model training, model prediction

进入autogluon.utils.tabular.ml.learner.default_learner.DefaultLearner#fit

X, y, X_test, y_test, holdout_frac, num_bagging_folds = 
self.general_data_processing(X, X_test, holdout_frac, num_bagging_folds)

进入当前代码文件的general_data_processing函数

首先看到的就是这个代码,先mark一下。不会爆内存?

X = copy.deepcopy(X)

label的缺失值

missinglabel_inds = [index for index, x in X[self.label].isna().iteritems() if x]

处理缺失值的方法是drop

X = X.drop(missinglabel_inds, axis=0)

mark一下当前代码文件的get_problem_type函数。 problem type有MULTICLASS_LIMITBINARYREGRESSION 三种类型

其实是4种。还有一个闻所未闻的softclass。详情见autogluon/utils/tabular/ml/constants.py:5

处理完标签,就开始处理特征了。

如果定义了X_test,就叠起来一起做特征工程。这个操作属于基操,不过要小心数据泄露。

X_super = pd.concat([X, X_test], ignore_index=True)
。。。处理。。。
X = X_super.head(len(X)).set_index(X.index)
X_test = X_super.tail(len(X_test)).set_index(X_test.index)

好,开始看数据处理

X = self.feature_generator.fit_transform(X, banned_features=self.submission_columns, drop_duplicates=False)

self.feature_generator来自autogluon.utils.tabular.features.auto_ml_feature_generator.AutoMLFeatureGenerator
进入之。

mark代码文件下get_feature_types函数,用于解析date特征与text特征,值得借鉴。

minimize_categorical_memory_usage函数中,是用这种神奇的方法做OrdinalEncoding的(传入前已经将object处理成了category)

for column in cat_columns:
    new_categories = list(range(len(X_features[column].cat.categories.values)))
    X_features[column].cat.rename_categories(new_categories, inplace=True)

出栈,回到autogluon/utils/tabular/ml/learner/default_learner.py:66

self.trainer_type
<class 'autogluon.utils.tabular.ml.trainer.auto_trainer.AutoTrainer'>

进入autogluon.utils.tabular.ml.trainer.auto_trainer.AutoTrainer#train函数

处理超参数(看不出个所以然来)

self.hyperparameters = self._process_hyperparameters(hyperparameters=hyperparameters, ag_args_fit=ag_args_fit, excluded_model_types=excluded_model_types)

获取模型

models = self.get_models(hyperparameters=self.hyperparameters, hyperparameter_tune=hyperparameter_tune, level=0)

获取模型的get_models函数调用了autogluon.utils.tabular.ml.trainer.model_presets.presets.get_preset_models

level_key = default

怀疑modelkwargs

model
{
   'num_epochs': 10, 'activation': 'relu', 'dropout_prob': Real: lower=0.0, upper=0.5, 'AG_args': {
   'model_type': 'NN'}}

果然,autogluon/utils/tabular/ml/trainer/model_presets/presets.py:129

model_names_set.add(name)
model_params = copy.deepcopy(model)
model_params.pop(AG_ARGS)

model_init就是模型实例了

model_init = model_type(path=path, name=name, problem_type=problem_type, objective_func=objective_func, stopping_metric=stopping_metric, num_classes=num_classes, hyperparameters=model_params)

进入autogluon.utils.tabular.ml.models.abstract.abstract_model.AbstractModel#__init__

mark一下TabularNN的所在地为autogluon.utils.tabular.ml.models.tabular_nn.tabular_nn_model.TabularNeuralNetModel

进入autogluon.utils.tabular.ml.trainer.abstract_trainer.AbstractTrainer#stack_new_level
有是个数据处理?每太看懂

X_train_init = self.get_inputs_to_stacker(X, level_start=0, level_end=level, fit=True)
return self.train_multi(X_train=X_train_init,
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值