从逻辑回归系数在python中编写函数

Posted

技术标签:

【中文标题】从逻辑回归系数在python中编写函数【英文标题】:coefficient from logistic regression to write function in python 【发布时间】:2018-12-27 06:12:24 【问题描述】:

我刚刚完成了逻辑回归。数据可从以下链接下载: pleas click this link to download the data

下面是逻辑回归的代码。

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import roc_auc_score
import pandas as pd
scaler = StandardScaler()

data = pd.read_csv('data.csv')
dataX = data.drop('outcome',axis =1).values.astype(float)
X     = scaler.fit_transform(dataX)
dataY = data[['outcome']]
Y = dataY.values

X_train,X_test,y_train,y_test = train_test_split (X,Y,test_size = 0.25, random_state = 33)

lr = LogisticRegression()
lr.fit(X_train,y_train)

# Predict the probability of the testing samples to belong to 0 or 1 class
predicted_probs = lr.predict_proba(X_test)
print(predicted_probs[0:3])
print(lr.coef_)

我可以打印逻辑回归的系数,我可以计算事件发生的概率为 1 或 0。

当我使用这些系数编写 python 函数并计算发生概率 1 时。与使用此相比,我没有得到答案:lr.predict_proba(X_test)

我写的函数如下:

def xG(bodyPart,shotQuality,defPressure,numDefPlayers,numAttPlayers,shotdist,angle,chanceRating,type):
coeff = [0.09786083,2.30523761, -0.05875112,0.07905136, 
         -0.1663424 ,-0.73930942,-0.10385882,0.98845481,0.13175622]

return  (coeff[0]*bodyPart+ coeff[1]*shotQuality+coeff[2]*defPressure+coeff[3]*numDefPlayers+coeff[4]*numAttPlayers+coeff[5]*shotdist+ coeff[6]*angle+coeff[7]*chanceRating+coeff[8]*type)

我得到了奇怪的答案。我知道函数计算有问题。

由于我是机器学习和统计的新手,请问您的建议。

【问题讨论】:

您的 xG 函数不使用逻辑回归公式,因此结果很奇怪。您将逻辑回归视为 xG 中的线性回归。逻辑回归的公式是 1/(1+e**(在此处插入您在 xG 中返回的内容)) 谢谢。对了,我hv套索coe和intercept,怎么写一个函数用coe和intercept来预测y值 【参考方案1】:

我认为您错过了xG 中的intercept_。您可以从lr.intercept_ 检索它,它应该在最终公式中求和:

return 1/(1+e**(-(intercept + coeff[0]*bodyPart+ coeff[1]*shotQuality+coeff[2]*defPressure+coeff[3]*numDefPlayers+coeff[4]*numAttPlayers+coeff[5]*shotdist+ coeff[6]*angle+coeff[7]*chanceRating+coeff[8]*type))

【讨论】:

嗨,马可,感谢您的建议。现在,我得到的一些价值是负面的。答案应该在 0 和 1 之间。如果我在该等式中添加截距,我认为仍然会有负值。这与从 sigmoid 函数的转换有关吗?谢谢 是的!如果我没记错的话,您需要获取 return 的值并将其传递给 sigmoid 函数:1/(1+e^(-x))

以上是关于从逻辑回归系数在python中编写函数的主要内容,如果未能解决你的问题,请参考以下文章

Python 逻辑回归产生错误的系数

在python中查找逻辑回归的系数

逻辑回归和系数

python:如何在sklearn中使用逻辑回归系数构建决策边界

《机器学习实战》之逻辑回归--基于Python3--02

从逻辑回归系数中推导出新的连续变量