2.6 使用Numpy实现简单机器学习

我们用原始的Numpy实现有关回归的一个机器学习任务,不用PyTorch和Tensorflow中的包或类。
首先,给出一个数组x,然后基于表达式y=3x^2+2,加上一些噪音数据到达另一组数据y。
然后,构建一个简单的机器学习模型,学习表达式y=wx^2+b的两个参数w、b。利用数组x,y的数据为训练数据。
最后,采用梯度下降法,通过多次迭代,学习到w、b的值。
以下为具体代码:

# 1、导入需要的库
import numpy as np
from matplotlib import pyplot as plt
# 2、生成输入数据x及目标数据y
# 定义一个随机种子,保证后面的数据一样
np.random.seed(100)
x = np.linspace(-1, 1, 100).reshape(100, 1)
y = 3 * np.power(x, 2) + 2 +0.2 * np.random.rand(x.size).reshape(100, 1)
# 3、查看x,y的数据分布情况
# 画图
plt.scatter(x, y)
plt.show()
# 4、初始化权重参数
# 随机初始化参数
w1 = np.random.rand(1, 1)
b1 = np.random.rand(1, 1)
# 5、训练模型
# 定义损失函数,假设批量大小为100
lr = 0.001  # 学习率
for i in range(15000):
    # 前向传播
    y_pred = np.power(x, 2) * w1 + b1
    # 定义损失函数
    loss = 0.5 * (y_pred - y) ** 2
    loss = loss.sum()
    # 计算梯度
    grad_w = np.sum((y_pred - y) * np.power(x, 2))
    grad_b = np.sum((y_pred - y))
    # 使用梯度下降法,使loss最小
    w1 -= lr * grad_w
    b1 -= lr * grad_b
# 6、可视化结果
plt.plot(x, y_pred, 'r-', label='predict')
plt.scatter(x, y, color='blue', marker='o', label='True')
plt.xlim(-1, 1)
plt.ylim(2, 6)
plt.legend()
plt.show()
print(w1, b1)

结果:
[[2.99134284]] [[2.09741738]]

最后结果的可视化
在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