如何将数据X,Y拆分为训练集和测试集?

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

var mlContext = new MLContext();// Creating the ML.Net IHostEnvironmentvar 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),用于训练和测试的每个数据集。

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

数据泄漏

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

通常,对于时间序列数据集,你希望基于时间进行拆分(最旧的在训练集中,较新的在验证集中,最新的在测试集中);或者使用滚动原点交叉验证。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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