ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

机器学习入门的第一课:回归

2022-01-15 21:32:29  阅读:195  来源: 互联网

标签:机器 入门 英寸 torch 第一课 w1 w0 身高 grad


  机器学习,通俗简单来说,就是用某些算法指导计算机模拟或实现人类的学习行为从已有的数据总结规律获得“经验”并不断改善自身性能的一个过程。由此可见,算法和数据是计算机学习到“新知识”或“新技能”的关键所在。

1.谈谈“回归”一词的起源

  十九世纪八十年代,高尔顿和他的学生、现代统计学奠基人之一的皮尔逊(Pearson)收集了1078对父亲及其1个成年儿子的身高数据,根据调查数据作出散点图后发现,个子高的父亲确有生出个子高的儿子的倾向;同样个子矮的父亲也有生出个子矮的儿子的倾向。高尔顿研究后还发现,这1078个父亲的身高平均值为68英寸,1078个儿子的身高平均值是69英寸。一种自然的想法是:如果父亲的身高是x英寸,那么他儿子的身高平均来说大致是x+1英寸。但高尔顿在研究时发现,当父亲的身高是72英寸时,他们的儿子的平均身高仅为71英寸,并没有达到73英寸。他同时还发现,身高只有64英寸的父亲其儿子的平均身高为67英寸,竟然比预期的65英寸高了2英寸。由此他得出结论:尽管高父亲往往生出高儿子,矮父亲大多生出爱矮儿子,但”儿子们“的身高有向全体男子身高的平均值靠近的趋势,即子代身高有向平均值”回归“的倾向。高尔顿的解释是:大自然具有一种约束力,使得人类身高的分布在一定时期内相对稳定而不产生两极分化,这就是所谓的”回归“效应。通过这一例子,高尔顿引入了”回归“(reversion,后来慢慢演变成regression)一词。

2.机器学习中的回归

  在统计学中,回归分析是确定两种或两种以上的变量间相互依赖的定量关系的一种统计分析方法。在机器学习中,回归用于预测输入变量和输出变量之间的关系,特别是当输入变量的值发生变化时,输出变量的值随之发生的变化。回归模型正是表示从输入变量到输出变量之间映射的函数,回归问题等价于函数拟合:选择一条函数曲线使其很好地拟合已知数据且很好地预测未知数据。回归问题常用于预测连续的值,如预测房价、未来的天气情况等等。

3.回归算法入门之学习参数

  给出一个数组x,然后基于表达式 y = 2x^2+3x+10,加上一些噪音数据到达另一组数据y。然后,构建一个机器学习模型,利用数组x,y 的数据为训练数据,学习表达式y = w0*x^2+w1*x+b的三个参数w0、w1、b。

  代码如下:

from matplotlib import pyplot as plt
import torch

# 拟合 y = 2x^2+3x+10
x = torch.linspace(-1, 1, 100).reshape(100, 1)
y = 2 * torch.pow(x, 2) + 3 * x + 10 + 0.2 * torch.rand(x.size()).reshape(100, 1)

w0 = torch.randn(1, 1, requires_grad=True)
w1 = torch.randn(1, 1, requires_grad=True)
b = torch.randn(1, 1, requires_grad=True)
lr = 0.005 #学习率
for i in range(1000):
    # 前向传播
    y_pred = w0 * torch.pow(x, 2) + w1 * x + b + 0.2 * torch.rand(x.size()).reshape(100, 1)

    # 反向传播
    loss_arr = 0.5 * (y - y_pred) ** 2
    loss = loss_arr.sum()  # 损失

    loss.backward()# 反向传播求w0,w1,b梯度

    with torch.no_grad():
        w0 -= lr * w0.grad 
        w1 -= lr * w1.grad
        b -= lr * b.grad

        w0.grad.zero_()#每训练一次,梯度要清0
        w1.grad.zero_()
        b.grad.zero_()

print("w0 is {},w1 is {},b is {}".format(w0, w1, b))
plt.scatter(x, y, c='b', marker='o', label='True')
plt.plot(x, y_pred.detach().numpy(), 'r-', label='Pred')
plt.legend()
plt.show()

运行结果:

(1)学习到的参数很接近表达式的参数

(2)模型很好的拟合了基于表达式产生的数据点

标签:机器,入门,英寸,torch,第一课,w1,w0,身高,grad
来源: https://www.cnblogs.com/yaolexue/p/15807793.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有