这里先画出100个测试数据和它的初始预测曲线,由图可看出,测试数据的拟合曲线更像是一条正比例函数
这里一开始姑且将预测曲线设置为y = w * x , w的初始值为0.1
下面开始随机梯度下降算法,随机梯度下降区别于传统梯度下降表现在,一次训练过程只从这100个数据中随机抽取一个数据进行梯度下降,代码实现如下:
import random
import dataset
import matplotlib.pyplot as plt
xs, ys = dataset.get_beans(100)
# 画出训练数据的散点图
plt.title("Size-Toxicity Function", fontsize=12)
plt.xlabel("Size")
plt.ylabel("Toxicity")
plt.scatter(xs, ys)
# 画出初始预测曲线
w = 0.1
y_pre = w * xs
plt.plot(xs, y_pre)
plt.show()
# 拟定训练次数为100次
for _ in range(100):
# 取随机数为0到(数据大小-1)的随机数生成随机索引用于随机拿取数据进行训练
i = random.randint(0, xs.size-1)
x = xs[i]
y = ys[i]
k = 2 * (x ** 2) * w + (-2 * x * y)
alpha = 0.1
w = w - alpha * k
# 动态画出训练过程
plt.clf()
plt.scatter(xs, ys)
y_pre = w * xs
plt.xlim(0, 1)
plt.ylim(0, 1.2)
plt.plot(xs, y_pre)
plt.pause(0.01)
# 展示最终预测结果
plt.show()
训练中的截图如下
最终训练结果如下