线性分组码最小汉明距离_机器学习之线性回归模型详细手推公式与代码实现(篇一)...

f9540bda77481beed5990498abe7e24d.png
​微信公众号: 王了个博
专注于大数据技术,人工智能和编程语言 个人既可码代码也可以码文字。欢迎转发与关注

线性回归模型

在统计学中,线性回归(英语:linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。

在线性回归中,数据使用线性预测函数来建模,并且未知的模型参数也是通过数据来估计。这些模型被叫做线性模型。最常用的线性回归建模是给定X值的y的条件均值是X的仿射函数。

简单理解就是线性回归是一种线性模型,它假设输入变量X和单个输出变量y之间存在线性关系

线性回归模型经常用 最小二乘 逼近来拟合,但他们也可能用别的方法来拟合。最小二乘逼近可以用来拟合那些非线性的模型。因此,尽管“最小二乘法”和“线性模型”是紧密相连的,但他们是不能划等号的,仅仅是逼近来拟合。

435e77e98ae4632f4d1a8f4b99b9b230.png

最小二乘介绍
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小

66b64a98f00fc8a950d35b3ab2173d06.png

一元线性回归模型

给定多组训练数据进行函数建模,发现目标变量y和输入变量x之间的关系
这一模型最为简单,也即为:f(x) = ωx + b模型,也即一元线性回归模型

2b9e11298f109cd6367c1a2835d4dda4.png

方案

给定数据集D = {

2706ce3ecf0c9719b616cf30a970364c.png

}我们希望寻找到f(x)=ωx+b这样一条直线,使得数据集D上的点到直线f(x)的距离之和的绝对值最小。所以用到的方案就是上面介绍的最小二乘法

b69055636e7e1dc02dae08be66484112.png

手推公式

对于数据集D,我们希望最小拟合直线与数据点之间的距离,构造如下损失函数(根据最小二乘)

5ace38436ff3a5c914b415688d3015d4.png

求解ω和b 使得

e887e440175b4037e4a01542c790bd2b.png

最小

分别求其关于ω和b的偏导

d3906c959cbeb418e2875826d2385fde.png

8f5c449e7a55311d41d037e143a03dc7.png

39ff16ee0781276ee55bcb0cac01bfbd.png
  • 同上求

0713c9c5d6fcd8918d0213e04be164d8.png

b1d4cce5e6a743273d9dfbcf58c6f0e1.png
  • 分别令

8f5c449e7a55311d41d037e143a03dc7.png

= 0和

0713c9c5d6fcd8918d0213e04be164d8.png

=0,得到

93552738b71ad2c63501a2b7b1d5e4ff.png

通过第二式得到

88b7fa20bdb40daf68e12baeaa963151.png

通过将第三式带入到第一式得到

609a1dd8f26151e6cfd70e28dddb210d.png

化简

8d19903d0a9f26d6ea1ee15990fef9e6.png

bfd4b30e013dddd93dda7edcaac8ef51.png

得到

b33294ad1276d8a16b0a893a4d585a3c.png

至此ω 与 b都推算了出来

代码实现

  1. 引入依赖
1import numpy as np
2import matplotlib.pyplot as plt
  1. 导入数据散点图
 1points = np.genfromtxt('linear.csv', delimiter=',')
 2
 3points[0,0]
 4
 5# 提取points中的两列数据,分别作为x,y
 6x = points[:, 0]
 7y = points[:, 1]
 8
 9# 用plt画出散点图
10plt.scatter(x, y)
11plt.show()

效果如下图

435e77e98ae4632f4d1a8f4b99b9b230.png
  1. 定义损失函数
    也即我们上面分析的:

e887e440175b4037e4a01542c790bd2b.png
 1# 损失函数是系数的函数,另外还要传入数据的x,y
 2def compute_cost(w, b, points):
 3    total_cost = 0
 4    M = len(points)
 5
 6    # 逐点计算平方损失误差,然后求平均数
 7    for i in range(M):
 8        x = points[i, 0]
 9        y = points[i, 1]
10        total_cost += ( y - w * x - b ) ** 2
11
12    return total_cost/M
  1. 定义算法拟合函数
    主要的就是我们手推的 ωb

b33294ad1276d8a16b0a893a4d585a3c.png
 1# 先定义一个求均值的函数
 2def average(data):
 3    sum = 0
 4    num = len(data)
 5    for i in range(num):
 6        sum += data[i]
 7    return sum/num
 8
 9# 定义核心拟合函数
10def fit(points):
11    M = len(points)
12    x_bar = average(points[:, 0])
13
14    sum_yx = 0
15    sum_x2 = 0
16    sum_delta = 0
17
18    for i in range(M):
19        x = points[i, 0]
20        y = points[i, 1]
21        sum_yx += y * ( x - x_bar )
22        sum_x2 += x ** 2
23    # 根据公式计算w
24    w = sum_yx / ( sum_x2 - M * (x_bar**2) )
25
26    for i in range(M):
27        x = points[i, 0]
28        y = points[i, 1]
29        sum_delta += ( y - w * x )
30    b = sum_delta / M
31
32    return w, b
  1. 测试结果
1w, b = fit(points)
2
3print("w is: ", w)
4print("b is: ", b)
5
6cost = compute_cost(w, b, points)
7
8print("cost is: ", cost)

结果

  • w is: xxxxxxxx
  • b is: xxxxxxxx
  • cost is: xxxxxxxx

6. 画出拟合曲线

1plt.scatter(x, y)
2# 针对每一个x,计算出预测的y值
3pred_y = w * x + b
4
5plt.plot(x, pred_y, c='r')
6plt.show()

效果

66b64a98f00fc8a950d35b3ab2173d06.png

至此简单的一元线性回归模型总结完毕

未完待续,欢迎关注到微信公众号关注

微信公众号: 王了个博
人要去的地方,除了远方,还有未来 欢迎关注我,一起学习,一起进步!

http://weixin.qq.com/r/szidhXLEMi9NrTbm922h (二维码自动识别)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值