coef_ 在逻辑回归 sklearn 中

时间:2021-01-31 02:30:09

标签: python scikit-learn logistic-regression

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)

如果学习、睡眠的总和大于或等于 10(以对角线分隔),则通过。

使用上述数据进行训练并打印系数后_

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 逻辑回归权重吗?

1 个答案:

答案 0 :(得分:1)

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