线性回归

简介: 写在最前面的几句话,我们下面所有的问题的符号规约如下:代表训练集中实例的数量代表输入变量代表目标变量代表训练集中的实例代表第个实例表示第个变量代表学习算法的解决方案或函数,也成为假设(hypothesis)是代价函数1、单变量线性回归单变量的线性回归比较简单,一般表达式为,现在我们来求代价函数。

写在最前面的几句话,我们下面所有的问题的符号规约如下:

  • m代表训练集中实例的数量
  • x代表输入变量
  • y代表目标变量
  • (x, y)代表训练集中的实例
  • (x^{(i)}, y^{(i)})代表第i个实例
  • x_i表示第i个变量
  • h代表学习算法的解决方案或函数,也成为假设(hypothesis)
  • J是代价函数

1、单变量线性回归

单变量的线性回归比较简单,一般表达式为h_\theta(x) = \theta_0 + \theta_1x,现在我们来求代价函数。我们一般用平方差损失函数,即(h_\theta(x^{(i)}) - y^{(i)})^2,因为我们求的是平均损失,而所有的样本个数为m,那么J(\theta_0,\theta_1) = \frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2,后面为了方便计算,在m旁边乘了个2,所以,原公式变为J(\theta_0,\theta_1) = \frac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2,我们的目标是让损失函数最小。
一个经典的优化方法是梯度下降法(Gradient Descent)。从公式可以看出,我们需要找到一个参数\theta_0\theta_1使得损失函数最小。现在所有的xy是已知的,所以J(\theta_0,\theta_1)是关于\theta_0\theta_1的函数(搞清楚这点很重要)。
现在我们考虑一个简单的情况,假设\theta_0为0。那么损失函数变为J(\theta_1),如果我们对和\theta_1取任意的值,最后可以组成如下图所示的图形

可以看出当 J(\theta_1)是关于\theta_1的函数时,我们需要取到一个\theta_1使得J(\theta_1)最小。如果加上J(\theta_0),对J(\theta_0),J(\theta_1)任意取值,最后可以形成如图所示的图形

横轴为J(\theta_0),J(\theta_1),数轴为J(\theta_0,\theta_1)所谓的梯度下降就是不断迭代J(\theta_0),J(\theta_1)使得损失函数最小。当然,一般的函数图像不会像这样的,一般都是这样像丘壑一样高低不平

梯度下降法(Gradient Descent)如下:首先我们需要对\theta_0,\theta_1随机初始一个值,对应上图就是随机从图像的一点出发,然后不断更新\theta_0,\theta_1。如图:

梯度下降这事怎么解释呢?首先我们很疑惑的是,为什么要减去导数?其实,我们只不过是沿着梯度的方向变化而已而梯度的方向就是函数对各个变量偏导数的方向,我们需要这个方向,所以导数保留了,然后我们为什么乘\alpha,就是因为我们可以任意变换在梯度方向的变化量。总而言之最重要的一点是,梯度的方向!!!方向!!!
我们还是以最简单的情况来看,即\theta_0 = 0

我们每次都J(\theta_1)求导,那么沿着这个方向,我们不断变化然后取到最小值。
关于单变量的线性回归,我们可以求出他们需要更新值是:

推导很简单,直接将h_\theta(x)展开成h_\theta(x) = \theta_0 + \theta_1x,然后求偏导即可。

2、多变量线性回归

讲完了单变量线性回归,多变量就好讲了。多变量只不过多了很多x_i的变量,它的目标函数变成了h_\theta(x) = \theta_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_n。但是为了公式简洁(数学家就是强迫症),我们假设x_0 = 1,则公式转化为h_\theta(x) = \theta_0x_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_n,然后代价函数是J(\theta_0,\theta_1,...,\theta_n) = \frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2,梯度下降算法为:


即:

求导之后得到(j是第j个变量):

例如(其他的就不写了,这只是举个栗子):


3、一些基础杂点

3.1特征缩放

