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

6

我希望使用sklearn对文本进行分类。首先,我使用词袋模型来训练数据,但是词袋模型的特征非常多,超过了10000个特征,因此我使用SVD将这些特征减少到100个。

但是现在我想添加一些其他特征,比如单词数、正面单词数、代词数等。这些额外的特征只有10个,与词袋模型的100个特征相比,显得非常小。

基于这种情况,我提出了两个问题:

  1. 是否有sklearn中的某个函数可以改变额外特征的权重,使它们更加重要?
  2. 如何检查额外特征对分类器的重要性?

听起来,您可以将附加功能简单地附加到SVD功能上,沿着第一轴进行,然后在结果矩阵上训练分类器。有许多分类器可让您查看特征重要性,例如GradientBoostingClassifier。我认为在训练分类器之后无法更改特征的重要性。它们的重要性将反映它们在预测y方面的有用性。 - Ryan
谢谢,我的意思是,是否有一些函数可以测试特征和类之间的相似性?就像在训练分类器之前,我得到了相似性排名,这给了我哪些特征对于分类很重要的想法? - HAO CHEN
1个回答

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接