模式识别(Pattern Recognition)学习笔记(三十一)-- 线性回归

1.监督学习

回归算法通常用在监督学习中的学习算法,所以在讲回归之前,先来说说监督学习。

我们已经学习了很多的分类器设计方方法,如感知器、SVM等,他们的共同特点都是,根据给定的带有类别标签的样本,训练学习机器,然后使得机器能够对新来的无标签样本进行正确分类,像这种就属于监督模式识别,对学习机器来说就是监督学习。

举个栗子,就拿吴恩达老师讲课最喜欢用的预测房价的例子,图形表示监督学习的过程如下:

在房价栗子中,由于我们要回归或预测的变量(房价)是连续的,所以我们把这种学习问题称为回归问题,反之如果我们预测的目标变量的取值为几个离散值,就是分类问题。

2.什么是线性回归

有时候我们考察一个对象属性时,会发现某两个或某几个属性变量之间存在着一种线性关系或近似线性关系,如汽车的速度与轮子的个数,人的体重与身高等等,如图,它描述的是人的年龄与血压之间的关系:

可以近似成是一种线性关系,图中可以看到有许多组样本数据点,然后我们根据这些有用的数据点去求出血压与年龄之间的关系(途中用一条直线标书,近似为一次函数),所以像这种利用已知数据点求解出各属性变量之间的线性关系的方法,就叫做线性回归。

上图中只是考察了年龄对血压的影响关系,这种单一变量的线性回归叫做一元线性回归,属于比较简单的情况;而在专业医学常识中,与血压存在某种关系的除了年龄,还有其他很多因素,如胖瘦等,这种我们关心的变量与多个自变量之间存在一定关系的线性回归,叫做多元线性回归,形式化表示就是:

其中,y是要回归的变量,...是与存在关系的自变量特征属性,...是对应的回归系数,是回归的残差(就是用x的线性函数来估计y所产生的误差),是常数项;

当然,上述自变量特征既可以是连续的,也可以是离散的。

3.线性回归的求解

接下来,为了阐述线性回归的具体知识,仍然拿房价预测的例子来说明。

现在,我们有房价与房子大小和房价数量之间的关系数据,如下表:

因此,我们的特征自变量有两个,分别是:房子大小和房间数;一般来说,监督学习问题取决于选取的特征的好坏,关于特征选择的具体知识,后续会学习到。

监督学习中,我们需要建立一个假设函数h,怎么做呢?根据上面提到的,假设房价与房子大小和房间数之间存在一定的某种近似关系,然后我们就可以利用下面关于x的线性函数h(x)来近似得到房价的估计:

        (1)

其中,是回归系数,用来对特征x到回归变量y的映射空间进行参数化;

对上式变形,可以写成向量乘积的形式:

                   (2)

其中,n是特征数;

有了假设函数模型,有了已知训练数据集,接下来要做什么呢?很明显,要利用这些训练数据集来估计学习出假设函数中的回归系数,欲学习出,有一个合理做法就是使得假设h(x)接近于y,这种接近应该如何来度量呢,可以通过定义一种损失函数来度量:

             (3)

这个式子应该大家会比较眼熟,在线性回归的求解中,最基本的方法就是用的最小二乘法,即求出使得各样本残差的平方和(即)达到最小的值,为了使最小化,同样我们可以使用梯度下降(当然还有其他方法)来进行求解:

1)首先给出的初始值;

2)利用如下公式进行更新

其中是修正步长,在机器学习叫做学习率;

注意:每一次迭代修正要对所有进行更新,更新完后才开始下一次迭代,如图:

左边是一元,右边是多元;

4.学习率的合理选取

如果学习率太大,步子迈得太大,损失函数变化剧烈不会每一次迭代都下降,最后导致无法收敛;如果学习率太小,步子迈的太小,导致过程缓慢,最终收敛速度也极慢。

根据斯坦福ML课程中吴恩达老师讲的,最好这样来选取学习率:

含义就是,如果用0.001,收敛太慢,那就增加10倍使用0.01,如果0.01不行,那就3倍,即0.003;

5.特征标准化

这个问题之前有提过,因为这是初学者极其容易忽视的地方,所以一定注意自变量特征的取值范围,自变量过大或过小都会导致函数饱和,不能区分自变量中的变化,而且如果把一个太大的特征作为输入,会容易出现这个特征在分类中根本起不到任何作用的现象,尽管我们可以用很小的权值来实现纠正,但是这样又会导致权值之间差异拉开明显,同样不利于学习过程的收敛,所以为了避免这种情况,必须要进行特征标准化,最常见的做法是利用均值和方差对特征进行归一化:

