【问题标题】:How to choose RandomState in train_test_split? [closed]如何在 train_test_split 中选择 RandomState? [关闭]
【发布时间】:2018-09-08 18:06:46
【问题描述】:

我了解如何使用随机状态将数据随机拆分为训练集和测试集。正如预期的那样,我的算法每次更改时都会给出不同的准确性。现在我必须在我的大学提交一份报告,我无法理解最终的准确性。我应该选择我得到的最大准确度吗?或者我应该使用不同的 RandomStates 运行它,然后取其平均值?还是别的什么?

【问题讨论】:

  • 他们没有在问题或答案的初始部分指定特定的随机状态吗?
  • 最终,您正在构建一个模型,希望它对新的、看不见的数据具有强大的性能。如果你建立了一个好的模型,那么准确率不应该因随机状态而变化太大。如果您看到剧烈波动,那么您的模型并不好。在我看来,报告最大准确度会很糟糕,因为它不能代表真实世界的预期性能。我的建议是取一些运行次数的平均值或做 k 倍 CV,但也要报告标准偏差。
  • @MaxU 其实这是我自己选择的一个小项目。这是我大学三年级课程的一部分。

标签: python pandas machine-learning scikit-learn svm


【解决方案1】:

最好的方法是取平均准确率……但是 如果您根据特定的数据集拆分训练模型以产生最佳分类(可能被认为是过度拟合),那么您可以获得最佳准确度让我详细说明:

您可以训练模型进行几次迭代,testtrain 集的准确度会有所不同,但会呈上升趋势(准确度会上升) 您可以训练模型进行大量迭代并仅在此迭代中准确度提高时才更新权重,从而构建最佳模型...

但是您应该注意观察测试集的准确性以避免过度拟合,即当模型可以以非常准确性进行预测时在 train 集上,但在 test 集上的准确度非常

在开始时模型会学习并且(testtrain)准确度都会提高,经过大量训练后train准确度会提高(或保持不变)但测试准确度会下降

您可以查看this以进一步阅读

建议你看看k-fold cross validation,我觉得这个方法最适合这种场景

【讨论】:

  • "但如果您根据特定数据集拆分训练模型以产生最佳分类(可能被视为过拟合),则可以获得最佳准确度。请详细说明。
  • @PrabhjeetSingh,在原始答案中添加了一些解释,希望对您有所帮助
【解决方案2】:

就我个人而言,我将random_state 设置为一个特定数字(通常是42),所以如果我看到程序准确性的变化,我知道这是不是由数据拆分方式引起的.

但是,这可能会导致我的网络过度适应特定的拆分。 IE。我调整了我的网络,使其适用于该拆分,但不一定适用于不同的拆分。因此,我认为最好在提交代码时使用随机种子,以便审阅者知道您没有过度适应该特定状态。

要使用sklearn.train_test_split 执行此操作,您可以简单地不提供random_state,它会使用np.random 随机选择一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-04
    • 2013-09-03
    • 1970-01-01
    • 2017-01-24
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    相关资源
    最近更新 更多