【发布时间】:2021-12-19 12:40:56
【问题描述】:
在处理不平衡数据集时,我在 scikit-learn 中发现了一个关于 LogisticRegression 的有趣问题。
对于参数class_weight,如果我发送{1:0.5, 0:0.5},我将与{1:1, 0:1} 得到不同的结果,即使它们在数学上实际上是相同的权重。
这是我得到的,
import numpy as np
from sklearn.linear_model import LogisticRegression
np.random.seed(1)
def sigmoid(x):
return 1/(np.exp(-x)+1)
x1 = np.random.normal(0, 4, 100000)
x2 = np.random.normal(0, 1, 100000)
X = np.array([x1, x2]).T
proba = sigmoid(0.1 + 2*x1 + 3*x2)
y = np.random.binomial(1, proba)
lr1 = LogisticRegression(C=1, class_weight = {1:0.5, 0:0.5}).fit(X, y)
print(lr1.score(X,y)) # 0.93656
lr2 = LogisticRegression(C=1, class_weight = {0:1, 1:1}).fit(X, y)
print(lr2.score(X,y)) # 0.93653
- 能否告诉我
class_weight参数的实际工作原理以及它发生的原因? - 如何正确设置
class_weight?
【问题讨论】:
标签: python scikit-learn logistic-regression imbalanced-data