通过两次拟合提升树获得不同的值

我使用R包adabag对一个(大型)数据集(140个观测值和3845个预测变量)拟合提升树。

我使用相同的参数和相同的数据集执行了两次该方法,每次返回的准确率值不同(我定义了一个简单的函数,用于给定数据集计算准确率)。这是我犯了错误,还是每次拟合时返回不同的准确率值是正常的?这个问题是否因为数据集很大而引起的?

返回给定预测值和真实测试集值的准确率的函数。

    err<-function(pred_d, test_d){  abs.acc<-sum(pred_d==test_d)  rel.acc<-abs.acc/length(test_d)  v<-c(abs.acc,rel.acc)  return(v)}

新编辑(2017年1月9日):关于上述背景的重要后续问题。

据我所知,我的代码中没有使用任何“伪随机对象”(如生成随机数等),因为我主要是使用rpart包拟合树,使用adabag包对大型数据集拟合提升树。你能解释一下,当我执行代码时,“伪随机性”是如何进入的吗?

编辑1:使用R包rpart时也出现了类似现象。

编辑2:在iris数据集上使用rpart拟合树时没有出现类似现象。


回答:

如果你没有设置种子(使用set.seed()),你没有理由期望得到相同的结果。

如果你在做统计分析而不是信息安全,设置什么样的种子并不重要。你可以用几个不同的种子运行模型,以检查其敏感性。你只需要在涉及伪随机性的任何操作之前设置种子。大多数人会在代码开始时设置种子。

这在统计学中无处不在;它影响所有语言中所有概率模型和过程。

请注意,在信息安全的情况下,重要的是要有一个(伪)随机种子,这个种子不能轻易通过蛮力攻击被猜出,因为(简而言之)知道安全程序内部使用的种子值为其被黑开了方便之门。在科学和统计学中,情况恰恰相反——你和你分享代码/研究的任何人都应该知道种子,以确保可重复性。

https://en.wikipedia.org/wiki/Random_seed

http://www.grasshopper3d.com/forum/topics/what-are-random-seed-values

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注