我写了一个函数来创建一个数据集来训练我的神经网络。在
这是一个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
时,它都会对集合进行不同的取整,所以我猜它一定是对序列进行随机化,或者是别的什么——正如你所看到的,我没有调整数据。我不明白为什么要这么做。在
我相信你的问题与你如何创造新的序列有关
我已经验证了以下每次调用都返回一致的结果“618”。在
^{pr2}$编辑: 使用SequentialDataSet需要记住的是,拆分是沿着序列进行的,而不是单个样本。因此,对于4个序列,0.25的拆分将给出1个测试序列和3个训练序列。如果序列的长度不一样,那么您将得到不同的len()测试和训练结果。对于顺序数据集,一切都按预期工作。在
相关问题 更多 >
编程相关推荐