使用 sklearn 训练模型时如何更改特征权重?

Posted

技术标签:

【中文标题】使用 sklearn 训练模型时如何更改特征权重?【英文标题】:how to change feature weight when training a model with sklearn? 【发布时间】:2016-03-02 14:04:23 【问题描述】:

我想使用 sklearn 对文本进行分类。首先我用bag of words来训练数据,bag of words的特征真的很大,超过10000个特征,所以我用SVD把这个特征减少到100个。

但是在这里我想添加一些其他的特征,比如#of words,#ofpositive words,# of pronouns等等。额外的特征只是少了10个特征,与100个词袋特征相比真的很小

从这种情况我提出两个问题:

    sklearn 中是否有一些函数可以改变附加特征的权重以使其更重要? 如何检查附加特征对分类器是否重要?

【问题讨论】:

听起来您可以简单地将附加特征附加到沿第一个轴的 SVD 特征,然后在结果矩阵上训练分类器。有许多分类器可让您查看特征重要性,例如梯度提升分类器。我不认为你可以在训练分类器后改变特征的重要性;它们的重要性将反映它们在预测您的 y 方面的有用性。 谢谢,我的意思是,是否有一些功能可以测试特征和类之间的相似性?就像在训练分类器之前一样,我得到了相似度等级,这让我知道哪些特征对分类很重要? 【参考方案1】:

虽然非常感兴趣,但我不知道主要问题的答案。与此同时,我可以帮助完成第二个。

拟合模型后,您可以通过属性model.feature_importances_访问特征重要性

我使用以下函数将重要性归一化并以更漂亮的方式显示。

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns # (optional)

def showFeatureImportance(model):
    #FEATURE IMPORTANCE
    # Get Feature Importance from the classifier
    feature_importance = model.feature_importances_

    # Normalize The Features
    feature_importance = 100.0 * (feature_importance / Feature_importance.max())
    sorted_idx = np.argsort(feature_importance)
    pos = np.arange(sorted_idx.shape[0]) + .5

    #plot relative feature importance
    plt.figure(figsize=(12, 12))
    plt.barh(pos, feature_importance[sorted_idx], align='center', color='#7A68A6')
    plt.yticks(pos, np.asanyarray(X_cols)[sorted_idx])
    plt.xlabel('Relative Importance')
    plt.title('Feature Importance')
    plt.show()

【讨论】:

以上是关于使用 sklearn 训练模型时如何更改特征权重?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn决策树特征权重计算方法

TensorFlow 对象检测 api:使用预训练模型在训练中更改类数时的分类权重初始化

如何使用 SelectKBest 选择的特征训练模型?

sklearn中正则化的Lasso问题

sklearn中正则化的Lasso问题

自然语言处理基于sklearn-crfsuite进行命名实体识别