sklearn逻辑回归参数中涉及样本不平衡的部分

一、class_weight :
分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。

  • 手动输入各个类型的权重
    比如对于0,1的二元模型,定义class_weight={0:0.8, 1:0.2},即表示类型0的权重为80%,而类型1的权重为20%.
  • 选择balanced
    类库根据训练样本量计算权重,表示样本数目越多,权重越小,样本数越少,权重越大。
    计算方法如下:n_samples / (n_classes * np.bincount(y))
    n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数,例如y=[1,0,0,0,0],则np.bincount(y)=[4,1]

什么场景下用class_weight?
(1) 误分类代价高:
如信用卡欺诈、乳腺癌检测等(将欺诈和阳性设为label 1),可适当提高label 1的权重
(2) 样本高度不平衡:
比如信用卡欺诈场景中,正常交易有280000次,欺诈有28次。如果不考虑权重,则将所有测试集都预测为正常交易,这样预测准确率理论上将大于99.99%,但是却没有任何意义。这时,可以选择balanced,让类库自动提高欺诈交易样本的权重

样本高度不平衡的情况还可以考虑参数sample_weight

二、sample_weight (fit函数的参数)

当样本是高度失衡的,导致样本不是总体样本的无偏估计,从而可能导致模型预测能力下降。这种情况,可以通过调节样本权重来尝试解决这个问题。

调节样本权重的方法有两种:
(1)在class_weight使用balanced。
(2)调用fit函数时,通过sample_weight来调节每个样本权重。

在scikit-learn做逻辑回归时,如果上面两种方法都用到了,那么样本的真正权重是class_weight*sample_weight.

你可能感兴趣的:(机器学习)