什么是线性回归模型
上一篇文章,咱们讲了一个很是朴素而直观的学习模型——线性感知器,这个学习模型主要用于分类问题, 如咱们以前说到的原鸢尾花分类例子。那么,对应另一些非分类问题,好比信用额度评估,房屋价格评估等,咱们又有什么办法呢?html
经过对线性感知器进行一些改良,咱们获得一个称做线性回归的学习算法,能够用来解决这类问题。git
举个栗子
咱们以房屋价格评估为例,来看一下线性回归是如何实现的。假设影响房屋价格的因素有地上建筑面积, 地下室面积, 占地面积,卧室数, 洗手间数, 楼层数,景观,房屋情况,建造年限这些因素, 暂且不考虑地段和不动产市场的波动,而且假设房屋的价格和以上房屋的基本状况成线性关系。github
那么咱们是否能够找到一组合适的权重参数,使得他们的线性组合刚好是房屋的价格?web
让咱们用数学的语言来描述以上问题。算法
输入参数
x:
- 卧室数 (
x1)
- 洗手间数(
x2)
- 地上建筑面积(
x3)
- 地下室面积(
x4)
- 房屋占地面积(
x5)
- 楼层数(
x6)
- 景观(
x7) (0 - 5 打分, 5分为最好,0分为最差)
- 房屋情况(
x8) ( 0 - 5 打分, 5分为最好,0分为最差)
- 建造年限(
x9)
权重参数
w:
对应每一组输入参数
xi都分配一个权重参数记做
wi,共有9个权重参数。app
输出
predict_price:
predict_price =
∑i=19wi∗xi机器学习
最优权重参数
此时,咱们并不知道输入参数中哪些比较重要,权重值应当比较大,哪些比较次要, 数值应当比较小。那么要如何来得到这个最优权重参数呢?
在这里咱们必须注意到“最优”两个字,最优就是意味着衡量评估的正确率达到最佳。实际上,评估价格很难彻底等同于实际成交价格,可是咱们能够衡量评估价格和实际成交价格的差距。
咱们将
x和
y放到二维平面里,能够这样来理解线性回归,下图左中的空心点是房屋的实际成交价格,紫色小点则是咱们的预测价格,空心点到实心点的距离就是咱们预测的误差值,而咱们的任务就是求一组权重值
W使得整个误差值最小。但
x的个数增长到2个,则线性函数就是个平面,如右图所示,实际上但
x大于2个以上则就没法再用图像来表示了。
很天然的,咱们会想到用方差来衡量。考虑所有的样本数据,咱们能够经过如下算式求得均方差。svg
avg_error=N1∑j=1N(∑i=19wi∗xi(n)−y(n))2函数
此处,咱们能够把最优化权重参数这个问题归结为对所有的样本,如何得到最小化方差。为了解决这个问题,咱们首先要矢量化参数。学习
矢量化参数
为了方便计算,咱们将以上参数矢量化。在机器学习中,咱们须要进行大量的数值计算,好比累加,乘积等,相比使用循环语句,矢量化能够大大提升计算效率。
输入参数矢量化
- 每组输入参数构建成列矢量形式以下:
x=(x1,x2,x3,x4,x5,x6,x7,x8,x9)
假设共有N组这样的训练数据, 每一组输出参数记为
x(i) 。
构建输入矩阵(N x 9):
X=⎩⎪⎪⎨⎪⎪⎧−x(1)−−x(2)−...−x(N)−⎭⎪⎪⎬⎪⎪⎫=⎩⎪⎪⎪⎨⎪⎪⎪⎧x1(1)x1(2)...x1(N)x2(1)x2(2)...x2(N)............x9(1)x9(2)...x9(N)⎭⎪⎪⎪⎬⎪⎪⎪⎫
权重参数矢量化
- 咱们将
w1至
w9权重参数也构建成列矢量 (9 x 1)
W=⎩⎪⎪⎨⎪⎪⎧w1w2...w9⎭⎪⎪⎬⎪⎪⎫
样本标签矢量化
- 咱们把输入样本的标签也构形成列矢量 (N x 1)
Y=⎩⎪⎪⎨⎪⎪⎧y(1)y(2)...y(N)⎭⎪⎪⎬⎪⎪⎫
计算最优权重参数
若是咱们把全部样本评估价格的方差加在一块儿,再除以样本个数,就能够求得该样本的平均方差。那咱们矢量化后的均方差计算公式,则可表示以下。
avg_error =
E(W)=N1(X∗W−Y)2
咱们要得到正确率最大,也就是要最小化这个均方差,咱们能够用求极点的方法来得到,即对该计算公式求
W的导数,并令其为0。
dWdE=N2XT∗(X∗W−Y)=0
此处,咱们发现
W能够经过简单的矩阵变化来获得。
XT∗X∗W=X∗Y
W=(XT∗X)−1∗X∗Y
令
X+=(XT∗X)−1∗X
则
W=X+∗Y
此处
X+被称为伪逆矩阵。咱们知道逆矩阵的存在条件是比较苛刻的,可是线性代数的知识告诉咱们任何矩阵必存在其相应的伪逆矩阵。
线性回归是一个很是简单朴素的算法,只要一步运算咱们就能够获得咱们须要的权重参数。
线性回归算法总结
- 构造输入参数矩阵
X 和 输入样本标签矢量
Y,
(x(1),y(1)) ,
(x(2),y(2)),…,
(x(N),y(N)) 以下:
输入矩阵X=⎩⎪⎪⎨⎪⎪⎧−x(1)−−x(2)−...−x(N)−⎭⎪⎪⎬⎪⎪⎫
样本标签矢量Y=⎩⎪⎪⎨⎪⎪⎧y(1)y(2)...y(N)⎭⎪⎪⎬⎪⎪⎫
- 计算伪逆矩阵
X+=(XT∗X)−1∗X
- 返回
W=X+∗Y
线性回归做为一个简单而高效的算法,经常被用于一些复杂模型的一个学习单元,或者权重初始化。
github代码下载地址:
https://github.com/deechean/MachineLearningSample