【问题标题】:How to split data X,Y in to train and test?如何将数据 X、Y 拆分为训练和测试?
【发布时间】:2020-11-20 18:53:27
【问题描述】:

大家好)我正在开发股票预测应用程序(大学项目)以训练 SVM 模型我需要将我的数据拆分为训练和测试集x_train, x_test, y_train, y_test 我得到了需要拆分的 X 和 Y 双重集合。在 python 中,我知道有一些函数可以轻松地将数据拆分为四个变量x_train, x_test, y_train, y_test,但我在 c# 中找不到这样的东西。在 Microsoft 官方网站上,我只找到了这个示例,但正如我所提到的,它只接受一个变量,在我的情况下,SVM 将无法正常工作。 我听说过 microsoft ML 项目,但它只拆分一个变量。 我已经尝试过这个示例,但正如我所提到的,它只接受一个验证并提供训练和测试拆分

var mlContext = new MLContext();// Creating the ML.Net IHostEnvironment
var dataview = mlContext.Data.LoadFromEnumerable(examples);

var split = mlContext.Data.TrainTestSplit(dataview, testFraction: 0.1, samplingKeyColumnName: "Group");

var trainSet = mlContext.Data.CreateEnumerable<DataPoint>(split.TrainSet, reuseRowObject: false);

var testSet = mlContext.Data.CreateEnumerable<DataPoint>(split.TestSet,reuseRowObject: false);

也许有人遇到过这个问题?

【问题讨论】:

    标签: c# .net machine-learning svm ml.net


    【解决方案1】:

    数据集创建

    首先将 X、Y 列合并为每个训练和测试的单个数据集(或 IDataView)。

    然后,您可以拆分任一合并数据集以创建额外的保留/验证拆分。在 stock 数据集中,我会将训练集拆分为 train+validation(或在 train 上使用交叉验证),以避免测试数据集中的泄漏并确保测试数据集中的指标准确。

    泄漏

    希望您的 samplingKeyColumnName: "Group" 列能够部分保护您免受随机拆分时间序列数据集的泄漏。拆分将导致您的模型在比您的评分数据新旧的数据点上学习。泄漏会人为地导致您的指标高于预期。基于股票代码的拆分仍然会在某种程度上泄漏,例如,了解 GOOG 的未来,将为我提供有关预测 MSFT 的有用信息。见:https://en.wikipedia.org/wiki/Leakage_(machine_learning)

    通常,您希望根据时间对时间序列数据集进行拆分(训练中最旧、验证中较新、测试中最新);或使用滚动源交叉验证。

    【讨论】:

      猜你喜欢
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2019-06-30
      相关资源
      最近更新 更多