机器学习可以解决很多问题,其中最为重要的两个是 回归与分类。 这两个问题怎么解决, 它们之间又有什么区别呢? 以下举几个简单的例子,以给大家一个概念
1. 线性回归
回归分析常用于分析两个变量X和Y 之间的关系。 比如 X=房子大小 和 Y=房价 之间的关系, X=(公园人流量,公园门票票价) 与 Y=(公园收入) 之间的关系等等。
那么你的数据点在图上可以这么看
现在你想找到 房子大小和房价的关系, 也就是一个函数f(x) = y. 能够很好的表示 这两个变量之间的关系。
于是你需要大概评估一下这个 房子大小和房价大概是一个什么关系.
是线性的关系吗? 还是非线性的关系?
当然在这个问题里面, 线性的关系更符合这两者的关系。于是我们 选择一个合适的 线性模型, 最常用的是 f(x) = ax+b.
然后用这个线性的模型 去 匹配这些数据点。
1.1 怎么匹配?
有了数据点 和 你臆想出来的线性模型,怎么进行匹配,也就是怎么用这根线最好地描述些数据点的关系?
需要最好地描述点, 我们又需要一个关于“好”的定义。你也可以想出很多关于“好”的定义。下面有两个,
这两个定义都是 将模型与数据点之间的距离差 之和做为 衡量匹配好坏的标准。 误差越小, 匹配程度越大。
但是 总的来说, 我们想要找到的模型, 最后是想要使 f(x) 最大程度地 与y相似, 所以我们想要尽量地减少 f(x)与y之间的差值。 所以在这里 用第二个图的“好的定义” 来评估这根线的匹配程度是很合理的。于是我们有了误差公式!!!!!
这个公式,说的是,可以通过调整不同的a 和 b的值,就能使 误差不断变化,而当你找到这个公式的最小值时,你就能得到最好的a,b. 而这对(a,b)就是能最好描述你数据关系的模型参数。
1.1.1 沿导数下降法(Gradient Descent)
怎么找 cost(a,b)的最小? cost(a,b) 的图像其实像一个碗 一样,有一个最低点。 找这个最低点的办法就是,先随便找一个点(e.g. a=3, b = 2), 然后 沿着这个碗下降的方向找,最后就能找到碗的最低点。
cost(a,b) 的形状
怎么找(某一点)碗下降的方向?? 答案是,找那一点导数的反方向。拿参数a 举个例子, a与cost 关系如下图,
只要将任意一个a, 沿着使cost 导数的反方向 慢慢移动,那么 最终有一天a值就会到达使 cost 最小的那一点. 于是你可以不断地移动a,b, 向着最低点前进。
当然在进行移动的时候也需要考虑,每次移动的速度,也就是\Alpha的值,这个值也叫做(学习率). 学习率的增大可以加速参数逼近最优的情况, 但是如果在快要到达函数的底端的时候,需要减小学习率,以免出现cost 不断增大或者不停摆动的情况(如下图, J(a,b)就是cost(a,b) )。 所以说,当出现以上两种情况时候,我们应该果断选取一个较小的学习率, 以保证cost能减少到一个稳定的值(我们称为 收敛converge).
1.1.2 直接求解最小点方法
这时候,有的人会问,为什么要让a不停地往下跑呢? 而且还需要设定学习率, 多麻烦, 直接让找 导数为0点(最小极值), 不就可以了吗? 嗯。。。也可以...但是各有优缺,
具体方法和优劣分析可见Rachel-Zhang 的博客: http://blog.csdn.net/abcjennifer/article/details/7700772
总结一下: 回归问题的解决方法是:
1. 假定一个模型 2. 定义什么叫做最好的匹配(构造误差函数) 3. 用这个模型去匹配已有的数据点(训练集)
需要进一步讨论的问题:
- 如果参数(a,b)更多了该怎么办?
- 如果最合适的匹配模型并不是线性的怎么办? --- 选用一个 非线性模型 比如 y = ax^2 + bx + c.
- 如果误差(cost)与a,b(模型参数)的关系不是像碗一样的, 而是凹凸不平的该怎么办? ------ 这时候你就得注意你得到的cost的最低点(局部的最低)可能因初始点的不同而不同。 而这些最低点你需要进行比较,以确定是不是全局的最低
2.分类(Logistic regression)
- 现在是分成两类,如果数据需要分成三类或者更多该怎么办? ---- 假如有A,B,C三类, 把其中A类做为1,BC做为0,然后做Logistic regression, 得到模型a, 同理将B类做为1,AC作为0,得到模型b, 再同理得到模型c. 最后测试的时候, 对任意一个数据点x, 我们能够得到x分别属于A,B,C三类的概率值
3.总结(两个问题的区别)
- 如何选取一个 合理的模型(线性的,or 非线性的(e.g. 阶跃函数, 高斯函数)).
- 制造一个"美好"的 误差函数 (可以评估拟合程度,而且还是convex函数)
- 采取一切可能的技术(e.g. 导数下降法,解极值方程法) 求出最好的模型参数