梯度下降法的过程步骤
1.初始化参数:初始化w和b的值

2.计算损失函数

3.计算梯度:计算损失函数对w和b的偏导值

4.更新参数:更新w和b的值,自身减去偏导值

5.重复操作:重复2-4的操作直到收敛或达到最大迭代次数

对于第3步计算梯度,在这里给出公式

在这里直接用来代替系数和截距的偏导值了

再回看这道题,我们发现题目中说明了数组 X(具有一列截距的特征)
所以这里是不用处理b的,我们只需要对w进行梯度处理即可。

代码如下:


import numpy as np
import json

# 输入矩阵和向量
matrix_inputx = input()
array_y = input()
alpha = float(input())
iterations = int(input())

x = np.array(json.loads(matrix_inputx))
y = np.array(json.loads(array_y)).reshape(-1, 1)
# 这里需要处理y,因为y是一个一维矩阵,为了方便后面计算,我们将其改为(4,1)
n_samples, n_features = x.shape
w = np.zeros((n_features, 1))
learning_rate = alpha

# 梯度下降过程
# 套用上面说的公式即可
for i in range(iterations):
    y_pred = np.dot(x, w)
    dw = -(1 / n_samples) * (x.T @ (y - y_pred)) # @是矩阵乘法运算符
    w = w - alpha * dw

print(np.round(w.flatten(), 4))