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

我是机器学习的新手。我从带有梯度下降的线性回归开始。我有相关的Python代码,并且理解这种方法。我的问题是:梯度下降算法最小化函数,我能绘制这个函数吗?我想看看这个函数的最小值是什么样子的。这可能吗?我的代码如下:

import matplotlib.pyplot as plt import numpy as npdef 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 * gradientplt.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()

回答:

冒着显而易见的风险… 你可以简单地用matplotlib绘制lossHistory。还是我错过了什么?

编辑:显然,原帖作者问的是梯度下降(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数组包含了你可以绘制来检查学习过程的成本(或损失)函数。绘图应该显示出某种下降的趋势。这个解释对你有帮助吗?

祝好,Umberto

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注