机器学习 —— 多元线性回归

什么是多元线性回归?

  在线性回归分析中,如果有两个或两个以上的自变量,就称为多元线性回归(multivariable linear regression)。如果我们要预测一套房子的价格,影响房子价格的因素可能包括:面积、卧室数量、层数以及房龄,我们用x1、x2、x3、x4来代表这4个特征(features)。在这里,我们假设房子的价格和这4个特征值都是线性相关的,并且用hθ来表示预测房子的价格,那么有: \[{h_\theta }(x) = {\theta _0} + {\theta _1}{x_1} + {\theta _2}{x_2} + {\theta _3}{x_3} + {\theta _4}{x_4}\]

其中θ为线性回归中的参数。我们把x、θ分别表示为列向量的形式:

\[\theta  = {\left( {{\theta _0},{\theta _1},{\theta _2},{\theta _3},{\theta _4}} \right)^T}\]

\[x = {\left( {1,{x_1},{x_2},{x_3},{x_4}} \right)^T}\]

那么我们可以发现 \[{h_\theta }(x) = {\theta ^T} \bullet x\]

如何实现多元线性回归?

对于拥有n个特征值、m个数据样本的数据,我们可以用一个m*(n+1)矩阵的形式表示出来,其中矩阵的每一行(即x(i))为一个数据样本,每一列代表一个特征值,xj(i)代表第i个数据样本中第j个特征值(x0(i)=0)

\[X = \left( {\begin{array}{*{20}{c}}
1&{x_{^1}^{(1)}}&{x_2^{(1)}}& \cdots &{x_n^{(1)}} \\
1&{x_{^1}^{(2)}}&{x_2^{(2)}}& \cdots &{x_n^{(2)}} \\
1&{x_{^1}^{(3)}}&{x_2^{(3)}}& \cdots &{x_n^{(3)}} \\
\vdots & \vdots & \vdots & \cdots & \vdots \\
1&{x_{^1}^{(m)}}&{x_2^{(m)}}& \cdots &{x_n^{(m)}}
\end{array}} \right) = \left( {\begin{array}{*{20}{c}}
{{x^{(1)}}^T} \\
{{x^{(2)}}^T} \\
{{x^{(3)}}^T} \\
\vdots \\
{{x^{(m)}}^T}
\end{array}} \right)\]

样本的实际值(对于房价预测来说就是房价)用y来表示:

\[y = {\left( {{y_1},{y_2}, \ldots ,{y_m}} \right)^T}\]

线性回归参数θ为:

\[\theta  = {\left( {{\theta _0},{\theta _1}, \ldots ,{\theta _n}} \right)^T}\]

接下来我们定义代价函数Jθ(cost function)为:

\[{J_\theta }(X) = \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{({h_\theta }({x^{(i)}}) - {y^{(i)}})}^2}}  = \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{({\theta ^T} \bullet {x^{(i)}} - {y^{(i)}})}^2}}  = \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{({x^{(i)T}} \bullet \theta  - {y^{(i)}})}^2}} \]

我们还可以把Jθ利用矩阵表达,获得更为简洁的形式

\[{J_\theta }(X) = \frac{1}{{2m}}{(X \bullet \theta  - y)^T} \bullet (X \bullet \theta  - y)\]

现在,我们只需要让代价函数Jθ最小,就能得到最优的θ参数。那么,要怎样才能使Jθ最小呢?有两个办法,一个是梯度下降法(gradient descent),一个是标准方程法(norm equation)

Jθ在样本数据X确定时,是关于θ的一个函数,而θ是一个(n+1)维的列向量,也就是说Jθ其实是一个(n+1)元函数。学过微积分的人应该知道,要求一个多元函数的极值,可以令多元函数对每个未知元的偏导数为0,从而求出未知元,再代入函数中,便可求出函数的极值。同样地,我们现在要求Jθ的极值,那么就要先使Jθ关于θ的偏导数,或者说关于θ0、θ1、θ2、...、θn的偏导数都为0。

Jθ对θj的偏导数为:

\[\frac{{\delta J}}{{\delta {\theta _j}}} = \frac{1}{m}\sum\limits_{i = 1}^m {({x^{(i)T}} \bullet \theta - {y^{(i)}})x_j^{(i)}} = \frac{1}{m}\left( {\begin{array}{*{20}{c}}
{x_j^{(1)}}&{x_j^{(2)}}& \cdots &{x_j^{(m)}}
\end{array}} \right) \bullet \left( {X\theta - y} \right)\]

