在sklearn中使用DictVectorizer后如何获得分类特征的重要性

2024-10-01 22:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用sklearn.Ensement.GradientBoostingRegressor训练模特。在

我的数据集包括异构变量,包括数值变量和类别变量。由于sklearn不支持类别变量,所以在输入回归之前,我使用DictVectorizer转换这些分类特征。下面是我的一段代码:

# process numeric and categorical variables separately
lsNumericColumns = []
lsCategoricalColumns = []
for col in dfTrainingSet.columns:
    if (dfTrainingSet[col].dtype == np.object):
        lsCategoricalColumns.append(col)
    else:
        lsNumericColumns.append(col)

# numeric columns
dfNumVariables = dfTrainingSet.loc[:, lsNumericColumns]
dfNumVariables.fillna(0, inplace=True)
arrNumVariables = dfNumVariables.as_matrix()

# categorical columns
dfCateVariables = dfTrainingSet.loc[:,lsCategoricalColumns]
dfCateVariables.fillna('NA', inplace=True)
vectorizer =  DictVectorizer(sparse=False)
arrCateFeatures = vectorizer.fit_transform(dfCateVariables.T.to_dict().values())

# setup training set
arrX = np.concatenate((arrNumVariables,arrCateFeatures), axis=1)
arrY = dfData['Y'].values

然后,训练模型并输出特征重要性:

^{pr2}$

这将给我一个(feature_index,feature_importance)元组的列表。但是,我发现这个特征索引不是原来的特征索引,因为一个分类列可以转换成多个列。

我知道我可以从DictVectorizer得到矢量化的特征名称,但是如何才能发现原始特征的重要性?

我能不能把对应于同一原始特征的矢量化特征的重要性相加,得到原始特征的重要性?在


Tags: columns分类col特征sklearn类别重要性categorical
1条回答
网友
1楼 · 发布于 2024-10-01 22:25:39

您可以通过

zip(vectorizer.get_feature_names(), gbr.feature_importances_)

这给出了一个(feature,importance)对的列表,其中features的形式是'name=value',而对于最初的数字特征,特征的形式是'name=value'。保证get_feature_names输出中的出现顺序与transform或{}输出中的顺序匹配。在

老实说,我不确定原始范畴的特征重要性;我会尝试取平均值,而不是求和。在

相关问题 更多 >

    热门问题