如何去除 sklearn 线性 SVM 中 10% 最具预测性的特征

Posted

技术标签:

【中文标题】如何去除 sklearn 线性 SVM 中 10% 最具预测性的特征【英文标题】:How to remove the 10% most highly predictive features in sklearn's linear SVM 【发布时间】:2014-10-16 19:53:17 【问题描述】:

我正在使用 scikit-learn 的 (sklearn) 线性 SVM (LinearSVC),我目前正在尝试删除 10% 最具预测性的特征,以便对 3 个类别(正面、负面和中性)进行情绪分析,以便查看如果我可以在进行域适应时防止过度拟合。我知道可以使用 svm.LinearSVC().coef_ 访问特征权重,但我不确定如何删除 10% 最具预测性的特征。有谁知道继续?在此先感谢您的帮助。这是我的代码:

from sklearn import svm
from sklearn.feature_extraction.text import CountVectorizer as cv

# Using linear SVM classifier
clf = svm.LinearSVC()
# Count vectorizer used by the SVM classifier (select which ngrams to use here)
vec = cv(lowercase=True, ngram_range=(1,2)) 
# Fit count vectorizer with training text data
vec.fit(trainStringList) 
# X represents the text data from the respective datasets
# Transforms text into vectors for the training set
X_train = vec.transform(trainStringList) 
#transforms text into vectors for the test set
X_test = vec.transform(testStringList)   
# Y represents the labels from the respective datasets
# Converting labels from the respective data sets to integers (0="positive", 1= "neutral", 2= "negative")
Y_train = trainLabels 
Y_test = testLabels
# Fitting the training data to the linear SVM classifier 
clf.fit(X_train,Y_train)

for feature_vector in clf.coef_:
    ???

【问题讨论】:

【参考方案1】:

在生成预测时,权重最高的系数表示重要性最高。您可以消除与这些参数相关的特征。我不建议这样做。如果您的目标是减少过拟合,则 C 是此模型中的正则化参数。启动 LinearSVC 对象时提供更高的 C 值(默认为 1):

clf = svm.LinearSVC(C=10)

您应该进行某种交叉验证以确定超参数的最佳值,例如 C。

【讨论】:

以上是关于如何去除 sklearn 线性 SVM 中 10% 最具预测性的特征的主要内容,如果未能解决你的问题,请参考以下文章

在 sklearn 或任何 python 库中确定对非线性 SVM 回归贡献最大的特征

基于sklearn进行线性回归logistic回归svm等的简单操作总结

菜菜的sklearn课堂笔记支持向量机-线性SVM用于分类的原理

菜菜的sklearn课堂笔记支持向量机-线性SVM决策过程的可视化

菜菜的sklearn课堂笔记支持向量机-非线性SVM与核函数

Keras 神经网络和 SKlearn SVM.SVC