python - 在逻辑回归中强制使用二元系数
问题描述
我面临一个分类问题,我需要根据特征的存在与否对样本进行分类。
数据矩阵X
是二进制的scipy.sparse.csr_matrix
。
我试图LogisticRegression
用penalty='l1'
and拟合一个C=0.5
,它给出了非常好的指标和非常稀疏的系数,这是所期望的。
但是,我的问题的另一个要求是在 {0, 1} 中具有二进制系数或在 {0, 1, -1} 中具有系数。意义特征要么对正类的样本分类有积极贡献,要么消极或不贡献,但两个积极贡献的特征必须同等贡献。
我猜想实现这一点的一种简单方法是添加一个正则化项:
原来的优化问题是:
这样系数确实是稀疏的,非零系数必须为 1 或 -1。现在我使用的solver=liblinear
效率非常高,但它是用 c++ 编写的,所以不太容易修改。由于我正在使用penalty=l1
,唯一的其他选择solver='saga'
是不幸的是在我的经验中要慢得多。此外,代码在 cython 中,修改起来并不容易
是否有另一种(更简单的?)方法来实现这一目标?也许有人知道一种已经被广泛使用但我错过的方法?
解决方案
推荐阅读
- javascript - PersistGate 导致应用停止渲染
- java - 执行 API 测试时忽略证书
- android - 当我们从 Android 的外部应用程序手动更改权限时会发生什么
- c# - 如何创建具有任意扩展名的文件的 href 下载链接
- angular - 通过单击按钮显示列
- android - 将 aab 应用程序包发布到 Google Play 商店的任何缺点
- java - 数组左旋转给一些输入错误
- r - 如何使用 lapply 来基于来自单独列表的 dfs 的数据帧的子集列表
- .net - 杀死线程后的内存分配如何?
- html - 如何根据 :checked 更改复选框的外观,无需其他元素