如何去除 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决策过程的可视化