为什么每次调用SplitWithPercentration时都会更改每套中的金额?

2024-10-02 18:14:51 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python2.7.6和Pybrain0.3。。。在

我写了一个函数来创建一个数据集来训练我的神经网络。在

这是一个datasets/sequentialdataset.html" rel="nofollow">sequential data set,我希望其中75%是培训数据,25%是测试数据(我相信这是一个公认的合理分割):

from pybrain.datasets import SequentialDataSet

def create_data_sets(rows):

    ds = SequentialDataSet(13, 1)
    last_id = -1
    count = 0

    for row in rows:

        current_id = int(row[14])
        if current_id != last_id:
            count += 1
            ds.newSequence()
        last_id = current_id

        ds.appendLinked(
            [int(row[0]) / 10000.0, 
             int(row[1]) / 10000.0, 
             int(row[2]) / 20.0, 
             int(row[3]) / 9.0, 
             int(row[4]) / 9.0, 
             int(row[5]) / 6.0, 
             int(row[6]) / 6.0,
             float(row[7]), 
             float(row[8]), 
             float(row[9]), 
             float(row[10]), 
             int(row[11]) / 6.0,
             int(row[12]) / 6.0], 
             [float(row[13])])

    test_data, train_data = ds.splitWithProportion(0.25)        
    return (test_data, train_data, count)

很抱歉,我调用了两次与该查询相同的列名称:

^{pr2}$

看看我得到的输出(实际上,每次我运行它,它都会改变):

400 1222 203
386 1236 203

这让我很困惑-为什么每次都会以不同的方式拆分数据?在

由于数据集的顺序没有改变,所以每次调用它时,它都会执行相同的操作。这里面有魔法吗?在


更新

下面是另一个更简单的例子:

from pybrain import datasets

d = datasets.SequentialDataSet(0, 1)
d.addSample([],[0])
d.addSample([],[1])
d.addSample([],[0])
d.addSample([],[1])
d.addSample([],[0])
d.addSample([],[1])
d.newSequence()
d.addSample([],[0])
d.addSample([],[1])
d.addSample([],[0])
d.addSample([],[1])
d.addSample([],[0])
d.addSample([],[1])
d.newSequence()
d.addSample([],[0])
d.addSample([],[0])
d.addSample([],[1])
d.addSample([],[0])
d.addSample([],[1])
d.newSequence()
d.addSample([],[0])
d.addSample([],[1])
d.addSample([],[0])
d.addSample([],[1])
d.addSample([],[0])
d.addSample([],[1])

for _ in range(2):
    test, train = d.splitWithProportion(0.25)
    print str(len(test)) + " " + str(len(train))

我有时会得到输出

5 18
6 17

似乎每次调用splitWithProportion时,它都会对集合进行不同的取整,所以我猜它一定是对序列进行随机化,或者是别的什么——正如你所看到的,我没有调整数据。我不明白为什么要这么做。在


Tags: 数据testiddatacountdstrainfloat
1条回答
网友
1楼 · 发布于 2024-10-02 18:14:51

我相信你的问题与你如何创造新的序列有关

        if current_id != last_id:
        count += 1
        ds.newSequence()

我已经验证了以下每次调用都返回一致的结果“618”。在

^{pr2}$

编辑: 使用SequentialDataSet需要记住的是,拆分是沿着序列进行的,而不是单个样本。因此,对于4个序列,0.25的拆分将给出1个测试序列和3个训练序列。如果序列的长度不一样,那么您将得到不同的len()测试和训练结果。对于顺序数据集,一切都按预期工作。在

相关问题 更多 >