java—如何将DataSeterator拆分为测试和训练迭代器?

vyu0f0g1  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(344)

我正在使用deeplearning4j和datavec,我有一个datasetiterator对象,它代表我的所有数据,这是一个时间序列。我如何将其划分为训练和测试迭代器?我检查了一下,datasetiterator类的方法被弃用了。谢谢您。

kkih6yb8

kkih6yb81#

遍历您的 DataSetIterator 对每一个 DataSet 输入,创建两个新的 DataSets ,分别用于列车和试验。
关键是使用splittestandtrain方法,它接受 double fractionTrain 这将指定要训练的数据量(其余的要测试)。方法有不同的重载,所以您可以选择最适合您需要的重载。如果您希望将所有的train和test数据集添加到一个公共迭代器中,可以将它们存储在两个不同的列表中,稍后再获取它们相应的迭代器。比如:

List<DataSet> trainList = new ArrayList<>();
List<DataSet> testList= new ArrayList<>();

while (yourDataSetIterator.hasNext())
{
    DataSet ds = yourDataSetIterator.next();
    SplitTestAndTrain splData = ds.splitTestAndTrain(0.5); //half for each         
    DataSet trainDs = splData.getTrain();
    trainList.add(trainDs);
    DataSet testDs  = splData.getTest();
    testList.add(testDs);
    (...)
}

Iterator<DataSet> trainIterator = trainList.iterator(); 
Iterator<DataSet> testIterator  = testList.iterator();

因为我不太了解这个库的具体细节,所以这个示例只创建了“basic” iterators . 这可能是定制的,因此您可以创建 DataSetIterators 相反。
请注意,您可能还需要在拆分数据集之前对其进行洗牌( ds.shuffle() ). 你可以在这里找到一些例子
如果您希望以特定的方式拆分它,您可以标记不同的条目并找到测试数据集的最大索引;然后,打电话 splitTestAndTrain(int max) 方法,该方法具体拆分有关max参数的数据集。这个 sortByLabel 方法在这里也很有用。 Adam Gibson 对其他机制的意见提出了很好的建议,以期分裂市场 DataSetIterator ,这似乎也是一种“更自然”的方式 DataSetIteratorSplitter .
它提供了 getTrainIterator() 以及 getTestIterator() 方法返回库的特定迭代器, DataSetIterator .

相关问题