pythonsvc_python – 使用LinearSVC进行特征选择

在使用scikit-learn的LinearSVC进行特征选择时遇到问题,错误提示'Invalid threshold: all features are discarded'。尝试指定阈值无效,需要检查SVM模型是否因C参数过小而未正确训练。解决方案包括分析模型性能,调整C参数,并考虑使用网格搜索技术优化模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我尝试使用我的数据运行以下代码时(从this example开始)

X_new = LinearSVC(C=0.01, penalty="l1", dual=False).fit_transform(X, y)

我明白了:

"Invalid threshold: all features are discarded"

我尝试指定自己的阈值:

clf = LinearSVC(C=0.01, penalty="l1", dual=False)

clf.fit(X,y)

X_new = clf.transform(X, threshold=my_threshold)

但我得到:

>与X大小相同的数组X_new,只要my_threshold是以下之一:

>’意思是’

>’中位数’

>或“无效阈值”错误(例如,将标量值传递给阈值时)

我无法发布整个矩阵X,但下面是一些数据统计:

> X.shape

Out: (29,312)

> np.mean(X, axis=1)

Out:

array([-0.30517191, -0.1147345 , 0.03674294, -0.15926932, -0.05034101,

-0.06357734, -0.08781186, -0.12865185, 0.14172452, 0.33640029,

0.06778798, -0.00217696, 0.09097335, -0.17915627, 0.03701893,

-0.1361117 , 0.13132006, 0.14406628, -0.05081956, 0.20777349,

-0.06028931, 0.03541849, -0.07100492, 0.05740661, -0.38585413,

0.31837905, 0.14076042, 0.1182338 , -0.06903557])

> np.std(X, axis=1)

Out:

array([ 1.3267662 , 0.75313658, 0.81796146, 0.79814621, 0.59175161,

0.73149726, 0.8087903 , 0.59901198, 1.13414141, 1.02433752,

0.99884428, 1.11139231, 0.89254901, 1.92760784, 0.57181158,

1.01322265, 0.66705546, 0.70248779, 1.17107696, 0.88254386,

1.06930436, 0.91769016, 0.92915593, 0.84569395, 1.59371779,

0.71257806, 0.94307434, 0.95083782, 0.88996455])

y = array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,

0, 0, 0, 0, 0, 0])

这都是scikit-learn 0.14.

解决方法:

在尝试将SVM模型用作转换基础之前,您应首先分析您的SVM模型是否训练有素.有可能的是,你使用太小的C参数,这导致sklearn训练一个简单的模型,导致删除所有功能.您可以通过对数据执行分类测试来检查它,或者至少打印找到的系数(clf.coef_)

运行网格搜索技术,在泛化属性方面获得最佳C,然后将其用于转换是一个好主意.

标签:python,machine-learning,svm,scikit-learn

来源: https://codeday.me/bug/20190624/1282867.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值