【问题标题】:Python function returns nanPython 函数返回 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 结果并将这些数据显示给我们,那肯定会有所帮助 :)

标签: python function machine-learning 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(南,南)
      猜你喜欢
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      相关资源
      最近更新 更多