标题说明了一切,我检查了scikit个文档,这些文档对于此特定任务非常差,我检查了几个在线资源,包括this帖子。
然而,他们似乎错了。对于功能选择,我们可以执行以下操作:
clf=LinearSVC(penalty="l1",dual=False,random_state=0)
X_reduced = clf.fit_transform(X_full,y_full)
现在,如果我们检查X_reduced
的形状,很明显选择了多少个特征。现在的问题是,哪些?
coef_
的{{1}}属性非常重要,建议对其进行迭代,LinearSVC
与零不同的要素是选中的。好吧,这是错误的,但你可以非常接近实际结果。
在检查coef_
之后,我注意到我有310个选定的功能,这是肯定的,我的意思是,我正在检查结果矩阵,现在,如果我执行X_reduced
的事情,414个功能从总共2000个中选出,所以它接近真实的东西。
根据scikit LinearSVC
docs,coef_
涉及mean(X)
,但我被卡住了,不知道现在该做什么。
更新:这是link,其中包含重现错误的数据和代码,只需几KB
答案 0 :(得分:1)
我认为LinearSVC()
会返回非零系数的要素。您能否上传可以重现您看到的不一致的示例数据文件和代码脚本(例如,通过dropbox sharelink)?
from sklearn.datasets import make_classification
from sklearn.datasets import load_svmlight_file
from sklearn.svm import LinearSVC
import numpy as np
X, y = load_svmlight_file("/home/Jian/Downloads/errorScikit/weirdData")
transformer = LinearSVC(penalty='l1', dual=False, random_state=0)
transformer.fit(X, y)
# set threshold eps
X_reduced = transformer.transform(X, threshold=np.finfo(np.float).eps)
print(str(X_reduced.shape[1]) + " is NOW equal to " + str((transformer.coef_ != 0).sum()))
414 is NOW equal to 414
# as suggested by user3914041, if you want both sides are 310
transformer.transform(X).shape
Out[46]: (62, 310)
(abs(transformer.coef_) > 1e-5).sum()
Out[47]: 310