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的主要内容,如果未能解决你的问题,请参考以下文章

python第三篇 python基础之函数,递归,内置函数

python中返回函数

python:返回值问题

Python函数

Python函数

python 函数复习