逻辑回归中样本不平衡的解决方案:
在逻辑回归中,如果数据不平衡会导致如下情况,分类效果差:
改进:对不同类型进行加权,公式如下:
l
(
θ
∣
Y
)
=
⟨
∏
i
=
1
n
L
g
−
1
(
η
i
∣
θ
)
⟩
W
L
⟨
∏
j
=
1
n
N
L
[
1
−
g
−
1
(
η
j
∣
θ
)
]
⟩
W
N
L
l(\theta \mid \mathbf{Y})=\left\langle\prod_{i=1}^{n_{L}} g^{-1}\left(\eta_{i} \mid \theta\right)\right\rangle^{W_{L}}\left\langle\prod_{j=1}^{n_{NL}}\left[1-g^{-1}\left(\eta_{j} \mid \theta\right)\right]\right\rangle^{W_{NL}}
l(θ∣Y)=⟨∏i=1nLg−1(ηi∣θ)⟩WL⟨∏j=1nNL[1−g−1(ηj∣θ)]⟩WNL
其中
g
−
1
(
η
i
∣
θ
)
g^{-1}\left(\eta_{i} \mid \theta\right)
g−1(ηi∣θ)为概率密度,
W
L
W_{L}
WL与
W
N
L
W_{NL}
WNL分别为不同类别的权重(权重设置按照具体情况而定)。
在sklearn.linear_model import LogisticRegression中即是设置class_weight参数,具体使用如下:
class_weight = {0: NL, 1: L},其中0和1为标签,NL和L为所设置的权重。
画图结果如下:
需要加权的情况:
第一种是误分类的代价很高。比如对合法用户和非法用户进行分类,将非法用户分类为合法用户的代价很高,我们宁愿将合法用户分类为非法用户,这时可以人工再甄别,但是却不愿将非法用户分类为合法用户。这时,我们可以适当提高非法用户的权重。
第二种是样本是高度失衡的,比如我们有合法用户和非法用户的二元样本数据10000条,里面合法用户有9995条,非法用户只有5条,如果我们不考虑权重,则我们可以将所有的测试集都预测为合法用户,这样预测准确率理论上有99.95%,但是却没有任何意义。这时,我们可以选择balanced,让类库自动提高非法用户样本的权重。