Python 3.x Logistic回归成本函数

Python 3.x Logistic回归成本函数,python-3.x,pandas,numpy,nan,logistic-regression,Python 3.x,Pandas,Numpy,Nan,Logistic Regression,我最近学习了逻辑回归,我想练习一下。我目前正在使用。我试图以这种方式定义成本函数(我进行了所有必要的导入): #定义假设 S形=λx:1/(1+np.exp(-x)) 预测=lambda列车组,参数:S形(列车组@参数) #界定成本 def成本(θ): #打印(X形、y形、θ形) preds=预测(X,θT) 错误=(-y*np.log(preds))-((1-y)*np.log(1-preds)) 返回np.平均值(错误) θ=[] 对于范围(13)中的i: θ.附加(1) θ=np.数组([

我最近学习了逻辑回归,我想练习一下。我目前正在使用。我试图以这种方式定义成本函数(我进行了所有必要的导入):

#定义假设
S形=λx:1/(1+np.exp(-x))
预测=lambda列车组,参数:S形(列车组@参数)
#界定成本
def成本(θ):
#打印(X形、y形、θ形)
preds=预测(X,θT)
错误=(-y*np.log(preds))-((1-y)*np.log(1-preds))
返回np.平均值(错误)
θ=[]
对于范围(13)中的i:
θ.附加(1)
θ=np.数组([θ])
成本(θ)
当我运行这个单元时,我得到:

/opt/venv/lib/python3.7/site packages/ipykernel_launcher.py:9:RuntimeWarning:在日志中遇到零除
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
/opt/venv/lib/python3.7/site packages/ipykernel_launcher.py:9:RuntimeWarning:multiply中遇到无效值
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
楠
当我在网上搜索时,我得到了一个建议,让数据正常化,然后再试一次。我就是这样做的:

df=pd.read\u csv(“/home/jovyan/work/heart.csv”)
df.head()
#数据集大小为303x14(使用df.shape)
长度=df.形状[0]
#输出向量
y=df['target']。值
y=np.数组([y]).T
#为了方便起见,我们将培训集命名为X
训练集=测向下降(['target'],轴=1)
#训练集=测向插入(0,'偏差',1)
minmax\u normal\u trainset=(trainingset-trainingset.min())/(trainingset.max()-trainingset.min())
X=训练集值
我真的不知道零除错误发生在哪里,以及如何修复它。如果我在执行过程中犯了任何错误,请纠正我。如果以前有人问过这个问题,我很抱歉,但我能找到的只是使数据正常化的提示。提前谢谢

np.log(0)
引发一个
除以零的错误。正是这一部分造成了问题:

errors = (-y * np.log(preds)) - ((1 - y) * np.log(1 - preds))
               ##############              #################
x
的绝对值大于709时,
preds
可以是0或1(因为浮点数学,至少在我的机器上是这样),这就是为什么将
x
规格化为0和1之间可以解决问题的原因

编辑:

您可能希望规格化到比
(0,1)
更大的范围-您当前设置的sigmoid函数在该范围内几乎是线性的。可能使用:

 minmax_normal_trainset = c * (trainingset - trainingset.mean())/(trainingset.stdev())

然后调整
c
以获得更好的收敛性。

I将x归一化,但问题仍然存在。我应该怎么做才能修复它?如果您在问题中使用了代码,
minmax\u normal\u trainset
是标准化的,但是您设置了
X=trainingset.values
,它不是标准化的,只是一个注释-您可能希望标准化到一个大于(0,1)的范围-您当前设置的sigmoid函数在该范围内几乎是线性的。如果你的模型没有很好的收敛,也许可以使用
minmax\u normal\u trainset=c*(trainingset-trainingset.mean())/(trainingset.stdev())
,然后调整
c
?我实际上缩放正常,模型结果很好,尽管我也将尝试你的建议。