梯度下降法的过程步骤
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))