Python 如何从SVM模型中的一个热向量输入中找到特征重要性
我在一个热编码向量的列表上训练一个SVM,看起来像这样(它的实际形状(17942621),但出于示例的目的,让我们假设它如下所示): 标签如下所示:Python 如何从SVM模型中的一个热向量输入中找到特征重要性,python,machine-learning,scikit-learn,svm,Python,Machine Learning,Scikit Learn,Svm,我在一个热编码向量的列表上训练一个SVM,看起来像这样(它的实际形状(17942621),但出于示例的目的,让我们假设它如下所示): 标签如下所示: 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_t
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个特征在预测方面有多重要 由于您使用的是线性模型,因此可以直接使用系数来获得特征重要性。您可以通过构建数据框进行绘图(将索引设置为属性,以便设置记号标签):
记住,为了使用
coef
attribute,您需要设置penal='l1'
(线性内核)我认为LinearSVC
默认为@lalfabc。文档中说penal:str,'l1'或'l2'(默认为'l2')
内核在任何情况下都是线性的,正如其名称所示。看起来可以从两个惩罚设置中访问系数@lalfabIt是真的,我的错误是想得到一个稀疏解。
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)
pd.Series(abs(svc.coef_[0])).sort_values(ascending=False).head(10).plot.barh()