梯度下降 - 我可以绘制最小化的函数吗?线性回归

时间:2018-03-20 21:25:59

标签: python machine-learning linear-regression gradient-descent

我是机器学习的新手。我从具有梯度下降的线性回归开始。我有这个python代码,我用这种方式进行了解释。我的问题是:梯度下降算法最小化函数,我可以绘制这个函数吗?我想看看最小化的功能是什么样的。有可能吗? 我的代码:

import matplotlib.pyplot as plt import numpy as np

def sigmoid_activation(x):
    return 1.0 / (1 + np.exp(-x))

X = np.array([
    [2.13, 5.49],
    [8.35, 6.74],
    [8.17, 5.79],
    [0.62, 8.54],
    [2.74, 6.92] ])

y = [0, 1, 1, 0, 0]

xdata = [row[0] for row in X] ydata = [row[1] for row in X]

X = np.c_[np.ones((X.shape[0])), X] W = np.random.uniform(size=(X.shape[1], ))

lossHistory = []


for epoch in np.arange(0, 5):

    preds = sigmoid_activation(X.dot(W))
    error = preds - y

    loss = np.sum(error ** 2)
    lossHistory.append(loss)

    gradient = X.T.dot(error) / X.shape[0]
    W += - 0.44 * gradient


plt.scatter(xdata, ydata) plt.show()

plt.plot(np.arange(0, 5), lossHistory) plt.show()

for i in np.random.choice(5, 5):

    activation = sigmoid_activation(X[i].dot(W))
    label = 0 if activation < 0.5 else 1
    print("activation={:.4f}; predicted_label={}, true_label={}".format(
        activation, label, y[i]))


Y = (-W[0] - (W[1] * X)) / W[2]

plt.scatter(X[:, 1], X[:, 2], c=y) plt.plot(X, Y, "r-") plt.show()

1 个答案:

答案 0 :(得分:1)

存在明显的风险......您可以使用matplotlib简单地绘制lossHistory。或者我错过了什么?

编辑:显然OP询问了渐变下降(GD)最小化的内容。我会尽力回答这个问题,希望能回答原来的问题。

GD算法是一种通用算法,用于查找参数空间中函数的最小值。在您的情况下(通常与神经网络一起使用)您希望找到损失函数的最小值:MSE(均方误差)。您可以像使用

一样实施GD算法更新权重
gradient = X.T.dot(error) / X.shape[0]
W += - 0.44 * gradient

渐变只是损失函数(MSE)相对于权重的偏导数。因此,有效地最小化损失函数(MSE)。然后以0.44的学习率更新您的权重。 然后,您只需将损失函数的值保存在数组

loss = np.sum(error ** 2)
lossHistory.append(loss)

因此lossHistory数组包含您可以绘制以检查学习过程的成本(或损失)函数。情节应该显示一些减少。这个解释对你有帮助吗?

最佳, 翁