从How-Old.net说起
大家是否玩过How-Old.net呢?
这个网站能够推测出相片中人物的年龄与性别~
好神奇~想知道它是如何实现的吗?
在它的背后,使用了人脸识别、 机器学习、流分析等等技术,
现在就让我们了解在How-Old.net推测年龄功能中,使用到的机器学习线性回归算法吧!
我们将会了解到:
什么是机器学习与线性回归?
什么是训练集?
一种评价线性回归是否拟合训练集的方法:代价函数。
一种解决线性回归问题的方法:梯度下降。
开始学习啦
1
什么是机器学习?
机器学习(Machine Learning)是一门多领域交叉学科,它能够让计算机在没有事先明确的编程的情况下做出反应。也许之前你并不了解它,但当今它的应用是那么普遍,你不知不觉就会接触到它。比如我们日常使用的网络搜索、有趣的语音助手、高大上的无人驾驶汽车,都因为运用了机器学习而有了巨大的发展。
2
什么是线性回归?
线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析,它是机器学习中,解决监督学习的回归问题的一种方法,它会从给定的训练集中学习出一个线性函数。
举个例子,将训练集中的数据点描绘在平面直角坐标系上,如下图:
通过线性回归方法,我们可以拟合出一条直线,如下图:
关于线性回归
图中的点的x与y大致呈线性关系,使用的是这样的模型:
之后让计算机利用训练集“学习”出参数的值,进而得到尽量接近点的直线。
对于多元自变量,如两个自变量 可以使用这样的模型 :
如果点不是线性分布呢?
假如数据点近似正弦函数分布,没关系,我们可以使用三次多项式拟合。
↑
得到的拟合结果
当计算机根据训练集“学习”得到一个模型后,可以利用这个模型对新数据进行预测。比如上面的直线模型例子中,对于新的X值,可以根据对应直线函数,计算出对应的预测值Y。
3
训练集
训练集属于样本的一部分,它被用来估计模型。回到How-Old.net中推断年龄的问题中来,这里的训练集中,输入数据(特征值)为脸部特征数据,它们与年龄密切相关,比如皮肤褶皱、眼部皮肤色泽、嘴唇与鼻子的松弛程度等等,它们被量化,作为自变量 ;而对应的年龄值,记为输出变量(目标值)Y。
利用线性回归,计算机通过学习找到输入变量与目标变量的关系,得到一个较优的模型。当我们上传一张相片时,它便会从相片中提取特征值X,根据这个模型推断出年龄Y.。
4
如何实现线性回归呢?
利用代价函数/损失函数(Cost Function/Error Function)可以量化地告诉计算机,当前学习的模型的优劣程度,即线性函数拟合的好坏程度。
代价函数有很多种,比如平方损失函数、对数损失函数。在线性回归方法中,我们往往使用平方损失函数,它的函数式为:
↑
这个函数衡量了预测值和真实值的距离。代价函数越小,说明线性回归得越好。
因此,要曲线拟合得更好,我们的目标是让J值尽量变小。
5
如何让J值(代价)变小呢?
我们不妨看一张图,Z轴代表代价值,X、Y轴代表学习参数 。
没错,我们可以使用梯度下降算法(Gradient Descent)。
梯度下降算法有很多种实现形式,但本质是一样的。我们把代价函数看作一座山,站在山坡上环视,可以找到最快下山的方向(通过求偏导数得到的梯度方向的反方向)。而且很幸运,在线性回归中,代价函数为凸函数(Convex Function),即最小极值点为全局极小点。我们无论一开始站在山上的哪一点,最终一定能到达这座山的最低点。
通过以上方法,我们可以让计算机根据训练集学习出一个简单的模型了,要想得到更好的模型,还需要考虑特征缩放、过拟合、欠拟合等等问题。
在这里,推荐一些链接,希望大家能够更好地了解机器学习。
1.斯坦福大学Andrew Ng教授的机器学习课程:
https://www.coursera.org/learn/machine-learning
2.机器学习入门:线性回归及梯度下降 by xiazdong
http://blog.csdn.net/xiazdong/article/details/7950084
3.从曲线拟合问题窥视机器学习中的相关概念 by 下一步
http://blog.csdn.net/fangqingan_java/article/details/9265147