【问题标题】:How to get the selected features after LinearSVC reduction in scikitscikit中LinearSVC缩减后如何获取选中的特征
【发布时间】:2015-09-25 10:16:45
【问题描述】:

标题说明了一切,我查看了 scikit 文档,这些文档对于这个特定任务来说非常糟糕,并且我查看了几个在线资源,包括 this 帖子。

但是,他们似乎错了。对于特征选择,我们可以这样做:

clf=LinearSVC(penalty="l1",dual=False,random_state=0)
X_reduced = clf.fit_transform(X_full,y_full)

现在,如果我们检查X_reduced 的形状,很清楚选择了多少特征。所以现在的问题是,哪些?

LinearSVCcoef_ 属性非常重要,建议对其进行迭代,选择coef_ 不为零的特征。好吧,这是错误的,但您可以非常接近真实结果。

在检查X_reduced 之后,我注意到我选择了 310 个特征,这是肯定的,我的意思是,我正在检查结果矩阵,现在,如果我执行 coef_ 的事情,则选择了 414 个特征,来自一共2000,所以很接近实物。

根据 scikit LinearSVC docsmean(X) 涉及到 Threshold=None,但我被困住了,不知道现在该做什么。

更新:这是一个link,其中包含重现错误的数据和代码,它只有几 KB

【问题讨论】:

    标签: scikit-learn svm feature-selection


    【解决方案1】:

    我认为LinearSVC() 确实返回具有非零系数的特征。您能否上传可以重现您看到的不一致的示例数据文件和代码脚本(例如,通过 dropbox 共享链接)?

    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
    

    【讨论】:

    • 谢谢,这里是:link
    • @nxgtrturbo 我看到了和你一样的不一致。如果我将阈值设置为一个非常小的值(例如,eps 这里),它会给出预期的结果。
    • 是的,但是目标是在两边都达到 310,因为这是自定义管道的一部分,它获得了几种不同的缩减方法(并非所有方法都使用阈值)。你会说这是一个错误吗?或者至少是错误的文档?
    • @nxgtrturbo 我同意the docs 不是最精确的。他们确实提到您可以设置阈值,但我没有看到任何地方都写有默认值。但是查看源代码可以看到,对于 L1 惩罚,阈值默认为 1e-5。
    • @nxgtrturbo 正如@user3914041 所建议的,源代码transformer.transform?? 表明1e-5 被用作默认阈值。我已经修改了代码给你 310。
    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 2013-08-15
    • 2018-09-07
    • 2019-01-10
    • 2018-01-21
    • 2016-11-01
    • 2014-06-11
    • 2013-12-07
    相关资源
    最近更新 更多