【问题标题】:RuntimeWarning: overflow encountered in squareRuntimeWarning:在正方形中遇到溢出
【发布时间】:2017-03-14 12:23:13
【问题描述】:

我是机器学习和 numpy 的新手,我一直在尝试在 sklearn 的波士顿住房数据集上运行梯度下降,我的实现适用于小型随机数据集,但在波士顿数据集中它会产生这些警告

<string>:12: RuntimeWarning: overflow encountered in square
<string>:15: RuntimeWarning: invalid value encountered in subtract

然后输出是

Output
array([ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
    nan,  nan,  nan])

这是我的梯度下降代码

import numpy as np
from sklearn.datasets import load_boston
from matplotlib import pyplot as plt
def gradient_descent(x,y,alpha,theta):
    m=y.shape[0]
    xtranspose = x.transpose()
    i=0
    cost =488
    while cost>0.5:
        hyp = np.dot(x, theta)
        loss = hyp - y
        cost = np.sum(loss ** 2)/(2*m)
        plt.scatter(i,cost)
        gradient = np.dot(xtranspose, loss)/m
        theta = theta - alpha * gradient
        i=i+1
    plt.show()
    return theta


    dataset = load_boston()
    m,n = dataset['data'].shape
    x = np.ones((m,n+1))
    x[:,:-1] = dataset['data']
    y= dataset['target']
    alpha=0.005
    theta=np.ones(x.shape[1])
    theta = gradient_descent(x,y,alpha,theta)

【问题讨论】:

  • 我认为需要一个更好的初始猜测。 loss ** 2 溢出,导致后续问题。
  • 我遇到了完全相同的错误,知道如何解决吗?

标签: python numpy machine-learning linear-regression


【解决方案1】:

当输入是整数时,看到这样的溢出警告并不罕见。首先要尝试将它们转换为浮点数。如果 loss 是一个数组,则可以使用 loss =np.array(loss, dtype=float)。如果 loss 是整数,则可以使用 loss = float(loss)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多