模型就是针对存在于不一样变量之间的数学或几率联系的一种规范(函数关系、统计关系)。html
机器学习是指建立并使用那些由学习数据而得出的模型。也叫作预测模型或数据挖掘。web
通常来讲,机器学习的目标是利用已有的数据来开发能够用来对新数据预测多种可能结果的模型。好比:算法
预测一封邮件是不是垃圾邮件机器学习
预测一笔信用卡交易是不是欺诈行为函数
预测哪一种广告最有可能被购物者点击学习
选择特征须要经验和专业知识的积累。若是你基于一我的的工做年限来预测薪水,那么工做年限就是你的特征(feature)。测试
设想你要创建一个垃圾邮件过滤器来预测一封邮件是不是垃圾邮件。你提取了以下特征:ui
邮件文本中包含“伟哥”搜索引擎
单字“买”出现了多少次编码
发件人的域名是什么
第一个特征是是否问题,一般编码为0或1。第二个特征是数值。第三个特征是从一个离散的选择集中做出的选择。
特征的类型限制了咱们所用的模型的类型。朴素贝叶斯分类器适合是与否的二元特征;回归模型要求有数值型的特征,固然也能够包含0或1这样的虚拟编码变量,如性别;决策树会涉及数值或属性数据。
有时,咱们须要设法移除特征。好比,模型的输入可能包含不少变量,这时你会用到降维技术来将这些变量缩减到少许重要的维度,从而只使用少数的特征,或者使用一些技术如正则化技术来对应用过多特征的模型进行惩罚。
过拟合(overfit)是指在训练数据上表现良好,但对新数据的泛化能力却不好的模型。太复杂的模型会致使过拟合。
欠拟合(underfoot)是指在训练数据上没有好的表现,这代表你的模型不够好,须要继续寻找更好的模型。
通常来讲,只有常数项(水平线,0阶,1个参数)的模型对训练数据来讲会存在严重的欠拟合;而过于复杂的模型(例如阶数为九、10个参数的多项式)精确穿过训练数据的每一个点,是严重过拟合的,若是取到更多的点,这个多项式极可能会偏离不少;拟合良好的模型可以很好地把握平衡,它和训练集的每一个点都很接近,而且也会和新的数据点很接近。
如何确保咱们的模型不会太复杂?最基本的方法是使用不一样的数据集来训练和测试模型,例如三分之二用来训练模型,三分之一用来衡量模型的表现。
若是一个模型的准确率超过了98%,那么这个模型是好仍是坏呢?
先别急着回答。假设咱们要预测一封邮件是不是垃圾邮件,那么会有四种状况:
垃圾邮件 | 非垃圾邮件 | |
---|---|---|
预测是垃圾邮件 | 真阳性(tp) 是垃圾邮件,咱们作了正确的预测 |
假阳性(fp)-第1类错误 不是垃圾邮件,咱们预测错了 |
预测是非垃圾邮件 | 假阴性(fn)-第2类错误 是垃圾邮件,但咱们预测它不是 |
真阴性(tn) 不是垃圾邮件,咱们也预测对了 |
这个矩阵也被称为混淆矩阵(confusion matrix)。
现在,大约每1000名婴儿中有5我的会取名Luke;每人一辈子中患白血病的概念大概是1.4%,即1000我的中会有14我的得白血病。假设两个因素是独立的,运行“Luke是白血病患者”测试(即仅当婴儿起名为Luke时预测会得白血病),获得如下的矩阵:
白血病 | 非白血病 | 总计 | |
---|---|---|---|
Luke | 70 | 4930 | 5000 |
非Luke | 13930 | 981070 | 995000 |
总计 | 14000 | 986000 | 1000000 |
那么正确预测的比例就是accuracy=(tp+tn)/(tp+fp+fn+tn)=0.98114。这是一个很蠢的测试,但准确率高达98%。
查准率(precision)度量模型所作的关于阳性的预测有多准确:
precision=tp/(tp+fp)=0.014
查全率(recall)度量模型所识别的阳性的比例:
recall=tp/(tp+fn)=0.005
若是两个指标都很低,那就不是一个好的模型。
F1 score是查准率与查全率的调和平均值:
F1 score=2precisionrecall/(precision+recall)
为了更为直观地理解查准率和查全率的概念,摘取维基百科的两个例子:
假设某个计算机程序在视频中识别出7只狗,这个视频实际包含9只狗和一些猫。程序认为的7只狗中有4只确实是狗,但3只实际上是猫,那么程序的查准率就是4/7,查全率则是4/9。
假设某个搜索引擎返回了30页结果,但只有20页是相关的,还有40页的相关内容没有返回。那么这个搜索引擎的查准率就是20/30=2/3,查全率就是20/60=1/3。查准率反映搜索结果是否有用,查全率反映搜索结果是否完整。
简单来说,高的查准率意味着算法返回了更多的相关结果而不是不相关结果,高的查全率意味着算法返回了大部分的相关结果。
模型的选择一般是查准率和查全率之间的权衡。一个模型若是在信心不足的状况下预测“是”,那它的查准率低,但查全率可能会较高;而若是一个模型在信心十足的状况下预测“是”,那它的查准率高,但查全率可能会较低。例如,假设有10个风险因素预测一我的患抑郁症,你具有的风险因素越多,越容易患上抑郁症。假设进行一系列测试:“至少有一个风险因素预测会得抑郁症”、“至少有两个风险因素预测会的抑郁症”等等。随着临界值不断提升,测试的查准率提升了(由于风险因素越多,越容易患上抑郁症),但测试的查全率则降低了(由于具有越多风险因素的人会愈来愈少)。选择合适的临界值实际上就是作出正确的权衡。
你也能够把模型选择看成假阳性和假阴性之间的权衡。预测“是”太多一般会获得不少假阳性,预测“否”太多一般会得出不少的假阴性。
思考模型选择问题的另外一个角度是误差-方差权衡。
这里有一张图能够直观地理解误差(有时也称为偏倚)和方差之间的区别:
红色的靶心区域是咱们试图预测其真值的随机变量,整个区域表明这个变量的分布。每次咱们抽取一个样原本预测这个变量,这些样本用蓝色的点表示。若是蓝色的点落在红色区域,表明预测正确。也就是说,误差度量的是预测的蓝点与真实的红色区域之间的距离,这是模型的偏差(error);而方差(variance)则是指预测的蓝点的疏密程度。
误差-方差权衡是什么呢?
要减小模型的误差或偏差,就要增长特征,模型的复杂度提升,但它的方差就会变大(预测值的蓝点变的稀疏);而要减小模型的方差,移除特征,下降模型复杂度,误差又会增大。那么,就存在一个最优的模型复杂度(optimum model complexity),使得方差和误差的大小都是能够接受的。这就是误差-方差权衡。
再好比:
你有一份两个维度的数据:某所中学全部学生的身高和体重数据,表现为横纵坐标轴上的散点。
假设你用一条水平线去拟合这些点,直线上的点表明你的预测值,它的方差为0,但误差却很大,即它并无很好地拟合真实数据点,模型是欠拟合的。
因而你用一个高阶的多项式样条函数(polynomial spline)去拟合数据,但你对拟合优度并不满意,因而提升阶数,模型拟合优度提升。这时,模型的误差就是在不断接近0,但方差却不断增大。
若是你的模型有高方差,除了移除特征外,你也能够获取更多的数据。基于10个点拟合的模型过拟合问题严重,而若是在100个数据点上训练,就会大大减小过拟合问题。也就是说,在模型复杂度不变的状况下,数据越多,越难过拟合。
但数据越多并不会对模型的误差有什么帮助。
课程:
https://www.coursera.org/lear...
http://work.caltech.edu/telec...
教材:
http://statweb.stanford.edu/~...
《数据科学入门》[美]Joel Grus
https://en.wikipedia.org/wiki...
http://stats.stackexchange.co...
http://scott.fortmann-roe.com...