则Jθ对θ的偏导数为:

\[\frac{{\delta J}}{{\delta \theta }} = \left( {\begin{array}{*{20}{c}}
{\frac{{\delta J}}{{\delta {\theta _0}}}} \\
{\frac{{\delta J}}{{\delta {\theta _1}}}} \\
\vdots \\
{\frac{{\delta J}}{{\delta {\theta _n}}}}
\end{array}} \right) = \frac{1}{m}\left( {\begin{array}{*{20}{c}}
1&1& \cdots &1 \\
{x_1^{(1)}}&{x_1^{(2)}}& \cdots &{x_1^{(m)}} \\
\vdots & \vdots &{}& \vdots \\
{x_n^{(1)}}&{x_n^{(2)}}&{}&{x_n^{(m)}}
\end{array}} \right)(X\theta - y) = \frac{1}{m}{X^T}(X\theta - y)\]

标准方程法(Normal Equation)

既然我们知道了Jθ偏导数的表达公式,那么我们只要让它等于0便可求出我们想要的θ,即令:

\[\begin{gathered}
\frac{{\delta J}}{{\delta \theta }} = \frac{1}{m}{X^T}(X\theta - y) = 0 \hfill \\
X\theta - y = 0 \hfill \\
X\theta = y \hfill \\
{X^T}X\theta = {X^T}y \hfill \\
\theta = {({X^T}X)^{ - 1}}{X^T}y \hfill \\
\end{gathered} \]

注意:在第四步中,两边左乘一个XT是为了在左边获得一个方阵(XTX),因为只有方阵才有逆矩阵。

在Python中,只需要两步便可实现这个算法:

1 from numpy.linalg import pinv
2 theta = pinv(X.T.dot(X)).dot(X.T).dot(y)

梯度下降法(Gradient Descent)

标准方程法虽然实现起来很简单,但是在面对十万甚至是百万级别的数据样本量时,求解一个如此大的矩阵的逆需要花费大量的时间,这时候就需要考虑梯度下降法了。梯度下降法的思想是一点点、逐步靠近极小值,通过多次迭代,不断更新θ的值,让代价函数Jθ收敛于极小值。迭代的公式为:

\[\theta  = \theta  - \alpha \frac{{\delta J}}{{\delta \theta }}\]

我们已经知道了如何求Jθ关于θ的偏导数,只要一直迭代下去,直到Jθ等于0或者足够的小(比如小于1e-5),最后我们便得到了想要的θ值。

以下我用Python实现了用梯度下降法求θ:

 1 import numpy as np
 2
 3 def partial_derivative(X, theta, y):
 4     derivative = X.T.dot(X.dot(theta) - y) / X.shape[0]
 5     return derivative
 6
 7
 8 def gradient_descent(X, y, alpha=0.1):
 9     theta = np.ones(shape=y.shape, dtype=float)
10     partial_derivative_of_J = partial_derivative(X, theta, y)
11     while any(abs(partial_derivative_of_J) > 1e-5):
12         theta = theta - alpha * partial_derivative_of_J
13         partial_derivative_of_J = partial_derivative(X, theta, y)
14     return theta
时间: 2024-07-29 14:46:04

机器学习 —— 多元线性回归的相关文章

机器学习笔记02:多元线性回归、梯度下降和Normal equation

