机器学习:从线性回归说起

接触机器学习与深度学习仅一年的时间,现以笔记形式记录描述心得体会,必要时会实现相关算法。博客中将会提到的算法大多来自机器学习相关的书籍,如Andrew NG的机器学习讲义,李航老师的统计学习方法,机器学习实践,PRML,Understanding Machine learnning ,Foundamentation of Machine Learning 以及部分论文。总之,说到哪算到哪,或许以后不会从业机器学习相关工作,但现在还是坐下笔记为好!会在每一次博客后面附上参考来源。

    • 何为线性回归
    • 最小二乘法
      • 随机梯度下降解法
      • 拉格朗日极值法求解另一种解法
      • 常用矩阵导数
      • 为什么经常选择最小二乘法作为损失函数
    • 局部加权回归
      • 数学公式
      • UML 图
    • 离线写博客
    • 浏览器兼容


何为线性回归

在机器学习的一些常用算法中,经常遇到的是两类问题:分类 和 回归。前者称为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+θ1x1+θ2x2

   这里的 θ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/2i=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]来生成目录:

    • 何为线性回归
    • 最小二乘法
      • 随机梯度下降解法
      • 拉格朗日极值法求解另一种解法
      • 常用矩阵导数
      • 为什么经常选择最小二乘法作为损失函数
    • 局部加权回归
      • 数学公式
      • UML 图
    • 离线写博客
    • 浏览器兼容

数学公式

使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.

  • 行内公式,数学公式为: Γ(n)=(n1)!nN
  • 块级公式:

x=b±b24ac2a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

Created with Raphaël 2.1.0 张三 张三 李四 李四 嘿,小四儿, 写博客了没? 李四愣了一下,说: 忙得吐血,哪有时间写。

或者流程图:

Created with Raphaël 2.1.0 开始 我的操作 确认? 结束 yes no
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容. ↩

你可能感兴趣的:(机器学习和深度学习)