【线性回归算法】{0} ——线性回归算法的介绍及简单实现

线性回归法(Linear Regression)

特点:

● 解决回归问题
● 思想简单,实现容易
● 许多强大的非线性模型的基础
● 结果具有很好的可解释性
● 蕴含机器学习中的很多重要思想

在分类问题中,横纵轴都是特征。
在回归问题中,预测的是一个具体的数值,该数值是在一个连续的空间里的,所以要占有一个坐标轴的位置,如果想要看有两个样本特征的回归问题,就需要在三维空间中进行观察。


在线性回归问题中,我们要寻找一条直线,最大程度地拟合样本特征和样本输出标记之间的关系。

假设我们找到了最佳拟合的直线方程 y=ax+b
则对于每一个样本点 x ^(i),根据我们的直线方程,预测值为 y^ ^(i)=ax ^(i)+b,真值为 y ^(i)。

此时我们希望y的预测值和真值的差距尽量小,那么如何表达两者之间的差距呢?

y-y^ (会出现负数)

|y-y^| (不是处处可导)

最后选择 (y-y^)² 表达两者之间的差距。

考虑所有样本:
在这里插入图片描述
由于y^ ^(i)=ax ^(i)+b,所以误差可表示为:
在这里插入图片描述

我们的目标是,找到a和b,使得上述误差尽可能小。

一类机器学习算法的基本思路:

在这里插入图片描述
我们称之为损失函数(或代价函数)。

有一些是效用函数。

基本思路:

  • 通过分析问题,确定问题的损失函数或者效用函数,让损失函数小,效用函数大。
  • 通过最优化损失函数或者效用函数,获得机器学习的模型。

近乎所有参数学习算法都是这样的套路:
线性回归
SVM
最优化原理
多项式回归
神经网络
凸优化
逻辑回归

通过最小二乘法,我们得出a和b的值:


简单线性回归的实现:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 3, 2, 3, 5])
x_mean = np.mean(x) # 求均值
y_mean = np.mean(y)

num = 0.0 # 分子numerator
den = 0.0 # 分母denominator
for x_i, y_i in zip(x, y): # 用zip函数打包成元组
    num += (x_i - x_mean) * (y_i - y_mean)
    den += (x_i - x_mean) ** 2

a = num / den
b = y_mean - a * x_mean
y_hat = a * x + b

plt.scatter(x, y)
plt.plot(x, y_hat, color='r')
plt.axis([0, 6, 0, 6])
plt.show()

Output:


参考资料:bobo老师机器学习教程

发布了75 篇原创文章 · 获赞 267 · 访问量 5232

猜你喜欢

转载自blog.csdn.net/weixin_45961774/article/details/105055197