Python 函数返回 nan
Posted
技术标签:
【中文标题】Python 函数返回 nan【英文标题】:Python function returns nan 【发布时间】:2021-05-10 16:41:00 【问题描述】:我已经编写了梯度下降函数并使用 pandas 来读取 csv 文件。但是当我使用 pandas 读取的数据时,该函数返回“nan”。我不明白为什么。
提前致谢。
def gradient_descent(X, Y, w, b, alpha):
dl_dw = 0.0
dl_db = 0.0
N = len(X)
for i in range(N):
dl_dw += -1*float(X[i]) * (float(Y[i]) - (w*float(X[i]) + b))
dl_db += -1*(float(Y[i]) - (float(w*X[i]) + b))
w = w - (1/float(N)) * dl_dw * alpha
b = b - (1/float(N)) * dl_db * alpha
return w, b
import pandas as pd
data = pd.read_csv("train.csv")
print(data.head())
X = data.iloc[:, 0].values.reshape(-1, 1)
Y = data.iloc[:, 1].values.reshape(-1, 1)
print(gradient_descent(X, Y, 0.0, 0.0, 100))
【问题讨论】:
如果您能确定哪些训练数据会产生 nan 结果并将这些数据显示给我们,那肯定会有所帮助 :) 【参考方案1】:这可能是一个消失的梯度问题。你的梯度可能非常接近甚至为零。 尝试使用非零值初始化您的权重。
【讨论】:
【参考方案2】:尝试将 alpha 值降低到 0.01 左右。并确保您的数据框没有任何空值
【讨论】:
【参考方案3】:检查 train.csv 中的编码,如果是 UTF-8|UTF-16... 您可以检查它,在 VSCode 中打开 train.csv。 示例:如果 train.csv 是 UTF-16 LE,您可以使用 pd.read_csv('train.csv',encoding='UTF-16 LE') 修复
【讨论】:
您好,先生,我检查了一下,它是 encoding='cp1252'。我将代码修改为data = pd.read_csv("train.csv", encoding='cp1252'),但是没有用 你能复制那个打印的输出吗? x y 0 24.0 21.549452 1 50.0 47.464463 2 15.0 17.218656 3 38.0 36.586398 4 87.0 87.288984(南,南)以上是关于Python 函数返回 nan的主要内容,如果未能解决你的问题,请参考以下文章