逻辑回归sklearn中的coef_

coef_ in logistic regression sklearn

sklearn 版本 = 0.23.2

MRE:

studies = np.random.uniform(0, 10, 100)
slept = np.random.uniform(0, 10, 100)

df = pd.DataFrame({"studied":np.random.uniform(0,10,100),
                   "sleep":np.random.uniform(0,10,100)})

def PassFail(study, sleep):
    
    if study + sleep >= 10:
        return 1
    else:
        return 0

df["pass"] = df.apply(lambda x: PassFail(x["studied"], x["sleep"]), axis=1)

如果 sleep 的总和大于或等于 10(由对角线分隔),则您通过。

使用上述数据训练并打印 coef_

y = df["pass"].values
X = df.drop(columns=["pass"]).values

X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.1)
lr = LogisticRegression().fit(X_train,y_train)

lr.coef_
>>> array([[2.0648521 , 1.89582556]])

根据我的理解,coef_ 是研究、睡眠的每个 x 变量的权重。但是,当我尝试通过硬编码进行预测时

def z_value(x,w):
    """x,w are in array of array form[[x1,x2]]"""
    return np.dot(x.reshape(-1), w.reshape(-1))

def SigmoidFunction(z):
    return 1.0 / (1+np.exp(-z))

new_x = np.array([[0.2, 1]])
z = z_value(new_x, lr.coef_)
p = SigmoidFunction(z)

p = 0.90.... 这没有意义,因为 x 变量的如此低的值应归类为“失败”(0),因此 p 应该非常低(接近 0)。 coef_ 是来自 x 变量的 sklearn 逻辑回归权重吗?

你在计算“z_value”时错过了拦截