Python RuntimeWarning:在渐变下降中双_标量中遇到溢出

Python RuntimeWarning:在渐变下降中双_标量中遇到溢出,python,gradient-descent,Python,Gradient Descent,我正在尝试将梯度下降算法应用于线性回归。我想我已经解决了数学部分,但在Python中它不起作用 from sklearn.datasets import load_boston import pandas as pd import numpy as np import random data = load_boston() df = pd.DataFrame(data['data'], columns=data['feature_names']) y = data['target'] X =

我正在尝试将梯度下降算法应用于线性回归。我想我已经解决了数学部分,但在Python中它不起作用

from sklearn.datasets import load_boston
import pandas as pd
import numpy as np
import random

data = load_boston()
df = pd.DataFrame(data['data'], columns=data['feature_names'])
y = data['target']
X = df.TAX

def RMSE(y, y_hat):
    return np.sqrt(sum((y - y_hat) ** 2) / len(y))

def partial_k(x, y, y_hat):
    n = len(y)
    gradient = 0
    for x_i, y_i, y_hat_i in zip(list(x), list(y), list(y_hat)):
        gradient += (y_i - y_hat_i) * x_i
    return -2 / n * gradient

def partial_b(y, y_hat):
    n = len(y)
    gradient = 0
    for y_i, y_hat_i in zip(list(y), list(y_hat)):
        gradient += (y_i - y_hat_i)
    return -2 / n * gradient

def gradient(X, y, n, alpha=0.01, loss=RMSE):
    loss_min = float('inf')

    k = random.random() * 200 - 100
    b = random.random() * 200 - 100

    for i in range(n):
        y_hat = k * X + b
        loss_new = loss(y, y_hat)
        if loss_new < loss_min:
            loss_min = loss_new
            print(f"round: {i}, k: {k}, b: {b}, {loss}: {loss_min}")
        k_gradient = partial_k(X, y, y_hat)
        b_gradient = partial_b(y, y_hat)
        k += -k_gradient * alpha
        b += -b_gradient * alpha
    return (k, b)
gradient(X, y, 200)

看起来您的一个操作溢出了类型


如果您可以使用调试器运行代码,您将能够找到导致溢出的行,并将您的类型更改为更大的类型。

看起来您的操作之一溢出了类型


如果您可以使用调试器运行代码,您将能够找到导致溢出的行,并将您的类型更改为更大的类型。

梯度下降的主要功能是将θ的值降低到最佳值,但当alpha(学习速率)降低时大梯度下降可能超过最小值,并在图上以振荡方式增加。这是溢出发生的主要原因

尝试降低alpha(学习率)或应用功能规范化


梯度下降的主要特点是将θ值降低到最佳值,但当α(学习率)较大时,梯度下降可能超过最小值,并以振荡方式在图形上增加。这是溢出发生的主要原因

尝试降低alpha(学习率)或应用功能规范化

/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:5: RuntimeWarning: overflow encountered in double_scalars
  """
/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:12: RuntimeWarning: overflow encountered in double_scalars
  if sys.path[0] == '':
/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:29: RuntimeWarning: invalid value encountered in double_scalars
/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:30: RuntimeWarning: invalid value encountered in double_scalars