首页 > 解决方案 > 在逻辑回归中强制使用二元系数

问题描述

我面临一个分类问题,我需要根据特征的存在与否对样本进行分类。

数据矩阵X是二进制的scipy.sparse.csr_matrix

我试图LogisticRegressionpenalty='l1'and拟合一个C=0.5,它给出了非常好的指标和非常稀疏的系数,这是所期望的。

但是,我的问题的另一个要求是在 {0, 1} 中具有二进制系数或在 {0, 1, -1} 中具有系数。意义特征要么对正类的样本分类有积极贡献,要么消极或不贡献,但两个积极贡献的特征必须同等贡献。

我猜想实现这一点的一种简单方法是添加一个正则化项:

注册

原来的优化问题是:

注册

这样系数确实是稀疏的,非零系数必须为 1 或 -1。现在我使用的solver=liblinear效率非常高,但它是用 c++ 编写的,所以不太容易修改。由于我正在使用penalty=l1,唯一的其他选择solver='saga'是不幸的是在我的经验中要慢得多。此外,代码在 cython 中,修改起来并不容易

是否有另一种(更简单的?)方法来实现这一目标?也许有人知道一种已经被广泛使用但我错过的方法?

标签: pythonscikit-learnsparse-matrixlogistic-regressionbinary-matrix

解决方案


推荐阅读