其中,为均值,为方差;

对预测房价的例子来说是这样的:

本文参考与斯坦福ML课程吴恩达老师的视频;

时间: 2024-10-19 08:54:23

模式识别(Pattern Recognition)学习笔记(三十一)-- 线性回归的相关文章

angular学习笔记(三十一)-$location(2)

之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍的是基于angular-1.3.2版本的,低版本的$location可能会有问题. hashbang模式和history api创建单页应用 首先,$location是用在单页应用里的...(废话,angular就是用在单页的)...所以,$location处理的是url改变,但是不刷新页面的情况.

【Unity 3D】学习笔记三十一:游戏元素——地形元素

地形元素 一般情况下,为了使游戏更具有美观性,会在游戏地形上放置很多的元素,这些元素是与地形分开的.主要包括:树木,草地,自定义网格模型. 树元素 首先导入系统提供的树木标准资源包,在project视图中,点击鼠标右键,然后从菜单中选择import-----tree creator.接着在地形菜单里点击第五个按钮,添加树模型.然后点击edit trees按钮,将弹出如下列表: add tree:添加一个树模型 edit tree:编辑一个树模型 remove tree:删除树模型 点击add t

angular学习笔记(三十一)-$location(1)

本篇介绍angular中的$location服务的基本用法,下一篇介绍它的复杂的用法. $location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录. 一. 获取url的相关方法: 以 'http://localhost/$location/21.1%20$location.html#/foo?name=bunny#myhash' 这个路径为例: 1. 获取当前完整的url路径: $location.absUrl():// http://localhost/$loc

PHP学习笔记三十一【const】

<?php //常量都是public类型 // const 常量名=赋值 .变量名不需要加$符号,也不需要要访问修饰符,默认就是public class A{ const TAX_RATE=0.08; public function PayTax($val) { return $val*A::TAX_RATE; //return $val*self::TAX_RATE; //这样使用也行 } } $a=new A(); echo $a->PayTax(299); // interface 接口

《Javascript权威指南》学习笔记之十一:处理字符串---String类和正则表达式

一.正则表达式的基本语法 1.概念:正则表达式由普通字符和特殊字符(元字符)组成的文本模式,该模式描述在查找字符串主体时待匹配的一个或者多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 普通字符包括所有的大小写字母字符.所有数字.所有标点符号及一些特殊符号.普通字符本身可以组成一个正则表达式,也可以和元字符组合组成一个正则表达式:而元字符则具有特殊的含义,包括().[].{}./.^.$.*.+.?...|.-.?:.?=.?! 2.基本语法 3.优先权含义 二.使用

UI学习笔记---第十一天UITableView表视图高级-自定义cell

自定义cell,多类型cell混合使用,cell自适应高度 自定义cell就是创建一个UITableViewCell的子类 把cell上的空间创建都封装在子类中,简化viewController中的代码 cell中的空间如何显示Model中的信息 cell中声明一个Model类型的属性,viewController中获取到Model对象后赋值给cell的Model属性 cell中重写Model的setter方法,把Model对象中的内容重新赋值给各个控件 M和V不直接通信,C负责M和V之间进行通

VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Excel的内置公式虽然强大,但是在ERP等系统中,往往需要进行很多业务上的计算,如收发存台账.指定年.月.部门的消耗查询等,都是需要从数据库中查询的,且和业务紧密相连.这时仅仅依靠Excel的内置公式就不够了,需要添加自定义的公式来进行这些业务计算. 测试代码下载 本系列所有测试代码均在Visual St

o&#39;Reill的SVG精髓(第二版)学习笔记——第十一章

第十一章:滤镜 11.1滤镜的工作原理 当SVG阅读器程序处理一个图形对象时,它会将对象呈现在位图输出设备上:在某一时刻,阅读器程序会把对象的描述信息转换为一组对应的像素,然后呈现在输出设备上.例如我们用SVG的<filter>元素指定一组操作(也称作基元,primitive),在对象的旁边显示一个模糊的投影,然后把这个滤镜附加给一个对象: <fliter id="drop-shadow"> <!-- 这是滤镜操作 --> </fliter&g

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle&lt;T&gt;

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以

OpenCV for Python 学习笔记 三

给源图像增加边界 cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value) src:源图像 top,bottem,left,right: 分别表示四个方向上边界的长度 borderType: 边界的类型 有以下几种: BORDER_REFLICATE # 直接用边界的颜色填充, aaaaaa | abcdefg | gggg BORDER_REFLECT # 倒映,abcdefg | gfedcbamn | nmabcd