为什么需要特征缩放。因为在多维问题中,如果每一个变量的取值范围都差不多,那么梯度下降很快。但是如果一个变量的取值为0-5,另一个为0-2000,那么分别以这两个参数为横坐标,绘制损失函数的等高线图,可以看出图像很扁,梯度下降需要很多次迭代才能收敛。


如果将所有特征缩放到-1到1之间(很多缩放方法,比如最大最小缩放之类的)


可以看出图像并没有那么扁,梯度下降很好收敛。

3.2正规方程(最小二乘法)

损失函数的另一种解法是正规方程,它能一步得到解。这种解法是很直观的数学解法,但是在特征维度很多的时候,在工程上没有任何优势,所以现在都是用梯度下降。


这是代数形式的正规方程,当时吴恩达老师说如果求每个\theta的偏导会很麻烦,所以用了矩阵的形式表示,然后解出\theta\theta = (X^TX)^{-1}X^TY,这里\theta, X, Y都是向量。这种解法作为了解了,毕竟现在都是梯度下降的天下了。

目录
相关文章
|
前端开发 数据可视化 JavaScript
前端图形学实战: 100行代码实现几何画板的撤销重做等功能(vue3 + vite版)
前端图形学实战: 100行代码实现几何画板的撤销重做等功能(vue3 + vite版)
171 0
|
7月前
|
机器学习/深度学习 安全 开发工具
通义灵码开发者社区的构成——通义灵码团队与合作伙伴
通义灵码开发者社区的成功,得益于核心团队的引领和合作伙伴的支持。团队专注于产品开发、维护及社区管理,确保通义灵码的高质量与稳定性;合作伙伴则提供丰富的资源和资金支持,共同推动技术创新和市场应用,构建了一个充满活力的生态系统。
|
8月前
|
前端开发 安全 JavaScript
在阿里云快速启动Appsmith搭建前端页面
本文介绍了Appsmith的基本信息,并通过阿里云计算巢完成了Appsmith的快速部署,使用者不需要自己下载代码,不需要自己安装复杂的依赖,不需要了解底层技术,只需要在控制台图形界面点击几下鼠标就可以快速部署并启动Appsmith,非技术同学也能轻松搞定。
|
8月前
|
SQL 监控 数据可视化
数据可视化:Power BI在商业智能中的强大作用
【10月更文挑战第28天】在信息爆炸的时代,数据成为企业决策的重要依据。Power BI作为微软开发的强大数据可视化工具,集数据整合、报表制作和数据可视化于一体,通过简单拖放操作即可生成交互式图表和报表,提高决策效率,实现数据整合与实时监控,助力企业挖掘数据价值,提升竞争力。
265 3
|
9月前
|
监控 固态存储 算法
如何进行硬盘碎片整理?
【10月更文挑战第1天】如何进行硬盘碎片整理?
374 2
|
安全 网络安全 数据安全/隐私保护
socks5代理如何工作?socks5代理可以用来做什么?
本文介绍了socks5代理,一种能传输二进制数据的协议代理,提供更好的安全性和灵活性。它在客户端和服务器间作为中介,支持加密通信,适用于突破网络限制、保护隐私和加速访问。选择socks5代理应考虑稳定性、速度、安全性和透明性,以及对多协议的支持。
|
11月前
|
数据可视化 搜索推荐 定位技术
plotly | python可视化进阶之路
plotly | python可视化进阶之路
175 1
|
11月前
|
域名解析 存储 资源调度
Excalidraw——部署一个手绘风格的画图工具
Excalidraw——部署一个手绘风格的画图工具
285 3
|
11月前
|
TensorFlow 算法框架/工具 Python
【Mac 系统】解决VSCode用Conda成功安装TensorFlow但程序报错显示红色波浪线Unable to import ‘tensorflow‘ pylint(import-error)
本文解决在Mac系统上使用VSCode时遇到的TensorFlow无法导入问题,原因是Python解析器未正确设置为Conda环境下的版本。通过在VSCode左下角选择正确的Python解析器,即可解决import TensorFlow时报错和显示红色波浪线的问题。
497 9
Navicate如何修改数据排序
Navicate如何修改数据排序