目录
机器学习概述
机器学的定义
现在业内没有统一的机器学习的定义,各个版本所描述的意思基本相同。机器学习是一种方法,让机器具有学习能力,然后根据学习到的知识解决问题。
例如,有很多下棋的程序,能够自己与自己下棋,通过大量的训练,然后具备判断一步棋优劣的能力。再如:给出若干封邮件,告诉计算机哪些是正常邮件,哪些是垃圾邮件,计算机通过学习,然后具备识别垃圾邮件的能力。
机器学习的分类
机器学习主要分为两类:监督学习和无监督学习。
监督学习是指给计算机一个数据集,数据集中的每个数据都包含特征值和目标值,计算机通过学习这个数据集,找到特征和目标之间的关系,然后对一个新的数据,能够根据特征计算出目标值,用于学习的数据集称为训练集。
上述判断垃圾邮件的例子中,标记了正常/垃圾的邮件就是训练集,特征就是每封邮件中的文字,目标值就是 是否为垃圾邮件。
监督学习主要分为两类:分类,回归。
分类是指目标值是离散的监督学习,例如:是否为垃圾邮件,可以用 0,1 表示。目标值没有 0.5,0.6..
回归是指目标值是连续的监督学习,例如:一辆汽车速度与刹车停下需要滑行距离如下,现在要让计算机推算 140Km/h 会滑行多远。这里的制动距离的值就是连续的。
速度 (Km/h) | 30 | 40 | 50 | 55 | 60 |
---|---|---|---|---|---|
制动距离 (m) | 9 | 15.5 | 21.3 | 27.3 | 34.6 |
无监督学习
无监督学习与监督学习的区别在于:无监督学习的数据是没有标记的,通过无监督学习可以在这些无标记的数据中找到某种结构,或者将具有相似性的数据聚合在一起。
例如,一些手机桌面支持摇一摇自动整理图标,能将相似的图标放在一起。
线性回归
前面已经讲到了回归,回归是指目标值是连续的监督学习。
线性:两个变量之间存在一次方函数关系,就称它们之间存在线性关系。(百度百科)
y=kx+b (k, b 是常数) 一次方
z=ax + by + c(a b c 是常数) 一次方
y =ax^2 + bx + c 二次方
线性回归是指:目标值与特征值之间是一次方关系的回归。
举例:超市销售A B C 3种猪肉,有3位顾客卖了不同重量的肉,重量和总价如下。小明想买 2斤A,1斤B,3斤C, 请问需要花多少钱?
猪肉 A (斤) | 猪肉 B(斤) | 猪肉 C(斤) | 总价(元) | |
顾客1 | 1 | 2 | 3 | 178 |
顾客2 | 3 | 4 | 4 | 285 |
顾客3 | 4 | 5 | 1 | 275 |
很明显目标值(总金额)与特征(3个重量值)之间是线性关系。这是一个 3元线性回归问题,现实中很多问题是远多于 3 个特征值的,比如预测降雨量,可能与气压,气温,湿度,风向,风速,海拔 ......等相关。
综上所述,可以用下图简要地说明线性回归与机器学习的关系
线性回归问题描述
从简单的一元线性回归开始。用 y 表示表示目标值,x 表示特征值。现在有如下一个训练集,根据这个训练集,找出 y 与 x 之间的关系。
此时可以看出,这些点并不是完全在一条直线上,也就是说用一条直线来表示y与 x 之间的关系会存在误差。误差越小,说明这条直线更准确。
如何表示误差
我们用y 表示实际的目标值,y^ 表示根据直线得出的理论值。我们用如下的方式来表示误差
对每一个样本,用实际值与理论值相减,得到单个误差,再将这些误差值平方后加起来,就是整体的误差。(平方是为了避免正负抵消,与统计学中的方差相同)
如上图所示,有两条直线,哪一条更准确呢?
x(特征值) | 1 | 2 | 3 | 4 | 5 |
y(实际目标值) | 1 | 2 | 2 | 4 | 6 |
y^(计算的目标值)y^=x | 1 | 2 | 3 | 4 | 5 |
误差 | 0 | 0 | -1 | 0 | 1 |
整体误差=2
x(特征值) | 1 | 2 | 3 | 4 | 5 |
y(实际目标值) | 1 | 2 | 2 | 4 | 6 |
y^(计算的目标值)y^=-0.6 +1.2x | 0.6 | 1.8 | 3 | 4.2 | 5.4 |
误差 | 0.4 | 0.2 | -1 | -0.2 | 0.6 |
整体误差 = 1.6
因此 y^=-0.6 +1.2x是更准确的。
上述是误差的基本思想,在机器学习领域中,使用损失函数来表示误差,评估学习结果的正确性。
m 表示样本个数,上述例子中 m = 5
y(i)表示第 i 个实际值,例:y(3) =2
y^(i)表示第 i 个理论值,例: y^(3)=3
注:机器学习中使用上标表示第i个数据。
注:有些资料也使用如下的式子表示损失函数
多出的1/2m: 除以m可以理解为均方差,1/2是有些时候为了计算方便而引入的。
实际上多出的 1/2m 这一项并不影响相对误差比较,例如上述例子中,第一条直线误差为2,第二条为1.6,如果都乘以 1/2m, (m=5), 第一条直线误差为0.2, 第二条为 0.16,第二条误差仍然小于第一条。
也就是说,这两种方式都可以判断出哪条线更准确。
为了方便对比,我们用统一格式表示理论值:
损失函数可表示为
所以,线性回归问题就转换为:找到 θ0 和 θ1,使得损失函数的值最小。
正规方程求解线性回归
使用矩阵和向量来描述线性回归问题
先回顾一下矩阵。
根据上一节所述描述的理论值的数学表示方式,
使用上标i表示第i个数据, 如果训练集有 m 个数据,则可表示为
此处的 y^, x,θ 都可以看做是向量
如果在 θ0 上乘以常数1,并把1 划入 X 中,则可以用如下方式表示
此时可以得出一个有趣的式子
刚才已经用向量描述了理论值,现在再回到前面讲到的损失函数
既然理论的目标值可以向量表示,那么实际的目标值也可以用向量表示
可以发现 y-y^ 结果是一个列向量,每个元素就与损失函数中括号内的部分是一致的。
既然理论值和目标值都可以都可以用向量表示,那损失函数能否用向量来表示呢?答案是可以的。首先回顾一下矩阵的转置。列向量的转置与列向量本身相乘,结果是列向量个元素的平方和。因此,损失函数可以表示为
到此,我们就可以用向量来表示损失函数了。
回到问题的开始,找到 θ0 和 θ1,使得损失函数 J 的值最小。
将 J对 θ求导,并令导数为 0 ,得到的 θ 就是就是 J 最小时的取值。
求导详细过程
到此, θ(θ0,θ1)求解完毕。也就是当 时,损失函数的值最小,也就是误差最小,也就是最优的模型,一元线性回归求解完毕。
多元线性回归
前面得到了一元线性回归的最优解公式实际上,该公式同样适用于多元线性回归。
一元线性回归:一个特征值------->目标值,即 x----->y
多元线性回归:多个特征值-------->目标值,即 (x1, x2, ....xn)---->y
由上图可见, 无论是一元线性回归还是多元线性回归,它们的表示方法都是一样的,因此它们的最优解的计算方式也是一样的。
Demo
人的体重与身高是存在一定比例关系的。现在随机抽取 70 名 NBA球员,他们的身高体重数据如下,通过线性回归找出体重与身高之间的关系。
https://nba.stats.qq.com/player/list.htm
使用工具 Octave (类似 matlab,~免费版的matlab)
准备 Height, Weight 的数据
function theta= NormalEquation(X, y)
theta = pinv(X'*X)*X'*y
求得 θ(-155.6686,1.2872)
Weigth = -155.6686+1.2872* Height