- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
相信很多人已经研究过、正在研究K-NN算法,我也是其中之一。
我刚刚遇到这样一句话:“对于任何给定的问题,较小的 k 值将导致预测出现较大方差。或者,将 k 设置为较大值可能会导致较大的模型偏差。”,我认为这对很多人来说都是直截了当的,但对我来说却不然。
如果您已经知道它的含义,请帮我理解它是什么。
最佳答案
好的,让我们从头开始。
<强>1。 k-NN 是如何工作的?
您有 n 个(k 比 n 小得多)点的基数,您知道所需的答案 - 您可能已经从 oracle 获得了它。该集称为训练集,因为您将其提供给虚拟实体(k-NN 分类器),以便它可以学习所需的结果。 “点”是指单个示例,用某些空间中的特征进行描述,使我们能够计算距离。
当要求对新点进行分类(识别)时,您将在 n 个点中搜索最接近新点的 k 个实例。 “最接近”是指“特征向量之间的距离最短”。然后你将根据这 k 个点的投票来选择答案。例如,如果 k=5 和 3 点表示新的属于 A 类,2 - B 类,则您假设新的属于 A 类。您必须指定一些平局策略 - 可能会回到 1 - NN 并返回最近点的类别。
<强>2。 “对于任何给定的问题,较小的 k 值将导致预测出现较大差异。”
我假设“预测的巨大差异”作者的意思是“对大量数据进行分类时出现许多错误”。
为什么会这样?
因为k-NN非常幼稚。直觉上,接近点可能属于同一类,但情况并非总是如此。例如,参见下图中的 A 点。如果我们使用 k=1,那么最接近的点将是红色,即使答案应该是绿色。对于 k=2,我们在红色和绿色之间进行平局并选择红色,因为它更接近。
Source: English wiki, with slight by-hand modification
最后,这句话在我看来意味着“如果 k 很小,你可能会得到很多错误的结果”。
<强>3。 “将 k 设置为较大的值可能会导致较大的模型偏差。”
“偏见”是指即使问题分布均匀,也倾向于更频繁地给出一个答案。对于较大的 k,可能会发生这种情况,但问题是“何时”。
嗯,“何时”的答案是“当你的训练集有偏差时”。这里的“偏见”意味着某些类别比其他类别拥有更多的分数。
考虑一个训练集,其中类别 + 获得 5 分,类别 * 获得更多积分,如下图所示。
它可能并不代表类之间的真实关系,但这就是您所拥有的所有数据。在下图中,类可能是线性可分的,并且点标记为红色?可能是+。
如果您使用 k=10,您几乎总是会得到答案 *。最好的情况是用红色标记的点? - 您将获得所有 5 个 + 点,另外 5 个 * 点,并使用 + 解决与 1-NN 的平局,因此答案是正确的。
无论如何,在大多数情况下,您的分类器将提供一个特定的答案,这正是偏差 - 一个类将更频繁地返回。
但前面示例中的情况并非如此 - 正如句子所述,它可能会导致较大的偏差,但并非必须如此。
最后,这句话的意思是,如果你的数据集有偏差,那么你的分类器对于大 k 比小 k 更有可能有偏差。
Source: my own
<强>4。总结和进一步阅读。
我希望这能让您澄清一些事情。
如果您需要更多,请参阅this .
关于machine-learning - k-NN分类器的预测方差和模型偏差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31739020/
在 Vim 中,我打开了一个基本结构如下的文件: 3677137 00:01:47.04 666239 00:12:57.86 4346 00:00:01.77 418 00:00:0
我正在尝试构建一个正则表达式来处理以字符串形式呈现给我的数据类型,有两种可能的格式: 字符串[nmin..nmax] 字符串[nmax] 其中 nmin 和 nmax 是一些数字。 我构建了适合我的正
我尝试按照 tensorflow 教程实现 MNIST CNN 神经网络,并找到这些实现 softmax 交叉熵的方法给出了不同的结果: (1) 不好的结果 softmax = tf.nn.softm
我是 Pytorch 的新手,我不太了解的一件事是 nn.ModuleList 的用法。和 nn.Sequential .我能知道什么时候应该使用一个而不是另一个吗?谢谢。 最佳答案 nn.Modul
我不明白当数据为 3D 时 BatchNorm1d 如何工作(批量大小、H、W)。 示例 输入大小:(2,50,70) 图层:nn.Linear(70,20) 输出大小:(2,50,20) 如果我随后
我浏览了chapter 7 NLTK 书中的内容正在寻找解决方案,但到目前为止我还不清楚。 *表示 0 个或多个名词 *正如书中所解释的,意思是0个或多个任何类型的名词 NLTK 中是 NN , NN
:nn.MaxPool2d(kernel_size, stride) 和 nn.function.max_pool2d(t, kernel_size, stride) 之间有什么区别? 我在模块中定义
我正在使用 Hadoop 2.6.0-cdh5.6.0。我已经配置了 HA。我显示了事件(NN1)和备用名称节点(NN2)。现在,当我向事件名称节点(NN1)发出终止信号时,备用名称节点(NN2)不会
Pytorch 中的许多损失函数都在 nn.modules.loss 和 nn.functional 中实现。 例如,下面的两行返回相同的结果。 import torch.nn as nn impor
我已阅读 docs of both functions ,但据我所知,对于函数 tf.nn.softmax_cross_entropy_with_logits(logits, labels, dim=
当我尝试比较 tf.nn.fused_batch_norm 的方差输出和 tf.nn.moments 的方差输出时,对于相同的输入,我没有相同的值。 import numpy as np import
当我尝试比较 tf.nn.fused_batch_norm 的方差输出和 tf.nn.moments 的方差输出时,对于相同的输入,我没有相同的值。 import numpy as np import
这个问题在这里已经有了答案: Are there any computational efficiency differences between nn.functional() Vs nn.seq
我有一个简单的 Java 客户端,可以将文件保存到 HDFS - 配置了 1 个名称节点。为此,我使用 hadoop 配置,指定默认文件系统,如: org.apache.hadoop.conf.Con
我将此 varchar 格式作为时间累积,我想将其转换为整数以执行 SUM 并获得一组的总时间。第一部分可以是1、2、3、4甚至5位数字,代表小时数的累加,然后用冒号隔开。然后是第二部分,即分钟的累积
在 pytorch 0.4.0 版本中,有一个 nn.LayerNorm模块。 我想在我的 LSTM 网络中实现这一层,尽管我在 LSTM 网络上找不到任何实现示例。 pytorch 贡献者暗示这 n
以下是使用 PyTorch 中的 nn.functional() 模块的前馈网络 import torch.nn as nn import torch.nn.functional as F class
对于住宿实体,我们有两列可以为空:CollectionType和 AccommodationUnitType . 但是我注意到在数据中它们被设置为零而不是空,导致 NHibernate 尝试查找 id
我只需要分块那些只有那种模式的短语,而不是再分块一次。我在 Python 中使用 NLTK 库 完成了它,但不起作用 import nltk import re document="they run
例如,如果我有以下模型类: class MyTestModel(nn.Module): def __init__(self): super(MyTestModel, self)
我是一名优秀的程序员,十分优秀!