如何从SVM模型的一个热向量输入中查找特征重要性

我在一个像这样的热编码矢量的列表上训练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个特征在预测方面的重要性?

评论
  • 哭着高兴%
    哭着高兴% 回复

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

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