先搞清楚什么是机器学习,这对定位问题是否应该使用机器学习来解决很重要,有些问题完全没必要使用机器学习,就没必要杀鸡用牛刀了。
什么是机器学习?
Arthur Samuel(1959):
Field of study that gives computers the ability to learn without being explicitly programmed.
说人话:不需要太多的编程就能使计算机拥有学习某一领域的能力。Tom Mitchell(1998):
A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.
说人话:AlphaGo为了完成人机对战(下棋 T),不断学习下棋,从中获取经验(E),目的是为了提高和人比赛的胜率(P)。
机器学习分类
机器学习涉及的范围很广,针对不同的问题,学习策略也很多,但总体而言大致可以分为监督学习和非监督学习两种(还有半监督学习和强化学习)。不同的问题需要使用不同的策略。
还是把这两种策略的含义搞清楚先:
什么是监督学习?
可以理解为一部分数据的答案已经知道了。比如我们要预测未来大盘的点位,在历史中大盘的点位已经知道了;再比如我们要让机器知道给它的图片是个帅哥还是美女,前提是我们已经知道了这个图片是帅哥还是美女。
可想而知,如果需要人工去分类(打标),是一个多大的工程。这也孕育出了很多以出售打标数据盈利的公司。
什么是无监督学习?
和监督学习相反,数据的答案事先我们不知道。而寻找答案是一个无中生有的过程。比如你遇到一群外星人,这群外星人各自有着不同的特征,你需要通过聚类的方法把有相同特征的外星人分组到一起,然后研究他们哪些对人类友好,哪些对人类有威胁,这叫无监督学习。
算法一览:
机器学习种类 | 算法分类 | 算法 |
---|---|---|
监督学习 | 分类、 回归 | K近邻、朴素贝叶斯、决策树、随机森林、GBDT和支持向量机; 线性回归、逻辑回归 |
无监督学习 | 聚类、 推荐 | K-Means、DBSCAN、协同过滤 |
半监督学习 | 聚类、 推荐 | 标签传播 |
强化学习 | 隐马尔可夫 |
1. 能预测未来的神奇算法——线性回归
说到线性回归,其实我们初中的时候就学过它的简单方程式,只不过那会儿我们没有安利这样一个高大上的名字,我们那会儿叫斜截公式:
来看看只有一个参数的 单参数线性回归模型:
所谓的特征就是二维表中具有计算意义的一列数据,比如
ID | Sex | High |
---|---|---|
1 | 男 | 170 cm |
2 | 女 | 175 cm |
3 | 男 | 180 cm |
4 | 女 | 200 cm |
其中Sex是一个特征,High是另一个特征,ID不是个特征,它只是个序列索引而已。他们的i都是4,因为有4条数据。是不是秒懂?:) 是的,在一元线性回归算法中,我们就是用一条倾斜的直线来预测未来。原来我们从初中时就可以预测未来了。:)
为什么我们可以用类似一条直线来预测呢?
这个问题也可以换个说法,在什么情况下可以使用线性回归算法?
- 看数据的分布是有一定规律的,可以通过直线或曲线来拟合数据的中心。
- 需要预测的变量是连续的值,比如房价,股票价格。而不是离散值,比如只有男、女等。
再来看看多参数的线性回归模型:
用 向量表示:
用 矩阵表示:
简不简单?有了这个公式,我们就能 预测未来了:)
2. 如何预测?
上面那个模型中
x
是确定的,即我们的各种特征数据,不确定的是
针对一元回归模型,不同的
θ
意味这不同的斜率,不同的斜率他们和真实数据的拟合程度是不一样的。如何确定
θ
使得预测的误差最小呢?
其中 yi 表示真实数据,而 hθ(xi) 表示预测数据。
说人话: θ 要满足这样的条件,即预测出来各个点的值与真实值之间的差的平方和最小。
现在的问题就转换成了求
J(θ)
的最小值问题了!
即:
这个问题有两种解决方案:
1. 梯度下降
要了解梯度下降算法,首先要知道求导公式的意义:
说人话:每变化一点点 θ ,随之而变的 J 变化了多少?
还是没懂!? 上一个百度图片:
图片中Δx 就是变化的那一点点(对应 ∂θ 或 Δy ),而对应的曲线 f(x) ,发生了 Δy 这么多变化。当N和M非常接近时(即 Δx 很小很小),我们可以用PQ的高度( dy )来近似NM的高度(其高度 dy =在 x0 处的斜率 * Δx )。知道了这个我们再来看看梯度下降算法公式:
θj:=θj−α∗∂J∂θj(*)∂J∂θj 可以简单的理解为上图中的 tga , α 是个正常数,学名叫学习速率。这个 tga 很神奇,在小于90°,它是个正实数;在大于90°时是个负实数。
所以,对于梯度下降算法公式,
当T倾斜向上,即角度小于90°时, α∗∂J∂θj 值为正, θj 从大变小, ∂J∂θj 不断的趋近于0, θj 不断的向左移动减小,直到移动到曲线的底部;
当T倾斜向下时,即角度大于90°时, α∗∂J∂θj 值为负, θj 从小变大, ∂J∂θj 不断的趋近于0, θj 不断的向右移动增大,直到移动到曲线的底部
理解了原理,下面就是如何算 ∂J∂θj 了:
∂J∂θj=∂12m∑mi=1(hθ(xi)−yi)2∂θj
把 12m∑mi=1(hθ(xi)−yi)2 展开:
J=12m[(hθ(x1)−y1)2+hθ(x2)−y2)2+⋯+hθ(xm)−ym)2]
注意:上面的 x1 表示第一个训练样本,而 y1 是第一个训练样本所对应的真实目标值。
我们对其中一个子式子继续展开研究:
∂(hθ(x1)−y1)2∂θj=∂[(θ0x10+θ1x11+⋯+θnx1n)−y1]2∂θj=2((θ0x10+θ1x11+⋯+θnx1n)−y1)∗x1j
简化成向量的形式:
∂(hθ(x1)−y1)2∂θj=2([x10x11⋯x1n]⎡⎣⎢⎢⎢⎢θ0θ1⋮θn⎤⎦⎥⎥⎥⎥−y1)∗x1j
=2(X1θ−y1)∗x1j所以最终我们的梯度下降 θ 参数的确认式子为:
θj:=θj−α12m∑i=1m(2(Xiθ−yi)∗xij)(j=0,⋯,n)
=θj−α1m∑i=1m((Xiθ−yi)∗xij)
对求和公式展开后写成矩阵的形式:
θ:=θ−α1m((X1θ−y1)⎡⎣⎢⎢⎢⎢⎢x10x11⋮x1n⎤⎦⎥⎥⎥⎥⎥+(X2θ−y2)⎡⎣⎢⎢⎢⎢⎢x20x21⋮x2n⎤⎦⎥⎥⎥⎥⎥+⋯+(Xnθ−yn)⎡⎣⎢⎢⎢⎢⎢xn0xn1⋮xnn⎤⎦⎥⎥⎥⎥⎥)(θ为列向量)
θ:=θ−α1m⎡⎣⎢⎢⎢⎢⎢x10x11⋮x1nx20x21⋮x2n⋯⋯⋱⋯xn0xn1⋮xnn⎤⎦⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢X1θ−y1X2θ−y2⋮Xnθ−yn⎤⎦⎥⎥⎥⎥⎥
终极公式:
θ:=θ−α1m(XT∗(Xθ−Y))(*)
什么意思?意思是是只要不断的迭代 θ ,最终 α1m(XT∗(Xθ−Y)) 会收敛到0,从而得到一个收敛后的 θ ,获得最小值。2. 正规方程
正规方程可以更快速简单的求解 θ 值,再一起推导一下。
首先正规方程也是从这个方程而来:
J(θ)=12m∑i=1m(hθ(xi)−yi)2=12m[(hθ(x1)−y1)2+hθ(x2)−y2)2+⋯+hθ(xm)−ym)2]
因为
XTX=X2
所以
J(θ)=12m[(hθ(x1)−y1)T(hθ(x1)−y1)+(hθ(x2)−y2)T(hθ(x2)−y2)+⋯+(hθ(xn)−yn)T(hθ(xn)−yn)]
=12m⎡⎣⎢⎢⎢⎢⎢(hθ(x1)−y1)T(hθ(x2)−y2)T⋮(hθ(xn)−yn)T⎤⎦⎥⎥⎥⎥⎥[(hθ(x1)−y1)(hθ(x2)−y2)⋯(hθ(xn)−yn)]
=12m(Xθ−y)T(Xθ−y)=12m[((Xθ)T−yT)(Xθ−y)]=12m[θTXTXθ−θTXTy−yTXθ+yTy]
对 θ 求导,且求导后的值要趋于0,所以:
∂J∂θ=∂(θTXTXθ−θTXTy−yTXθ+y2)∂θ=0
因为 θTXTy=yTXθ 所以有:
∂(θTXTXθ−θTXTy−yTXθ+y2)∂θ=XTXθ−2XTy=0
(XTX)−1(XTX)θ=(XTX)−1XTy
θ=(XTX)−1XTy(*)梯度方法和正规方程方法比较:
梯度下降方法 正规方程 适合特征大于1W的情况 适合特征小于1W的情况 需要归一化(特征标准化) 不需要归一化 方法相对复杂 方法简单 * 注:以上数学推导过程若有不严谨之处,欢迎指出!*