使用NumPy实现简单的机器学习任务

我们用最原始的NumPy实现一个有关回归的机器学习任务,而不用PyTorch中的包或类。这种方法的代码可能会多一点,但每一步都是透明的,有利于理解每一步的工作原理。

主要步骤分析如下。
首先,给出一个数组x,然后基于表达式y=3x+2,加上一些噪声数据到达另一组数据y。然后,构建一个机器学习模型,学习表达式y=wx+b的两个参数w、b。利用数组x、y的数据训练模型。
最后,采用梯度下降法,通过多次迭代学习到w、b的值。

通俗一点就是已知一组x,y的值,这些值是满足函数严格一一对应的条件,我们需要通过数据去反推x,y之间存在最满足原始数据的函数关系

 

import numpy as np
from matplotlib import pyplot as plt


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)

# drawing
plt.scatter(x,y)
plt.show()

# 初始化参数
w1 = np.random.rand(1,1)
b1 = np.random.rand(1,1)

这里我们取100个随机数

学习之后得到的拟合曲线

补充代码如下

# 训练模型
lr = 0.001  # 学习率
for i in range(800):
    # 正向传播
    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)
    # 使用梯度下降更新参数
    w1 -= lr * grad_w
    b1 -= lr * grad_b

# 可视化结果
plt.plot(x, y_pred, 'r-', label='Predict', linewidth=4)
plt.scatter(x, y, color='blue', marker='o', label='True')
plt.xlim(-1, 1)
plt.ylim(2, 6)
plt.legend()
plt.show()
print("w1:", w1, "b1:", b1)

同时终端把计算出的b1,w1显示出来

与我们设定的w1 = 3,b1 = 2几乎一样,若数据的个数增大至无穷,则这两个参数无限接近设定值。

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值