1 线性回归简介
- 回归算法是一种有监督算法
- 回归算法是一种比较常用的机器学习算法,用于构建一个模型来做特征向量到标签的映射。在算法的学习过程中,试图寻找一个模型,最大程度拟合训练数据。
- 回归算法在使用时,接收一个n维度特征向量,输出一个连续的数据值
(1)原理:包含数据(训练实例)、模型(线性回归)、性能(代价函数)、算法(梯度下降)
迭代优化过程
(2)解决问题:对大量的观测数据进行处理,从而得到比较符合事物内部规律的数学表达式。也就是说寻找到数据与数据之间的规律所在,从而就可以模拟出结果,也就是对结果进行预测。解决的就是通过已知的数据得到未知的结果。例如:对房价的预测、判断信用评价、电影票房预估等。
2 线性回归基本形式
在只有一个变量的情况下,线性回归可以用方程:y=ax+by=ax+by=ax+b 表示。而如果有多个变量,也就是nnn元线性回归的形式如下:
hθ(x)=θ0+θ1x(1)+θ2x(2)+...+θnx(n)hθ(x)=∑i=0nθix(i)=θTx
h_{\theta}(x) = \theta_0+\theta_1x^{(1)}+\theta_2x^{(2)}+...+\theta_nx^{(n)}
\\ h_{\theta}(x) = \sum_{i=0}^n\theta_ix^{(i)}=\theta^Tx
hθ(x)=θ0+θ1x(1)+θ2x(2)+...+θnx(n)hθ(x)=i=0∑nθix(i)=θTx
nnn元线性回归:在这里我们将截断bbb用θ0θ_0θ0代替,同时数据集XXX也需要添加一列1用于与θ0θ_0θ0相乘,表示+b+b+b。最后写成矩阵的形式就是θθθ的转置乘以xxx。其中如果数据集有nnn个特征,则θθθ就是n+1n+1n+1维的向量并非矩阵,其中包括截断bbb。
3 线性回归目的
线性回归的目的就是求解出合适的θθθ,在一元的情况下拟合出一条直线(多元情况下是平面或者曲面),可以近似的代表各个数据样本的标签值。所以最好的直线要距离各个样本点都很接近,而如何求出这条直线就是重点。
4 线性回归模型计算
线性回归模型矩阵表达方式
数据集:NNN个样本,xix_ixi有nnn个特征,样本集为(xi,yi),i=1,2,...,N(x_i,y_i),i=1,2,...,N(xi,yi),i=1,2,...,N
yi=yi xi=[1xi(1)xi(2)...xi(n)]θ=[θ0θ1θ2...θn]
y_i = y_i \
x_i=\left [
\begin{matrix}
1 \\ x_i^{(1)} \\ x_i^{(2)}\\ ... \\ x_i^{(n)}\\
\end{matrix}
\right ]
\theta=\left [
\begin{matrix}
\theta_0\\
\theta_1\\
\theta_2\\
...\\
\theta_n
\end{matrix}
\right ]
yi=yi xi=1xi(1)xi(2)...xi(n)θ=θ0θ1θ2...θn
线性回归模型:
hθ(xi)=θ0+θ1xi(1)+...+θmxi(n)=xi=[θ0θ1θ2...θn][1xi(1)xi(2)...xi(n)]=θTxi
h_{\theta}(x_i)=\theta_0+\theta_1x_i^{(1)}+...+\theta_mx_i^{(n)}=x_i=
\left [
\begin{matrix}
\theta_0&
\theta_1&
\theta_2&
...&
\theta_n
\end{matrix}
\right ]
\left [
\begin{matrix}
1 \\ x_i^{(1)} \\ x_i^{(2)}\\ ... \\ x_i^{(n)}\\
\end{matrix}
\right ]
=\theta^Tx_i
hθ(xi)=θ0+θ1xi(1)+...+θmxi(n)=xi=[θ0θ1θ2...θn]1xi(1)xi(2)...xi(n)=θTxi
损失函数:是用来估量模型的预测值 f(x)f(x)f(x)与真实值 YYY 的不一致程度,损失函数越小,模型的效果就越好。它的具体形式如下:
J(θ)=J(θ0,θ1,...,θn)=12N∑i=1N(hθ(xi)−yi)2
J(\theta)=J(\theta_0,\theta_1,...,\theta_n)=\frac{1}{2N}\sum_{i=1}^N(h_{\theta}(x_{i})-y_{i})^2
J(θ)=J(θ0,θ1,...,θn)=2N1i=1∑N(hθ(xi)−yi)2
其中,xix_{i}xi代表第iii个样本,xi=[1xi(1)xi(2)...xi(n)]x_i=\left [\begin{matrix}1 \\ x_i^{(1)} \\ x_i^{(2)}\\ ... \\ x_i^{(n)}\\\end{matrix}\right ]xi=1xi(1)xi(2)...xi(n),hθ(xi)h_θ(x_{i})hθ(xi)代表每个样本通过我们模型的预测值,yiy_{i}yi代表每个样本标签的真实值,NNN为样本个数。
另一种写法如下:
Y=[y1y2...yN] X=[x1Tx2T...xNT]=[1x1(1)x1(2)...x1(n)1x2(1)x2(2)...x2(n)...............1xN(1)xN(2)...xN(n)]θ=[θ0θ1θ2...θn]
Y=\left [
\begin{matrix}
y_1\\
y_2\\
...\\
y_N
\end{matrix}
\right ] \
X=\left [
\begin{matrix}
x_1^T\\
x_2^T\\
...\\
x_N^T
\end{matrix}
\right ]
=\left [
\begin{matrix}
1 & x_1^{(1)} & x_1^{(2)}& ... & x_1^{(n)}\\
1 & x_2^{(1)} & x_2^{(2)}& ... & x_2^{(n)}\\
...& ... & ... & ...&...\\
1 & x_N^{(1)} & x_N^{(2) }&... & x_N^{(n)}
\end{matrix}
\right ]
\theta=\left [
\begin{matrix}
\theta_0\\
\theta_1\\
\theta_2\\
...\\
\theta_n
\end{matrix}
\right ]
Y=y1y2...yN X=x1Tx2T...xNT=11...1x1(1)x2(1)...xN(1)x1(2)x2(2)...xN(2)............x1(n)x2(n)...xN(n)θ=θ0θ1θ2...θn
J(θ)=12N(Xθ−Y)T(Xθ−Y) J(\theta) =\frac{1}{2N}(X\theta-Y)^T(X\theta-Y) J(θ)=2N1(Xθ−Y)T(Xθ−Y)
Python语言实现代码:
J=(1.0/(2*m))*np.sum(np.square(X.dot(theta)-y))
J = (1.0/(2*m))*(X.dot(theta)-y).T.dot(X.dot(theta)-y)
因为模型预测值和真实值间存在误差ε\varepsilonε,可以写作:
yi=θTxi+εi
y_{i}=\theta^Tx_{i}+\varepsilon_{i}
yi=θTxi+εi
(预测值-真实值)的平方和的平均值,换句话说就是点到直线距离和最小。
5 最小二乘法(又称最小平方法)
最小二乘法(又称最小平方法)是一种数学优化技术。它由两部分组成:
- 计算所有样本误差的平均(代价函数)
- 使用最优化方法寻找数据的最佳函数匹配(抽象的)
最小二乘法是抽象的,具体的最优化方法有很多,比如正规方程法、梯度下降法、牛顿法、拟牛顿法等等
(1)预测样本公式
y^i=θTxi
\hat{y}_{i}=θ^Tx_{i}
y^i=θTxi
(2)实际样本表达公式
yi=θTxi+εi
y_i =θ^T x_{i} + \varepsilon_{i}
yi=θTxi+εi
假设误差εi(1≤i≤m)ε_{i}(1≤i ≤ m)εi(1≤i≤m)每个样本点相互独立的,服从均值为0,方差为σ2σ^2σ2的高斯分布,原因:中心极限定理
P(εi)=12πσexp(−εi22σ2)
P(\varepsilon_i)=\frac{1}{\sqrt{2 \pi} \sigma} \exp(−\frac{{\varepsilon_{i}} ^2}{2 \sigma^2 })
P(εi)=2πσ1exp(−2σ2εi2)
极大似然估计(Maximum Likelihood Estimation, MLE)也称最大似然估计,是一种具有理论性的参数估计方法。基本思想是:当从模型总体随机抽取mmm组样本观测值后,最合理的参数估计量应该使得从模型中抽取该nnn组样本观测值的概率最大(利用已知的样本结果,最大概率导致这样结果的参数值)。一般步骤如下:
(1)写出似然函数:所有样本误差概率相乘
P(εi)=12πσexp(−εi22σ2)即:P(yi∣xi;θ)=12πσexp(−(θTxi−yi)22σ2)L(θ)=∏i=1NP(yi∣xi;θ)=∏i=1N12πσexp(−(θTxi−yi)22σ2)
P(\varepsilon_{i})=\frac{1}{\sqrt{2\pi} \sigma} \exp(−\frac{{\varepsilon_{i}} ^2}{2\sigma^2 })
\\即: P(y_{i}|x_{i};\theta)=\frac{1}{\sqrt{2\pi} \sigma} \exp(−\frac{{(\theta^Tx_{i}-y_{i})}^2}{2\sigma^2 })
\\ L(\theta)=\prod_{i=1}^NP(y_{i}|x_{i};\theta)=\prod_{i=1}^N \frac{1}{\sqrt{2\pi} \sigma} exp(−\frac{{(\theta^Tx_{i}-y_{i})}^2}{2\sigma^2 })
P(εi)=2πσ1exp(−2σ2εi2)即:P(yi∣xi;θ)=2πσ1exp(−2σ2(θTxi−yi)2)L(θ)=i=1∏NP(yi∣xi;θ)=i=1∏N2πσ1exp(−2σ2(θTxi−yi)2)
(2)对似然函数取对数,并整理:将公式连乘变为连加
l(θ)=logL(θ)=log(∏i=1N12πσexp(−(θTxi−yi)22σ2))=∑i=1Nlog(12πσexp(−(θTxi−yi)22σ2))=Nlog12πσ−1σ2.12∑i=1N(θTxi−yi)2
l(\theta)=\logL(\theta)=\log(\prod_{i=1}^{N} \frac{1}{\sqrt{2\pi} \sigma} exp(−\frac{{(\theta^Tx_{i}-y_{i})}^2}{2\sigma^2 }))
\\ =\sum_{i=1}^N\log (\frac{1}{\sqrt{2\pi} \sigma} \exp(−\frac{{(\theta^Tx_{i}-y_{i})}^2}{2\sigma^2 }))
\\ =N \log\frac{1}{\sqrt{2\pi} \sigma}-\frac{1}{\sigma^2}.\frac{1}{2}\sum_{i=1}^{N}{(\theta^Tx_{i}-y_{i})}^2
l(θ)=logL(θ)=log(i=1∏N2πσ1exp(−2σ2(θTxi−yi)2))=i=1∑Nlog(2πσ1exp(−2σ2(θTxi−yi)2))=Nlog2πσ1−σ21.21i=1∑N(θTxi−yi)2
σσσ为已知值,上式极大值,而被减数是定值,所以减数越小,整体公式数值越大
J(θ)=12N[∑i=1N(hθ(xi)−yi)2)]
J(\theta)=\frac{1}{2N} [ \sum_{i=1}^{N}(h_\theta(x_{i})-y_{i})^2)]
J(θ)=2N1[i=1∑N(hθ(xi)−yi)2)]
(3)求导数:针对θθθ值进行求导操作
(4)解似然方程:求出θθθ的最优解
6 梯度下降(Gradient descent)
6.1 梯度下降基础概念
梯度下降法(Gradient Descent,GD)常用于求解无约束情况下凸函数(Convex Function)的极小值,是一种迭代类型的算法,因为凸函数只有一个极值点,故求解出来的极小值点就是函数的最小值点。
梯度下降背后的思想是:开始时我们随机选择一个参数的组合(θ0,θ1)(θ_0,θ_1)(θ0,θ1),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。
用一幅图来表示:
NNN个样本,每个样本mmm个维度,梯度下降法的一般过程如下:
(1)初始化θθθ(随机)
(2)对J(θ)J(θ)J(θ)求θjθ_jθj偏导
∂∂θjJ(θ)=∂∂θj12N∑iN[(hθ(xi)−yi)2]=1N∑iN[(hθ(xi)−yi)∗∂∂θj(hθ(xi)−yi)]=1N∑iN[(hθ(xi)−yi)∗∂∂θj(∑k=1mθkxi(k)−yi)]=1N∑iN[(hθ(xi)−yi)∗xi(j)]
\begin{aligned}
\frac{\partial}{\partial \theta_j}J(\theta)&=\frac{\partial}{\partial \theta_j}\frac{1}{2N} \sum_i^N[ (h_\theta(x_{i})-y_{i})^2 ]
\\ &=\frac{1}{N} \sum_i^N[(h_\theta(x_{i})-y_{i}) * \frac{\partial}{\partial \theta_j}(h_\theta(x_{i})-y_{i})]
\\ &=\frac{1}{N} \sum_i^N[(h_\theta(x_{i})-y_{i}) * \frac{\partial}{\partial \theta_j}(\sum_{k=1}^m\theta_kx^{(k)}_{i}-y_{i})]
\\&=\frac{1}{N} \sum_i^N [(h_\theta(x_{i})-y_{i})*x^{(j)}_{i}]
\end{aligned}
∂θj∂J(θ)=∂θj∂2N1i∑N[(hθ(xi)−yi)2]=N1i∑N[(hθ(xi)−yi)∗∂θj∂(hθ(xi)−yi)]=N1i∑N[(hθ(xi)−yi)∗∂θj∂(k=1∑mθkxi(k)−yi)]=N1i∑N[(hθ(xi)−yi)∗xi(j)]
(3)更新θθθ
θj=θj−α∗∂J(θ)∂θj
\theta_j = \theta_j-\alpha*\frac{\partial J(\theta)}{\partial \theta_j}
θj=θj−α∗∂θj∂J(θ)
-
α\alphaα被称为步长或者学习率(learning rate),表示自变量θθθ每次迭代变化的大小,大于0的一个很小经验值,它决定沿着能让代价函数下降的程度有多大。每一次都同时让所有的参数减去学习速率乘以代价函数的导数。
-
收敛条件:当目标函数的函数值变化非常小的时候或者达到最大迭代次数的时候,就结束循环。
-
如果 ααα 太小,梯度下降就会变慢; 如果ααα太大,梯度下降法可能会越过最低点,甚至可能无法收敛,或者偏离。
6.2 梯度下降法分类
详细见深度学习算法梯度下降相关内容
(1)批量梯度下降法(Batch Gradient Descent)
-
有N个样本,求梯度的时候就用了N个样本的梯度数据
-
优点:准确 缺点:速度慢
(2)随机梯度下降法(Stochastic Gradient Descent,SGD)
-
和批量梯度下降法原理类似,区别在于求梯度时没有用所有的N个样本的数据,而是仅仅选取一个样本来求梯度
-
优点:速度快 缺点:准确度低
(3)小批量梯度下降法(Mini-batch Gradient Descent)
-
批量梯度下降法和随机梯度下降法的折衷,比如N=100
-
spark中使用的此方法
7 正规方程解
Y=[y1y2...yN] X=[x1Tx2T...xNT]=[1x1(1)x1(2)...x1(n)1x2(1)x2(2)...x2(n)...............1xN(1)xN(2)...xN(n)]θ=[θ0θ1θ2...θn] Y=\left [ \begin{matrix} y_1\\ y_2\\ ...\\ y_N \end{matrix} \right ] \ X=\left [ \begin{matrix} x_1^T\\ x_2^T\\ ...\\ x_N^T \end{matrix} \right ] =\left [ \begin{matrix} 1 & x_1^{(1)} & x_1^{(2)}& ... & x_1^{(n)}\\ 1 & x_2^{(1)} & x_2^{(2)}& ... & x_2^{(n)}\\ ...& ... & ... & ...&...\\ 1 & x_N^{(1)} & x_N^{(2) }&... & x_N^{(n)} \end{matrix} \right ] \theta=\left [ \begin{matrix} \theta_0\\ \theta_1\\ \theta_2\\ ...\\ \theta_n \end{matrix} \right ] Y=y1y2...yN X=x1Tx2T...xNT=11...1x1(1)x2(1)...xN(1)x1(2)x2(2)...xN(2)............x1(n)x2(n)...xN(n)θ=θ0θ1θ2...θn
XN×m,YN×1,θm×1X_{N \times m},Y_{N \times 1},\theta_{m \times 1}XN×m,YN×1,θm×1,正规方程法求解过程如下:
-
θ\thetaθ的求解过程
θ∗=argminθCost(θ)Cost(θ)=12N∑iN(hθ(xi)−yi)2=12N(Xθ−Y)T(Xθ−Y)=12N(θTXT−YT)T(Xθ−Y)=12N(θTXTXθ−θTXTY+YTXθ+YTY) \begin{aligned} \theta^* &=\arg \min \limits_{\theta} Cost(\theta)\\ Cost(\theta)&=\frac{1}{2N} \sum_i^N (h_\theta(x_{i})-y_{i})^2\\ &=\frac{1}{2N} (X\theta-Y)^T(X\theta-Y)\\ &=\frac{1}{2N} (\theta^TX^T-Y^T)^T(X\theta-Y)\\ &=\frac{1}{2N}(\theta^TX^TX\theta-\theta^TX^TY+Y^TX\theta+Y^TY) \end{aligned} θ∗Cost(θ)=argθminCost(θ)=2N1i∑N(hθ(xi)−yi)2=2N1(Xθ−Y)T(Xθ−Y)=2N1(θTXT−YT)T(Xθ−Y)=2N1(θTXTXθ−θTXTY+YTXθ+YTY)∂Cost(θ)∂θ=12N(2XTXθ−XTY−(YTX)T)=12N(XTXθ−XTY)令其等于0,得到:θ∗=(XTX)−1XTY \frac{\partial Cost(\theta)}{\partial \theta}=\frac{1}{2N}(2X^TX \theta-X^TY-(Y^TX)^T)\\ =\frac{1}{2N}(X^TX \theta-X^TY)\\ 令其等于0,得到:\theta ^*=(X^TX)^{-1}X^TY ∂θ∂Cost(θ)=2N1(2XTXθ−XTY−(YTX)T)=2N1(XTXθ−XTY)令其等于0,得到:θ∗=(XTX)−1XTY
证明等式$\sum_i^N (h_\theta(x_{i})-y_{i})2=(X\theta-Y)T(X\theta-Y)\$如下:
Xθ−Y=[1x1(1)x1(2)x1(n)1x2(1)x2(2)x2(n)............1xN(1)xN(2)xN(n)]N×n[θ0θ1θ2...θn]−[y1y2...yN]=[θ1x1(1)+θ2x1(2)+...+θnx1(n)+bθ1x2(1)+θ2x2(2)+...+θnx2(n)+b...θnxN(1)+θnxN(2)+...+θnxN(n)+b]N×1−[y1y2...yN](Xθ−Y)T(Xθ−Y)=[y1^−y1y2^−y2...yN^−yN]1×N[y1^−y1y2^−y2...yN^−yN]N×1=(y1^−y1)2+(y2^−y2)2+...+(yN^−yN)2 X\theta-Y=\left[\begin{matrix} 1&x_1^{(1)}& x_1^{(2)}& x_1^{(n)}\\ 1&x_2^{(1)}& x_2^{(2)}& x_2^{(n)}\\ ...&... & ... & ... \\ 1&x_N^{(1)}& x_N^{(2)}& x_N^{(n)} \\ \end{matrix}\right]_{N \times n} \left[\begin{matrix} \theta_0\\\theta_1\\\theta_2\\...\\\theta_n\\ \end{matrix}\right]- \left[\begin{matrix}y_1\\ y_2\\ ... \\ y_N \end{matrix}\right]= \left[\begin{matrix} \theta_1x_1^{(1)}+\theta_2 x_1^{(2)} +...+\theta_n x_1^{(n)}+ b\\ \theta_1x_2^{(1)}+\theta_2 x_2^{(2)}+...+\theta_n x_2^{(n)} +b\\ ... \\ \theta_nx_N^{(1)}+\theta_nx_N^{(2)}+...+\theta_n x_N^{(n)} +b\\ \end{matrix}\right]_{N \times 1}-\left[\begin{matrix}y_1\\ y_2\\ ... \\ y_N \end{matrix}\right] \\ (X\theta-Y)^T(X\theta-Y)=\left[\begin{matrix}\hat{y_1}-y_1&\hat{y_2}- y_2& ... &\hat{y_N}- y_N \end{matrix}\right]_{1 \times N} \left[\begin{matrix}\hat{y_1}-y_1\\ \hat{y_2}- y_2\\ ... \\ \hat{y_N}- y_N \end{matrix}\right]_{N \times 1} \\ =(\hat{y_1}-y_1)^2+(\hat{y_2}- y_2)^2+ ... +(\hat{y_N}- y_N)^2 Xθ−Y=11...1x1(1)x2(1)...xN(1)x1(2)x2(2)...xN(2)x1(n)x2(n)...xN(n)N×nθ0θ1θ2...θn−y1y2...yN=θ1x1(1)+θ2x1(2)+...+θnx1(n)+bθ1x2(1)+θ2x2(2)+...+θnx2(n)+b...θnxN(1)+θnxN(2)+...+θnxN(n)+bN×1−y1y2...yN(Xθ−Y)T(Xθ−Y)=[y1^−y1y2^−y2...yN^−yN]1×Ny1^−y1y2^−y2...yN^−yNN×1=(y1^−y1)2+(y2^−y2)2+...+(yN^−yN)2
证明等式∂(θTXTY)∂θ=XTY\frac{\partial (\theta^TX^TY)}{\partial \theta}=X^TY∂θ∂(θTXTY)=XTY如下:
[θ1θ2][abcd][AB]=[θ1a+θ2cθ1b+θ2d][AB]=(θ1a+θ2c)A+(θ1b+θ2d)B(标量)对θ求导⇒[aAbBcAdB]=[abcd][AB] \left[\begin{matrix}\theta_1&\theta_2 \end{matrix}\right]\left[\begin{matrix}a&b\\c&d \end{matrix}\right] \left[\begin{matrix}A\\B \end{matrix}\right]\\ =\left[\begin{matrix}\theta_1a+\theta_2c&\theta_1b+\theta_2d \end{matrix}\right] \left[\begin{matrix}A\\B \end{matrix}\right]\\ =(\theta_1a+\theta_2c)A+(\theta_1b+\theta_2d)B(标量)\\ 对\theta求导\Rightarrow \left[\begin{matrix}aA&bB\\cA&dB \end{matrix}\right]=\left[\begin{matrix}a&b\\c&d \end{matrix}\right] \left[\begin{matrix}A\\B \end{matrix}\right]\\ [θ1θ2][acbd][AB]=[θ1a+θ2cθ1b+θ2d][AB]=(θ1a+θ2c)A+(θ1b+θ2d)B(标量)对θ求导⇒[aAcAbBdB]=[acbd][AB] -
正规方程法编程
import numpy as np X = np.mat([[1,1],[2,1],[3,1],[4,1]]) Y = np.mat([[3.2],[4.7],[7.3],[8.5]]) (X.T*X).I*X.T*Y
-
梯度下降法VS正规方程法
梯度下降 正规方程 需要选择学习率 α\alphaα 不需要 需要多次迭代 一次运算得出 当特征数量nnn大时也能较好适用 需要计算(XTX)−1(X^TX)^{-1}(XTX)−1,特征数量nnn较大时运算代价大,因为矩阵逆的计算时间复杂度O(n3)O(n^3)O(n3),通常来说当nnn小于10000时可以接受 适用于各种类型的模型 只适用于线性回归,不适合逻辑回归模型等其他模型
8 优缺点
-
优点
- 模型简单,易于解释,θ\thetaθ反应了特征的重要程度
- 算法容易并行,适合大数据的求解
-
缺点
- 不能拟合非线性数据,需要做特征扩展
- 采用何种特征组合需要一定的数据敏感性
- 特征多了:提高模型效果,但是计算成本高,需要数据量大,否则会过拟合
- 特征少了:有欠拟合的风险