接触机器学习与深度学习仅一年的时间,现以笔记形式记录描述心得体会,必要时会实现相关算法。博客中将会提到的算法大多来自机器学习相关的书籍,如Andrew NG的机器学习讲义,李航老师的统计学习方法,机器学习实践,PRML,Understanding Machine learnning ,Foundamentation of Machine Learning 以及部分论文。总之,说到哪算到哪,或许以后不会从业机器学习相关工作,但现在还是坐下笔记为好!会在每一次博客后面附上参考来源。
何为线性回归
在机器学习的一些常用算法中,经常遇到的是两类问题:分类 和 回归。前者称为classification ,后者称为regression。区别这两类问题的关键是看输出变量y是连续变量还是离散变量。f(xi)=yi,f为学习算法要学习的假设函数,可以看做是输入变量x和输出变量y之间的映射关系。若给定任一输入变量xi,yi只有若干离散值可选,那么这输入分类问题;反之若输出yi的可选值有无穷多个,且为连续空间,则成为回归问题。 我们以Andrew Ng的机器学习讲义中的例子来说明回归问题。
问题:
已知房子的条件,包括居住面积、卧室个数等,预测房子的售价!
训练集
住房面积(m2) | 卧室个数 | 售价 |
---|---|---|
2104 | 3 | 400 |
1600 | 3 | 330 |
2400 | 3 | 369 |
1416 | 2 | 232 |
3000 | 4 | 540 |
. | . | . |
. | . | . |
. | . | . |
从这部分已知的数据,我们需要学习处在住房面积(m2)、卧室个数和最终售价之间的映射关系。这便是一个典型的回归问题,因为售价为连续的变量,而非可数个离散值。这里的住房面积、卧室个数。。。便是输入变量x,输出变量y为收件。学习算法需要学习的是二者之间的映射关系f。
线性回归
我们假设输入变量和输出变量之间存在一次(线性)关系,即若以 x1 表示住房面积,以 x2 表示卧室个数,那么线性关系可以理解为存在参数 θ0 、 θ1 、 θ2 ,使得售价y可以表示为:
y=hθ(x)=θ0+θ1∗x1+θ2∗x2
这里的 θi 成为参数(parameters),有时也称为权重,一般情况下这也是机器学习算法所要学习的东西。它描述了从输入变量 x1 、 x2 到s输出变量 y 之间的映射关系。
为了简介的表示上面的关系式,我们通常会选择增加一个截距项x0 ,令x0=1
则可以向量乘表示上面的线性函数:h(x)=∑i=02θixi=θTx
当输入变量x存在n个元素时,将2替换为n即可,即
h(x)=∑i=0nθixi=θTx
这里的 θ , x 均为n+1维的向量。
最小二乘法
那么问题来了,既然我们已经有了训练数据,也假定了输入、输出之间存在一次(线性)关系,那么究竟怎么选择参数
θ 呢?
一个显然的方法就是,我们选择的 θ ,要能够使得输出 hθ(xi) 尽可能接近于y_i,至少对训练数据如此。也就是说应尽可能使得 |hθ(xi)−yi| 尽可能的小。
为此,我们定义损失函数(cost function)描述这个误差:
J(θ)=1/2∑i=1m(hθ(x(i)−y(i))2
这里的m为训练数据中的样本对的个数,通常样本对以 (x(i),yi) 表示。至于这里为什么要以二次项表示这个误差函数,请见稍后的 为什么经常选择最小二乘法作为损失函数?部分。
这里定义的 J(θ) 称为 最小二乘损失函数,最小二乘法在机器学习中是很常见的。
现在我们已经定义了误差的表示,之前说过,我们的目的是选择的参数 θ 要能够使误差越小越好。那么接下来问题就变为如何最小化损失函数 J(θ) 的问题了。也就是
minθ J(θ)
接下来以两种方法来求解这个最优化问题,一个称谓随机梯度下降法,另一个称谓拉格朗日极值法。这两种方法也常用语其他机器学习算法的求解中。
随机梯度下降解法
稍后再写!
拉格朗日极值法求解(另一种解法)
-
Markdown Extra 定义列表语法:
项目1
项目2
- 定义 A
- 定义 B 项目3
- 定义 C
-
定义 D
定义D内容
常用矩阵导数
代码块语法遵循标准markdown代码,例如:
@requires_authorization
def somefunc(param1='', param2=0):
'''A docstring'''
if param1 > param2: # interesting
print 'Greater'
return (param2 - param1 + 1) or None
class SomeClass:
pass
>>> message = '''interpreter
... prompt'''
为什么经常选择最小二乘法作为损失函数?
生成一个脚注1.
局部加权回归
用 [TOC]
来生成目录:
数学公式
使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.
- 行内公式,数学公式为: Γ(n)=(n−1)!∀n∈N 。
- 块级公式:
更多LaTex语法请参考 这儿.
UML 图:
可以渲染序列图:
或者流程图:
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
- 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
- IE9以下不支持
- IE9,10,11存在以下问题
- 不支持离线功能
- IE9不支持文件导入导出
- IE10不支持拖拽文件导入
- 这里是 脚注 的 内容. ↩