在<机器学习笔记01>中已经讲了关于单变量的线性回归以及梯度下降法.今天这篇文章作为之前的扩展,讨论多变量(特征)的线性回归问题.多变量梯度下降.Normal equation(矩阵方程法),以及其中需要注意的问题. 单元线性回归 首先来回顾一下单变量线性回归的假设函数: Size(feet2) Price($1000) 2104 460 1416 232 1534 315 852 178 - - 我们的假设函数为 hθ(x)=θ0+θ1x 多元线性回归 下面介绍多元线性回归(Linear R

【机器学习实战】多元线性回归模型

在许多实际问题中,影响因变量Y的自变量不止一个,通常设为p个,此时无法借助于图形的帮助来确定模型,这里则使用一种最为简单且普遍的模型--多元线性模型来进行回归计算. 1.数学模型 当影响Y值的因素不唯一时,我们可以使用多元线性回归模型: 当未知参数有两个时,我们可以画出此方程的图形表示(此时是一个平面,如图).如果未知数大于2时,则很难把此超平面给画出来. 如上图,为了求得等参数的值,我们由各个样本点(图中为红点)做一条平行于Y轴的直线,此直线交平面方程于一点,然后我们求得此线段的程度,并进行平

简单多元线性回归(梯度下降算法与矩阵法)

多元线性回归是最简单的机器学习模型,通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测. 对应的模型如下: n: 特征数量. 一般选取残差平方和最小化作为损失函数,对应为: M:训练样本数量. 通过最小化代价损失函数,来求得 值,一般优化的方法有两种,第一是梯度下降算法(Gradient Descent),第二种是矩阵法(The normal equations). 梯度下降算法

线性模型(1) —— 多元线性回归

提纲: 线性模型的基本形式 多元线性回归的损失函数 最小二乘法求多元线性回归的参数 最小二乘法和随机梯度下降的区别 疑问 学习和参考资料 1.线性模型的基本形式 线性模型是一种形式简单,易于建模,且可解释性很强的模型,它通过一个属性的线性组合来进行预测,其基本的形式为: 式(1) 转换成向量形式之后写成: 式(2) 为什么说其解释性很强呢,是因为模型的权值向量十分直观地表达了样本中每一个属性在预测中的重要度,打个比方,要预测今天是否会下雨,并且已经基于历史数据学习到了模型中的权重向量和截距b,则

【R】多元线性回归

R中的线性回归函数比较简单,就是lm(),比较复杂的是对线性模型的诊断和调整.这里结合Statistical Learning和杜克大学的Data Analysis and Statistical Inference的章节以及<R语言实战>的OLS(Ordinary Least Square)回归模型章节来总结一下,诊断多元线性回归模型的操作分析步骤. 1.选择预测变量 因变量比较容易确定,多元回归模型中难在自变量的选择.自变量选择主要可分为向前选择(逐次加使RSS最小的自变量),向后选择(逐

机器学习 - 2 - 线性回归

机器学习 - 2 - 线性回归 首先吐槽我们的老师上课上得真是太烂了..真的烂.. PPT里也只会对没有意义的公式,而且还不解释是在干什么.. 回归 什么是回归 首先回归属于监督学习的一种,回归问题中,尝试预测连续的输出,与尝试预测离散的输出的分类问题恰恰相反. 举个例子: 预测房价 预测身高 ... 回归模型 素材: 特征 \(x\) 预测值 \(y\) 训练集 \((x_i,y_i)\) 学习算法 回归函数 \(f\) 线性回归时: \[f(X) = \omega_0 + \sum_{i =

02-07 多元线性回归(波士顿房价预测)

目录 多元线性回归(波士顿房价预测) 一.导入模块 二.获取数据 三.训练模型 四.可视化 五.均方误差测试 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ 多元线性回归(波士顿房价预测) 一.导入模块 import pandas as pd import matplotlib.pyplot as plt from matplotlib.font_manager im

多元线性回归和多项式回归

多项式回归也称多元非线性回归,是指包含两个以上变量的非线性回归模型.对于多元非线性回归模型求解的传统解决方案,仍然是想办法把它转化成标准的线性形式的多元回归模型来处理. 多元非线性回归分析方程 如果自变数与依变数Y皆具非线性关系,或者有的为非线性有的为线性,则选用多元非线性回归方程是恰当的.例如,二元二次多项式回归方程为: 令,及于是上式化为五元一次线性回归方程: 这样以来,便可按多元线性回归分析的方法,计算各偏回归系数,建立二元二次多项式回归方程. -参考文献:智库百科,点击打开 多元二项式回

多元线性回归

之前我们涉及过线性回归,不过那个是单元的(一个未知数X),这回我们来学习一下多元线性回归(多个X). 首先我们给一组房子数据: 我们给出几个关于多元线性回归的概念(我们把价格设为y,其他设为x): n : 特征数量(这里就是4) :第i组特征里的第j个特征 :第i组特征 可以用向量的方式表示.比如x(2) =  多元线性回归方程就为: 还可以写成: hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+?+θnxn (x0 = 1) 然后我们可以用矩阵来表示这个多元线性回归函数.(矩阵的知识请看我