随机梯度下降

import numpy as np

# 设定x,y对应的值,即二维空间对应的100个点
x = np.random.rand(100, 1)
y = 4 + (3*x) + (0.2 * np.random.rand(100, 1))
m = 100
# 对每一行添加x0=1
x_b = np.c_[np.ones(shape=(100, 1)), x]

# 设定迭代次数
n_iteration = 200


# 设定学习率函数
def learning_scheture(t):
    return 5 / (t + 50)


# 利用迭代求解成本函数最小时的theta值
# 设定任意初始theta值,是两行一列数组
theta = np.random.rand(2, 1)
print('选取的初始θ值为:', theta)

for iteration in range(n_iteration):
    for i in range(m):
        random_index = np.random.randint(m)
        xi = x_b[random_index:random_index+1]
        gradient = (2 * (x_b.T.dot(x_b.dot(theta) - y))) / m
        eta = learning_scheture(iteration * m + i)
        theta = theta - eta * gradient
    print(f'第{iteration}次θ:{theta}')
print(theta)

你可能感兴趣的:(机器学习,机器学习)