问题标签 [cross-validation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
626 浏览

machine-learning - 我是否使用训练集中的相同 idf 来执行交叉验证?

我正在尝试使用向量空间模型在 SVM Light 中构建一个 SVM 分类器。我有 1000 个文档和一个术语词典,我将使用它来矢量化每个文档。在 1000 个文档中,600 个用于我的训练集,而其余 400 个将平均分配(每个 200 个)用于我的交叉验证集和我的测试集。

现在假设我要使用我的 600 个训练集(使用 tf-idf 向量化)来训练我的 SVM 分类器,以便生成分类模型。

当我将模型应用于我的交叉验证集时,我会使用相同的 idf(因为模型对应于我的训练集),还是需要根据交叉验证集计算一个新的 idf?另外,如果我要将模型应用于单个文档,我将如何应用 idf,因为该集合仅包含 1 个文档?

0 投票
3 回答
792 浏览

matlab - 为什么我们需要在 multiSVM 方法中进行交叉验证来进行图像分类?

我是图像分类的新手,目前正在研究通过multisvm函数对四组图像进行分类的SVM(支持向量机)方法,我的算法每次训练和测试数据都是随机选择的,每次性能都不同。有人建议进行交叉验证,我不明白为什么我们需要交叉验证,这样做的主要目的是什么?. 我的实际数据集包括训练矩阵大小28×40000和测试矩阵大小17×40000。如何通过此数据集进行交叉验证对我有帮助。提前致谢 。

0 投票
1 回答
2622 浏览

python - sklearn - 对类子集进行精确评分的交叉验证

我有一个带有 3 个类别标签的分类数据集[0,1,2]

我想运行交叉验证并尝试几个估计器,但我对仅以 1 类和 2 类的精度评分感兴趣。我不关心 0 类的精度,我不希望它的评分摆脱简历优化。我也不关心任何课程的召回。换句话说,我想确保无论何时预测 1 或 2,它都具有很高的置信度。

所以问题是,我如何运行cross_val_score并告诉它的评分函数忽略 0 类的精度?

更新:根据接受的答案,这是一个示例答案代码:

0 投票
4 回答
6416 浏览

r - 如何在 CARET 中自定义模型以执行 PLS-[Classifer] 两步分类模型?

这个问题是这里同一线程的延续。以下是本书中的一个最小工作示例:

Wehrens R. Chemometrics 在自然科学和生命科学中使用 R 多元数据分析。第 1 版。海德堡;纽约:斯普林格。2011 年。(第 250 页)。

该示例取自这本书及其包ChemometricsWithR。它突出了使用交叉验证技术建模时的一些缺陷。

目标:
一种交叉验证的方法,使用相同的重复 CV 集执行PLS通常遵循的已知策略,LDA或类似逻辑回归、SVM、C5.0、CART 的表亲,具有caret打包的精神。因此,每次调用等待分类器之前都需要 PLS,以便对 PLS分数空间进行分类,而不是对观察结果本身进行分类。caret 包中最接近的方法是在PCA使用任何分类器建模之前作为预处理步骤。下面是一个 PLS-LDA 程序,只有一个交叉验证来测试分类器的性能,没有 10 倍 CV 或任何重复。下面的代码取自上述书中,但进行了一些更正,否则会引发错误:

输出:

但是,混淆矩阵与书中的不匹配,无论如何书中的代码确实坏了,但是这里的这个对我有用!

注:
虽然这只是一份 CV,但目的是先就这个方法达成一致,sd并将mean训练集应用到测试集上,PLUS 转化为基于特定 PC 数量的 PLS 分数ncomp。我希望这发生在插入符号中的每一轮简历中。如果作为代码的方法在这里是正确的,那么它可以作为一个最小工作示例的良好开端,同时修改 caret 包的代码。

旁注:
缩放和居中可能会非常混乱,我认为 R 中的一些 PLS 函数在内部进行缩放,有或没有居中,我不确定,所以在插入符号中构建自定义模型时应小心避免缺少或多个缩放或居中(我对这些东西保持警惕)。

多重居中/缩放的危险
下面的代码只是为了展示多重居中/缩放如何改变数据,这里只显示了居中,但同样的问题也适用于缩放。

输出:

如果我在本课程的某个地方遗漏了什么,请发表评论。谢谢。

0 投票
2 回答
30287 浏览

r - 主题模型:对数似然或困惑的交叉验证

我正在使用主题建模对文档进行聚类。我需要想出最佳的主题编号。因此,我决定对主题 10、20、...60 进行十倍交叉验证。

我已将我的语料库分成十批,并留出一批作为保留集。我已经使用 9 个批次(总共 180 个文档)运行了潜在狄利克雷分配 (LDA),主题为 10 到 60。现在,我必须计算保留集的困惑度或对数似然度。

我从 CV 的一次讨论中找到了这段代码。下面几行代码我真的看不懂。我有使用保留集(20 个文档)的 dtm 矩阵。但我不知道如何计算这个保留集的困惑度或对数似然度。


问题:

  1. 谁能向我解释一下 seq(2, 100, by =1) 在这里是什么意思?另外,美联社[21:30] 是什么意思?函数(k)在这里做什么?

    /li>
  2. 如果我想计算称为 dtm 的保持集的困惑度或对数似然度,是否有更好的代码?我知道有perplexity()logLik()功能,但由于我是新手,我无法弄清楚如何使用我的保持矩阵(称为 dtm)来实现它。

  3. 如何对包含 200 个文档的语料库进行十倍交叉验证?是否有我可以调用的现有代码?我caret为此目的找到了,但也无法弄清楚。

0 投票
1 回答
4341 浏览

machine-learning - 在 sklearn 中使用支持向量机时如何实际使用验证集

在使用 SVM 时,我发现在原始数据集上执行三向拆分是一种很好的做法,例如 70/15/15 拆分。

此拆分对应于训练的 %70、测试的 %15 和所谓的“验证”的 %15。

我很清楚为什么这是一个好的做法,但我不确定实际执行此操作所需的具体细节。许多在线资源讨论了重要性,但我似乎无法找到该过程的明确(或至少是算法)描述。例如,sklearn 在这里讨论它,但在给出任何可靠的工具之前就停止了。

这是我的想法:

  • 使用训练集训练算法
  • 使用测试集查找错误率
  • ?? 调整参数
  • 使用验证集再次获取错误率

如果有人能指出一个好的资源的方向,我将不胜感激。

0 投票
1 回答
4970 浏览

r - 在 R 中使用 lm 函数留下一个交叉验证

我有一个包含 506 行的数据集,我在其上执行 Leave-one-out 交叉验证,一旦我得到均方误差,我正在计算我发现的均方误差的平均值。每次我运行它都会改变。这是预期的吗?如果是这样,有人可以解释为什么每次我运行它都会改变吗?

为了留下一份简历,我先洗牌,df是数据框

然后,我将数据帧拆分为 506 个数据帧并将其发送到 lm() 并获取每个数据帧的 MSE(在本例中为每一行)

然后我取所有我得到的 MSE 的平均值。

每次我运行所有这些时,我都会得到不同的意思。这是预期的吗?

0 投票
2 回答
32445 浏览

r - glm() 模型的交叉验证

我正在尝试对我之前在 R 中构建的一些 glm 模型进行 10 倍交叉验证。尽管我已经阅读了很多帮助文件,但我cv.glm()对包中的函数有点困惑。boot当我提供以下公式时:

这里的“数据”参数是指整个数据集还是仅指测试集?

到目前为止,我看到的示例提供了“数据”参数作为测试集,但这并没有真正意义,例如为什么在同一个测试集上进行 10 折?他们都会给出完全相同的结果(我假设!)。

不幸的是?cv.glm,以一种模糊的方式解释它:

数据:包含数据的矩阵或数据框。行应该是案例,列对应于变量,其中之一是响应

我的另一个问题是关于$delta[1]结果的。这是 10 次试验的平均预测误差吗?如果我想得到每个折叠的错误怎么办?

这是我的脚本的样子:

0 投票
1 回答
1358 浏览

machine-learning - 来自 libsvm 的 100% 准确度

我正在使用 libSVM(带有线性内核)训练和交叉验证(10 倍)数据。

数据由 1800 个 fMRI 强度体素组成,表示为单个数据点。svm-train 的训练集文件中有大约 88 个数据点。

训练集文件如下所示:

+1 1:0.9 2:-0.2 ... 1800:0.1

-1 1:0.6 2:0.9 ... 1800:-0.98

...

我还应该提到我正在使用 svm-train 脚本(与 libSVM 包一起提供)。

问题是在运行 svm-train 时 - 结果是 100% 准确度!

这似乎并不能反映真实的分类结果!数据不是不平衡的,因为

#datapoints labeled +1 == #datpoints labeled -1

我还检查了缩放器(正确缩放),还尝试随机更改标签以查看它如何影响准确性 - 它从 100% 下降到 97.9%。

你能帮我理解这个问题吗?如果是这样,我该怎么做才能解决它?

谢谢,

盖尔星

0 投票
2 回答
1215 浏览

backpropagation - 使用验证集在神经网络中提前停止

我想使用早期停止方法来避免神经网络过度拟合。我已将我的数据集划分为 60-20-20

60 - 训练 20 - 验证集 20 - 测试集

我在实施提前停止时有疑问。

  1. 我们使用训练集更新一个时期的权重。我们使用训练集得到了网络错误。
  2. 我们需要计算验证集的误差。我们应该平均每个验证实例的所有错误吗?例如,假设我有 200 个验证实例。由于我没有更新权重,我将为每个实例计算误差。那么我们是否应该对所有验证实例进行平均并将其报告为验证错误?

谢谢,阿蒂什