机器学习<1>:基础概念
本文是笔者学习李航老师的经典教材《统计学习方法》第一章的学习笔记,分享在此,作为机器学习系列的开篇文章,在本系列中,将会逐一总结介绍主要的机器学习算法的基本原理、基于Python的具体实现、使用sklearn等第三方库的调用实践。
1.统计学习的基本概念
1-1.统计学习的定义
统计学习是关于计算机基于数据构建概率统计模型,并运用模型对数据进行预测与分析的一门科学,又称统计机器学习。
1-2.统计学习的特点
1)建立在计算机及网络上;
2)以数据为研究对象;
3)用于对数据进行预测与分析;
4)应用统计方法构建模型并应用模型进行预测与分析;
5)是概率论、统计学、信息论、计算理论、最优化理论及计算机科学等多个领域的交叉学科。
1-3.统计学习的对象
对象就是数据。
数据的形式是多样的:结构化数据,非结构化的文字、图像、音频、视频等等。
1-4.统计学习的目的
用于对数据进行预测与分析,特别是对未知的新数据进行预测与分析。
1-5.统计学习的方法
主要分为四种:监督学习(supervised learning)、非监督学习(unsupervised learning)、半监督学习(semi-supervised learning)、强化学习(reinforcement learning)。
1-6.统计学习的步骤
1)得到一个有限的训练数据集合;
2)确定包含所有可能的额模型的假设空间,即学习模型的集合;
3)确定模型选择的准则,即学习的策略;
4)实现求解最优模型的算法,即学习的算法;
5)通过学习方法选择最优模型;
6)利用学习的最优模型对新数据进行预测或分析。
2.监督学习
2-1.定义
监督学习利用训练数据集学习一个模型,再用这个模型对测试样本集进行预测。
监督学习分为学习和预测两个阶段。
2-2.假设
监督学习中,假设训练数据与测试数据是独立同分布的。
2-3.过程
学习的过程就是找到一个从输入到输出的映射,这个映射就是模型。
模型可以表示概率模型和非概率模型,概率模型可表示为条件概率分布\(P(Y|X)\),非概率模型可表示为决策函数\(Y=f(X)\)。
所有的模型的集合称为假设空间,由于模型是输入到输出的映射,因此假设空间就是从输入空间到输出空间的映射。
2-4.目的
学习的目的就是找到最好的模型。
3.统计学习的三要素
统计学习具有三要素: 方法=模型+策略+算法
3-1.模型
模型就是要学习的条件概率分布或者决策函数。
3-2.策略
策略就是选取最优模型的准则和方法。
(1)损失函数
损失函数(loss function)度量模型一次预测的好坏。
以非概率模型为例,模型\(f\)会针对输入\(X\)给定输出\(f(X)\),这个输出值与实际值Y之间可能有差异,用损失函数(或称代价函数)来度量这种差异的程度,记作\(L(Y,f(X))\)。
常用的损失函数:
1)0-1损失函数:
2)平方损失函数:
3)绝对损失函数:
4)对数损失函数:
损失函数取值越小,模型就越好。
(2)风险函数
风险函数度量平均意义下模型预测的好坏。
风险函数(risk function),其实就是损失函数的期望,也称为期望风险(expected risk)、期望损失(expected loss)。
学习的目的不是选择损失函数最小的模型,而是选择风险函数最小的模型。
(3)经验风险
经验风险(empirical risk)是指模型关于训练集的平均损失,也称为经验损失(empirical loss)。
根据大数定理,当样本容量n趋于无穷时,经验风险就趋近于期望风险。因此,就用经验风险去估计期望风险。
但是,实际情况下,由于样本容量有限,使用经验风险估计期望风险的效果并不好,这时就需要做一些校正。
因此就形成了两种选择模型的策略:经验风险最小化、结构风险最小化。
(4)经验风险最小化
经验风险最小化(empirical risk minimization, ERM)策略认为,经验损失最小的模型就是最优的模型。
当样本容量足够大,经验风险最小化策略可以保证有很好的学习效果。
最大似然估计就是经验风险最小化的例子。
(5)结构风险最小化
当样本容量很小时,经验风险最小化的学习效果并不是很好,就会产生过拟合。
结构风险最小化(structural risk minimization, SRM)就是为了防止过拟合提出的策略,其实质就是正则化(regularization)。
结构风险就是在经验风险上增加表示模型复杂度的正则化项(regularization),或称为惩罚项(penalty term)。
其中\(J(f)\)为模型的复杂度,模型\(f\)越复杂,复杂度就越大;反之,模型\(f\)越简单,复杂度就越小。复杂度\(J(f)\)表示了对复杂模型的惩罚。\(\lambda \geq0\)是系数,用以权衡经验风险和模型复杂度。结构风险小需要经验风险与模型复杂度同时小。结构风险小的模型一般对训练数据和未知的测试数据都具有较好的预测效果。
结构风险最小化策略认为,结构风险最小的模型就是最优的模型。
最大后验概率估计就是结构风险最小化的例子。
(6)小结
监督学习问题就是经验风险函数或结构风险函数的最优化问题。
3-3.算法
算法就是求解上述最优化问题的计算方法。
4.模型评估与选择
4-1.训练误差与测试误差
假设学习到的模型是\(Y=\hat{f}(X)\)。
训练误差(training error)就是模型\(Y=\hat{f}(X)\)关于训练数据集的平均损失:
同理,测试误差(test error)就是模型\(Y=/hat{f}(X)\)关于测试数据集的平均损失:
训练误差本质上并不重要,测试误差则是一个非常重要的概念,反映了模型对未知的测试数据集的预测能力。
两个模型,测试误差小的就是更好的模型。
4-2.泛化能力与泛化误差
模型对未知数据的预测能力,就称为泛化能力,因此,模型对未知数据预测的误差即为泛化误差(generalization error)。
泛化误差反映了模型的泛化能力,如果一个模型比另一个模型具有更小的泛化误差,那么这个模型就更有效,本质上泛化误差是模型的期望风险,一般使用测试误差来估计。
4-3.过拟合与模型复杂度
过拟合(over-fitting)是指学习的模型复杂度过高,导致对已知的训练数据预测的很好,但对未知的测试数据预测很差的现象。
与过拟合相对的就是欠拟合(under-fitting),它是指学习的模型过于简单,导致连已知的训练数据都不能预测的很好。
本质上来说,过拟合就是模型的学习能力过于强大,把训练数据中不太一般性的特征都学习到了,而欠拟合就是模型的学习能力低下。
当模型的复杂度增大时,训练误差会主键减少并趋向于0,而测试误差会先减小而后又增大;当选择的模型复杂度过大时,过拟合的现象就会发生。所以,为了防止模型的过拟合,就要选择复杂度适当的模型,以达到测试误差最小的学习目的。有两种常用的模型选择方法:正则化和交叉验证。
4-4.正则化
正则化(regularization)就是结构风险最小化策略的具体实现。
正则项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。
正则化的一般形式:
第一部分是经验风险,第二部分是正则化项,\(\lambda\geq0\)为调整二者关系的系数。
正则化项可以取不同的形式。
在回归问题中,正则化项可以是参数向量的\(L_1\)范数:
也可以是参数向量的\(L_2\)范数:
正则化的目的是选择经验风险与模型复杂度同时较小的模型。
4-5.交叉验证
当样本数据充足时,进行模型选择的一种简单方法是随机地将数据集切分成三部分,分别为训练集(training set)、验证集(validation set)和测试集(test set),其中训练集用来训练模型,验证集用于模型的比较选择,测试集则用来对模型进行最终的评估。
但是,大多数实际应用中,数据并不是充足的,这时候可以采用交叉验证的方法。
交叉验证的基本思想是重复的使用数据,将给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此进出上反复进行训练、测试以及模型选择。
(1)简单交叉验证
方法:随机地将数据按照7:3或者6:4划分成两部分,一部分作为训练集,另一部分作为测试集,然后用训练集对各个模型进行训练,再使用测试集评估各个模型的测试误差,选出其中测试误差最小的模型。
(2)K折交叉验证
方法:随机地将数据切分成K等份互不相交的自己,然后使用其中的K-1份作为训练集,使用剩下的1份作为测试集测试模型,重复这一过程K次,最后选出K次平均测试误差最小的模型。
(3)留一交叉验证
方法:留一交叉验证是一种特殊的K折交叉验证,K=样本容量,往往是在数据缺乏的情况下使用。
5.参考与感谢
机器学习<1>:基础概念的更多相关文章
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)
引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自网上的免费课程和一些经典书籍,免费课 ...
- 【强化学习RL】必须知道的基础概念和MDP
本系列强化学习内容来源自对David Silver课程的学习 课程链接http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html 之前接触过RL ...
- Flink入门-第一篇:Flink基础概念以及竞品对比
Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...
- TCP/IP基础概念及通信过程举例
TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...
- Jmeter基础之---jmeter基础概念
Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...
- 快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...
- 理解 angular2 基础概念和结构 ----angular2系列(二)
前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...
- JavaBean 基础概念、使用实例及代码分析
JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...
随机推荐
- win7.wifi热点
使用本地连接上网,将网卡设为wifi热点 cmd 管理员身份运行 netsh wlan set hostednetwork mode=allow ssid=4Gtest key=12345678 网络 ...
- 读后感+资源-----java8函数式编程pdf
花了两周时间工作之余抽空读完了这本书,对lamdba以及java的理解又有了一个新的认识(装个逼,哈哈) 以前看视频学习的还是太基本了,感觉读书更容易理解背后的设计思想和编程思路 这本书还是挺不错,就 ...
- ubuntu16.04 eclipse+pydev 配置
参考:http://blog.csdn.net/bluish_white/article/details/56509446,http://blog.csdn.net/qing101hua/articl ...
- 42 - 数据库-orm-SQLAlchemy
目录 1 ORM 2 sqlalchemy 3 基本使用 3.1 创建连接 3.1.1 利用连接池执行sql 3.1.2 利用session来执行sql 3.2 创建基类 3.3 创建实体类 3.3. ...
- group by 和 distinct 去重比较
distinct方式就是两两对比,需要遍历整个表.group by分组类似先建立索引再查索引,所以两者对比,小表destinct快,不用建索引.大表group by快.一般来说小表就算建索引,也不会慢 ...
- Luogu P2310 【loidc,看看海】
各位大佬都用的排序和杨颙大定理,蒟蒻的我怎么也不会做(瑟瑟发抖),那么,就来一发主席树吧.我们知道线段树可以维护区间,平衡树可以维护值域那么,我们可以用线段树套平衡树来解决这个区间值域的问题线段树套平 ...
- Effective STL 学习笔记 39 ~ 41
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- js中的异步[Important]
js作为前端最主流的语言,主要处理页面显示变化(mutation)和异步(asynchronicity), js语言的基本要素和使用惯例的演化大都围绕着这两大主题,两者均值得总结和思考的主题, 这里先 ...
- IdentityServer4揭秘---Consent(同意页面)
授权同意页面与登录一样首先要分析页面的需要什么模型元素后建立相关的模型类 界面的话就 记住选择 .按钮.RuturnUrl.以及选择的资源Scope /// <summary> /// ...
- AutoCompleteTextView,Spinner,消息提示
package com.example.wang.testapp2; import android.app.Notification; import android.app.NotificationM ...