具有一个热编码特征的 Auto-Sklearn 中的特征和特征重要性

Posted

技术标签:

【中文标题】具有一个热编码特征的 Auto-Sklearn 中的特征和特征重要性【英文标题】:Features and Feature importance in Auto-Sklearn with One Hot Encoded Features 【发布时间】:2019-05-30 19:56:37 【问题描述】:

我正在尝试使用 Auto-Sklearn 训练 XGBoost 模型。

https://automl.github.io/auto-sklearn/stable/

模型训练得很好,但是,我需要特征重要性来优化模型并用于报告目的。

autosklearn.classification.AutoSklearnClassifier 没有可以为我执行此操作的功能。

我正在尝试从底层管道中获取特征和特征重要性分数。

我使用以下 GitHub 问题中提供的详细信息尝试了一些事情。

1)https://github.com/automl/auto-sklearn/issues/524

2)https://github.com/automl/auto-sklearn/issues/224

我也尝试过使用“Trace”python 模块。这返回了超过 900,000 行代码。不知道从哪里开始。

我的代码正在进行中,但看起来像:

import pandas as pd
import numpy as np
import autosklearn.classification
import sklearn.model_selection
import sklearn.datasets
import sklearn.metrics
import datetime
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, roc_curve, auc
from sklearn import preprocessing
from sklearn.preprocessing import LabelEncoder
import eli5 as eli
import pdb
df = pd.read_csv('titanic_train.csv')
df_target = df['Survived']
drop_Attbr = ['PassengerId', 'Name', 'Ticket', 'Cabin','Survived','Sex','Embarked']
df_labels = df.drop(drop_Attbr,axis=1)
feature_types = ['categorical'] +['numerical']+(['categorical']* 2)+['numerical']
df_train, df_test, y_train, y_test = train_test_split(df_labels, df_target, test_size=1/3, random_state=42)
automl = autosklearn.classification.AutoSklearnClassifier(
        time_left_for_this_task=15,
        per_run_time_limit=5,
        ensemble_size=1,
        disable_evaluator_output=False,
        resampling_strategy='holdout',
        resampling_strategy_arguments='train_size': 0.67,
        include_estimators=['xgradient_boosting']
    )
automl.fit(df_train, y_train,feat_type=feature_types)
y_hat = automl.predict(df_test)
a_score = sklearn.metrics.accuracy_score(y_test, y_hat)
print("Accuracy score "+str(a_score))

我正在寻找类似的结果:

Feature 1 : Feature Importance score 1;
Feature 2 : Feature Importance score 2;
Feature 3 : Feature Importance score 3;
Feature 4 : Feature Importance score 4;
Feature 5 : Feature Importance score 5;

【问题讨论】:

在 pythoin 'auto_ml' 中多了一个库。您可以使用“pip install auto_ml”安装它。它有一个参数“ml_for_analytics”,如果设置为 true,可以为您提供您正在寻找的报告。 我目前正在使用“auto_ml”。我们想将我们的管道转移到 Auto-Sklearn。 【参考方案1】:

试试这个!

for identifier in automl._automl._automl.model_:
    if identifier in automl.ensemble_.get_selected_model_identifiers():
        model = automl._automl._automl.models_[identifier].pipeline_._final_estimator()
        print(model.get_score())   

【讨论】:

对于 ensemble_size=1,print(automl.get_models_with_weights()) 给出类似link 的输出。我认为,它没有枚举功能。有没有办法从底层 Auto-Sklearn 管道中获取它? 它看起来像集成模型的权重。我已经更新了我的解决方案,你能试试吗 试了几个版本的代码,出现属性错误,截图如下:screenshot 1screenshot 2 实际上我无法在我的机器上安装 autosklearn,这就是我无法检查自己的原因。可以试试最新的吗。谢谢 谢谢,我会调查的。解决方案有效吗?

以上是关于具有一个热编码特征的 Auto-Sklearn 中的特征和特征重要性的主要内容,如果未能解决你的问题,请参考以下文章

一种热编码分类特征 - 仅稀疏形式

特征组合--组合独热矢量

应用一个热编码器后如何改变决策树的特征阈值?

OneHotEncoder独热编码和 LabelEncoder标签编码

python离散特征编码

如何对变体长度特征进行一种热编码?