如何拆分数据 X、Y 进行训练和测试?
How to split data X,Y in to train and test?
大家好)我正在开发股票预测应用程序(大学项目)以训练
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);
也许有人遇到过这个问题?
数据集创建
首先合并您的 X、Y 列以形成每个训练和测试的单个数据集(或 IDataView)。
然后您可以拆分任一合并数据集以创建额外的 holdout/validation 拆分。在股票数据集中,我将训练集拆分为训练+验证(或在训练上使用交叉验证)以避免测试数据集中的泄漏并确保测试数据集中的指标准确。
泄漏
希望您的 samplingKeyColumnName: "Group"
专栏能部分保护您免受随机拆分时间序列数据集的泄漏。拆分将导致您的模型在比您的评分数据更新和更旧的数据点上学习。泄漏会人为地导致您的指标高于预期。基于股票代码的拆分仍然会在某种程度上泄露,例如,了解 GOOG 的未来,将为我提供有关预测 MSFT 的有用信息。参见:https://en.wikipedia.org/wiki/Leakage_(machine_learning)
通常,您希望根据时间序列数据集的时间进行拆分(训练中最旧,验证中较新,测试中最新);或使用滚动源交叉验证。
大家好)我正在开发股票预测应用程序(大学项目)以训练
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);
也许有人遇到过这个问题?
数据集创建
首先合并您的 X、Y 列以形成每个训练和测试的单个数据集(或 IDataView)。
然后您可以拆分任一合并数据集以创建额外的 holdout/validation 拆分。在股票数据集中,我将训练集拆分为训练+验证(或在训练上使用交叉验证)以避免测试数据集中的泄漏并确保测试数据集中的指标准确。
泄漏
希望您的 samplingKeyColumnName: "Group"
专栏能部分保护您免受随机拆分时间序列数据集的泄漏。拆分将导致您的模型在比您的评分数据更新和更旧的数据点上学习。泄漏会人为地导致您的指标高于预期。基于股票代码的拆分仍然会在某种程度上泄露,例如,了解 GOOG 的未来,将为我提供有关预测 MSFT 的有用信息。参见:https://en.wikipedia.org/wiki/Leakage_(machine_learning)
通常,您希望根据时间序列数据集的时间进行拆分(训练中最旧,验证中较新,测试中最新);或使用滚动源交叉验证。