【问题标题】:How to find feature importance from one hot vector input in an SVM model如何从 SVM 模型中的一个热向量输入中找到特征重要性
【发布时间】:2020-08-08 07:58:07
【问题描述】:

我正在一个热编码向量列表上训练一个 SVM,看起来像这样(它的实际形状 (179, 42621),但为了举例,让我们说如下):

vectors = 
[
[0,0,0,1],
[1,0,0,1],
[0,0,0,1],
[0,0,0,1],
[0,0,0,1]
]

标签如下所示:

labels = 
[
[0],
[1],
[1],
[2],
[0]
]

我已经使用以下代码训练了一个 SVM:

X = vectors
y = labels

# fixing class imbalance
sm = SMOTE(random_state=42)
X, y = sm.fit_resample(X, y)

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

svc = LinearSVC()
svc.fit(X_train, y_train)
y_pred = svc.predict(X_test)

我是否可以了解每个特征在特征输入向量中的预测能力有多重要?

换句话说,我如何判断特征向量中的第 0、第 1、第 2 和第 3 个特征在预测方面的重要性?

【问题讨论】:

    标签: python machine-learning scikit-learn svm


    【解决方案1】:

    由于您使用的是线性模型,因此您可以直接使用系数来获取特征重要性。您可以通过构建数据框进行绘图(将索引设置为属性,以便也设置刻度标签):

    pd.Series(abs(svc.coef_[0])).sort_values(ascending=False).head(10).plot.barh()
    

    【讨论】:

    • 记住你需要设置penalty='l1'(线性内核)才能使用coef_属性
    • 我认为LinearSVC 默认有它@lalfab
    • 文档说penalty: str, ‘l1’ or ‘l2’ (default=’l2’)
    • 内核在任何情况下都是线性的,顾名思义。看起来系数可以从两个惩罚设置中访问@lalfab
    • 是的,我的错误是想获得一个稀疏的解决方案。
    猜你喜欢
    • 2011-11-18
    • 2016-08-14
    • 2017-12-02
    • 2019-05-30
    • 2017-05-28
    • 2016-03-07
    • 1970-01-01
    • 2015-10-10
    • 2021-06-18
    相关资源
    最近更新 更多