做LR时报错: Input contains NaN, infinity or a value too large for dtype(‘float64’)
数据未标准化
这是因为当您将sigmoid / logit函数应用于您的假设时,输出概率几乎都是大约0或全1并且使用您的成本函数,log(1 - 1)或log(0)将产生-Inf。
解决此问题的一种方法是在使用梯度下降进行训练之前对数据进行标准化。
学习率太高
一旦对数据进行标准化,成本似乎是有限的,但经过几次迭代后突然转到NaN。如果你的学习速度或alpha太大,每次迭代都会朝着最小化的方向超调,从而使每次迭代的成本振荡甚至发散。成本在每次迭代时会发散或增大,直到它太大而无法使用浮点精度来表示。
解决此问题的方法是降低您的学习率α。
PS:确定最佳学习速率的常用方法是在一系列对数间隔的α值上执行梯度下降,查看最终成本函数值是什么,选择导致最小成本的学习速率。
想了解更详细,戳连接:[https://stackoverflow.com/questions/35419882/cost-function-in-logistic-regression-gives-nan-as-a-result]