我面临一个分类问题,我需要根据特征的存在与否对样本进行分类。
数据矩阵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 中,修改起来并不容易
是否有另一种(更简单的?)方法来实现这一目标?也许有人知道一种已经被广泛使用但我错过的方法?