新宇教你机器学习之 Linear Regression (Least Square Regression)

本文详细介绍了监督学习中的线性回归算法,包括如何通过最小化误差平方和来拟合数据,并讨论了梯度下降、随机梯度下降和正规方程等优化方法。此外,还展示了如何使用Matlab进行线性回归分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.sina.com.cn/s/blog_a18c98e50101108a.html

部分资料和内容摘自斯坦福大学Andrew Ng教授的Machine Learning Online Class

监督学习(supervised learning)通常有下列步骤:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

首先通过某种学习算法训练已有的数据,得到function  hH叫做hypothesis。给定x值,它可以预测对应的y值。举个例子,x可以是住房的面积,y是房子的价格。当你给h输入任意一个面积值,他就可以预测出这个房子价值多少钱。

当输出Y的值是连续性的时候,这个问题叫做regression

当输出Y的值是离散性的时候,这个问题叫做classification


上面的例子大致符合线性的关系(房子价格大致和面积成线性关系)。

Linear Regression就是一种可以解决如上问题的监督学习算法。

假设有如下数据,x轴是房子面积,y轴是房子价格。假设我们用Least square的方法,实际上就是求一条直线,它可以让每个点数据到直线距离的平方的和最小。

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

如果是上面的例子,是一维的(房子面积),那么H可以写成:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

如果房子价格不仅仅依据房子面积,同时也依据房子的房间数,那么H可以被写成:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

如果假设x0等于 1,那么这个式子就可以写成:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

H(x)是预测的值,y是真实的值,我们就是要找到一个Ө,使两者差的平方最小


写成公式的话,Cost Function可以定义成:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

我们的目标就是计算出一个Ө值,使J最小。


下列方法可以解决这个问题:


Gradient Descent

这个算法理解起来很简单,首先初始化一个Ө值。之后望向四面八方,看那条路可以接近正确的值就向那个方向迈一步。更新Ө值,再重复上面过程,直到J的值不怎么变化为止。数学表达为:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

当然上述算法有可能得到的只是local minimum。所以重复几次上面的过程,用不同的初始值,如果得到相同的结果,那么就可以认为当前的Ө值可以让J最小。


Stochastic Gradient Descent (Incremental gradient descent)

前面的方法,需要处理完所有的训练数据之后才会每次更新一次Ө,如果训练数据很多的话,就会变得很慢。Stochastic Gradient Descent每处理完一个训练数据,就会立即更新Ө。在某种程度上,这可以提高程序的效率。


The Normal Equation

这种方法不需要经过任何循环,也不需要假设初始值。虽然推导本身有点复杂,但是结果一步到位,简单又效率。非常牛逼的方法啊。

我刚看完这个推导之后,不得不佩服那些数学家,居然可以如此简单的算出上述需要循环才能得到的复杂的结果。唉,感叹一下数学之美。


准备工作:

定义function f(A)Mapping from M-by-n matrices to the real numbers

定义f(A)的微分为:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

 

定义trace operator。对于一个n by nmatrix A the trace of A is:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

Trace有如下特性:

如果a是一个real number 那么tr a = a

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)
新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

矩阵微分有如下特性:


新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

开始推导:

首先,设计一个mn列的(实际上是n+1列,应为我们假设x0 =1 )矩阵X,他的每一行都是一个training sample,每列都是一个特征。

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

 

设计y成为一个m列的目标值(输出值)向量,也就是房子的价格在我们例子中。

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

因为:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

所以:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

因为对于一个向量z来说:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)
所以:
新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)


最后我们用之前提到的矩阵微分特性的第二和第三条:


新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

所以:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

因为我们要让J最小,所以J的微分必须等于0

所以:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

 

这就是最后的结果了。非常简单明了也很容易实现出来。

需要注意的是,当你实现的时候,记得把数据X最右边加上全部是“1”的一列,因为我们前面的时候假设

X0 = 1。

下图是Matlab的结果:

新宇教你机器学习之 <wbr>Linear <wbr>Regression <wbr>(Least <wbr>Square <wbr>Regression)

 

"x"是原始数据,蓝线是用Matlab的polyfit()方法算出来的linear regression。红圈就是用normal method计算出来的预测值,可以看到他们全部都完美的对齐在蓝线上。


不记得在哪里看到的了,有人说,当数据量过大的时候normal equation method会变得不稳定。QR Factorization是一种更好的方法。我还没研究过,以后懂了再更新吧。

### 线性回归与逻辑回归的区别 线性回归是一种用于预测连续变量的方法,其假设因变量 \( y \) 和自变量 \( X \) 之间存在线性关系。模型通过最小化实际观测值和预测值之间的平方差来拟合数据[^1]。 逻辑回归则主要用于分类问题,特别是二元分类。尽管名字中有“回归”,但实际上它是一个分类算法。逻辑回归利用 Sigmoid 函数将输入映射到 [0, 1] 的概率空间内,从而实现类别归属的概率估计[^2]。 #### 数学表达形式差异 对于线性回归而言,目标是最小化损失函数: \[ J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 \] 其中 \( h_\theta(x) = \theta_0+\theta_1x_1+...+\theta_nx_n \),即线性组合的形式。 而逻辑回归采用的是最大似然估计法求解参数,并且输出经过Sigmoid转换后的结果作为类别的概率分布: \[ P(y=1|x;\theta )=\frac {e^{\theta ^T x}}{1 + e^{\theta ^T x}},P(y=0|x;\theta )=\frac {1}{1 + e^{\theta ^T x}} \] ```python from sklearn.linear_model import LogisticRegression, LinearRegression import numpy as np # Example data generation for demonstration purposes only. X_linear = np.random.rand(100, 1)*10 Y_linear = 3*X_linear.squeeze() + 4 + np.random.randn(100) model_lr = LinearRegression() model_lr.fit(X_linear, Y_linear) print(f'Linear Regression Coefficients: {model_lr.coef_[0]}') X_logistic = np.vstack((np.ones_like(Y_linear), Y_linear)).T Y_logistic = (Y_linear > np.median(Y_linear)).astype(int) model_lg = LogisticRegression(solver='lbfgs') model_lg.fit(X_logistic[:, :-1], Y_logistic) print(f'Logistic Regression Coefficient: {model_lg.coef_[0][0]}') ``` ### 应用场景对比 当面对数值型的目标变量时,比如房价、温度等可以取任意实数的情况,应该优先考虑使用 **线性回归** 来建立预测模型;而对于离散的选择项或是事件发生的可能性评估,则更适合应用 **逻辑回归** 进行处理,例如判断邮件是否为垃圾邮件、客户是否会购买产品等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值