机器学习 面试常见问题&答案 ②
欠拟合(通常代表高偏差)
精度
- 如前所述如果模型具有足够的数据,但因不够复杂而无法捕捉基本关系,则会出现偏差。这样一来,模型一直会系统地错误表示数据,从而导致预测精度低。这种现象叫做欠拟合(underfitting)。
- 简单来说,如果模型不适当,就会出现偏差。举个例子:如果对象是按颜色和形状分类的,但模型只能按颜色来区分对象和将对象分类(模型过度简化),因而一直会错误地分类对象。
- 或者,我们可能有本质上是多项式的连续数据,但模型只能表示线性关系。在此情况下,我们向模型提供多少数据并不重要,因为模型根本无法表示其中的基本关系,我们需要更复杂的模型。
过拟合(通常代表高方差)
- 过拟合又可以称之为维度灾难。
- 机器学习中的维度灾难 -
红色石头的专栏 - CSDN博客 https://blog.csdn.net/red_stone1/article/details/71692444 过少的数据样本与有效特征,过高的维度,会导致模型学到噪声和不必要的无效特征,这个概念叫做过拟合,是维度灾难的一个直接后果。
- 在训练模型时,通常使用来自较大母体(训练集)的有限数量样本。如果利用选择的数据子集反复训练模型,可以预料它的预测结果会因提供给它的具体样本而异。在这里,方差(variance)用来测量预测结果对于任何给定的测试样本会出现多大的变化。
- 出现方差是正常的,但方差过高表明模型无法将其预测结果泛化到从中抽取训练样本的较大母体。对训练集高度敏感也称为过拟合(overfitting),而且通常出现在模型过于复杂或我们没有足够的数据支持它时。
- 通常,可以利用更多数据进行训练,以降低模型预测结果的方差并提高精度。
如何改进模型的有效性
- 我们可以看到,在给定一组固定数据时,模型不能过于简单或复杂。如果过于简单,模型无法了解数据并会错误地表示数据。但是,如果建立非常复杂的模型,则需要更多数据才能了解基本关系,否则十分常见的是,模型会推断出在数据中实际上并不存在的关系。
- 关键在于,通过找出正确的模型复杂度来找到最大限度降低偏差和方差的最有效点。当然,数据越多,模型随着时间推移会变得越好。
- 要详细了解偏差和方差,建议阅读 Scott Fortmann-Roe
撰写的这篇文章。http://scott.fortmann-roe.com... - 除了选定用来训练模型的数据子集外,您使用的哪些来自给定数据集的特征也会显著影响模型的偏差和方差。
聊一下模型训练过程中的学习曲线
我们根据模型通过可视化图形从数据中学习的能力来探讨偏差与方差之间的关系。机器学习中的学习曲线是一种可视化图形,能根据一系列训练实例中的训练和测试数据比较模型的指标性能。在查看数据与误差之间的关系时,我们通常会看到,随着训练点数量的增加,误差会趋于下降。由于我们尝试构建从经验中学习的模型,因此这很有意义。我们将训练集和测试集分隔开,以便更好地了解能否将模型泛化到未见过的数据而不是拟合到刚见过的数据。在学习曲线中,当训练曲线和测试曲线均达到稳定阶段,并且两者之间的差距不再变化时,则可以确认模型已尽其所能地了解数据。
偏差
- 在训练误差和测试误差收敛并且相当高时,这实质上表示模型具有偏差。无论我们向其提供多少数据,模型都无法表示基本关系,因而出现系统性的高误差。
方差
- 如果训练误差与测试误差之间的差距很大,这实质上表示模型具有高方差。与偏差模型不同的是,如果有更多可供学习的数据,或者能简化表示数据的最重要特征的模型,则通常可以改进具有方差的模型。
理想的学习曲线
- 模型的最终目标是,误差小并能很好地泛化到未见过的数据(测试数据)。如果测试曲线和训练曲线均收敛,并且误差极低,就能看到这种模型。这种模型能根据未见过的数据非常准确地进行预测。
说一下你理解的信息增益(Information gain)
- 熵:表示变量的不确定性。
- 条件熵:在一个条件下,变量的不确定性。
- 信息增益:熵 - 条件熵
在一个条件下,信息不确定性减少的程度!
- 例子:原来明天下雨例如信息熵是2,条件熵是0.01(因为如果是阴天就下雨的概率很大,信息就少了),这样相减后为1.99,在获得阴天这个信息后,下雨信息不确定性减少了1.99!是很多的!所以信息增益大!也就是说,阴天这个信息对下雨来说是很重要的!
- 所以在特征选择的时候常常用信息增益,如果IG(信息增益大)的话那么这个特征对于分类来说很关键~~
决策树就是这样来找特征的。
说一下分类和回归的区别?
两者追到本质是一样。
- 分类模型和回归模型本质一样,分类模型可将回归模型的输出离散化,回归模型也可将分类模型的输出连续化,举几个例子:
Logistic Regression 和 Linear Regression:
- Linear Regression: 输出一个标量
wx+b,这个值是连续值,所以可以用来处理回归问题 - Logistic Regression:把上面的 wx+b 通过 sigmoid
函数映射到(0,1)上,并划分一个阈值,大于阈值的分为一类,小于等于分为另一类,可以用来处理二分类问题 - 更进一步:对于N分类问题,则是先得到N组w值不同的
wx+b,然后归一化,比如用 softmax
函数,最后变成N个类上的概率,可以处理多分类问题
- Linear Regression: 输出一个标量
Support Vector Regression 和 Support Vector Machine:
- SVR:输出
wx+b,即某个样本点到分类面的距离,是连续值,所以是回归模型 - SVM:把这个距离用 sign(·)
函数作用,距离为正(在超平面一侧)的样本点是一类,为负的是另一类,所以是分类模型
- SVR:输出
Naive Bayes 用于分类 和 回归:
- 用于分类:y是离散的类别,所以得到离散的 p(y|x),给定 x
,输出每个类上的概率 - 用于回归:对上面离散的 p(y|x)求期望
ΣyP(y|x),就得到连续值。但因为此时y本身是连续的值,所以最地道的做法是,得到连续的概率密度函数p(y|x),然后再对y求期望。参考 http://www.cs.waikato.ac.nz/~eibe/pubs/nbr.pdf
- 用于分类:y是离散的类别,所以得到离散的 p(y|x),给定 x
前馈神经网络(如 CNN 系列) 用于 分类 和 回归:
- 用于回归:最后一层有m个神经元,每个神经元输出一个标量,m个神经元的输出可以看做向量
v,现全部连到一个神经元上,则这个神经元输出
wv+b,是一个连续值,可以处理回归问题,跟上面 Linear Regression
思想一样 - 用于N分类:现在这m个神经元最后连接到 N 个神经元,就有 N
组w值不同的 wv+b,同理可以归一化(比如用 softmax )变成
N个类上的概率(补充一下,如果不用 softmax,而是每个 wx+b
用一个
sigmoid,就变成多标签问题,跟多分类的区别在于,样本可以被打上多个标签)
- 用于回归:最后一层有m个神经元,每个神经元输出一个标量,m个神经元的输出可以看做向量
循环神经网络(如 RNN 系列) 用于分类 和 回归:
- 用于回归 和 分类: 跟 CNN 类似,输出层的值 y =
wv+b,可做分类可做回归,只不过区别在于,RNN
的输出跟时间有关,即输出的是 {y(t),
y(t+1),...}序列(关于时间序列,见下面的更新)
- 用于回归 和 分类: 跟 CNN 类似,输出层的值 y =
- 上面的例子其实都是从 prediction 的角度举例的,如果从 training 角度来看,分类模型和回归模型的目标函数不同,分类常见的是 log loss,hinge loss, 而回归是 square loss
如文章你已看懂,点个「喜欢」即可。
如若错误以及不清晰的地方,随时提出。
欢迎扫一扫上面二维码加入我的个人微信号进行技术交流。