【问题标题】:Cross-validation in PybrainPybrain 中的交叉验证
【发布时间】:2015-05-13 10:07:39
【问题描述】:

我正在尝试找出在 pybrain 中进行 5 折交叉验证的正确方法。我浏览了他们的文档,但这并没有帮助。我在网上找到了以下两个版本的代码:

在一个问题here中找到这个。

net = pybrain.tools.shortcuts.buildNetwork(5, 8, 1)
trainer = BackpropTrainer(net, ds)
evaluation = ModuleValidator.classificationPerformance(trainer.module, ds)
validator = CrossValidator(trainer=trainer, dataset=trainer.ds, n_folds=5, valfunc=evaluation)
print(validator.validate())

错误:
评估 = ModuleValidator.classificationPerformance(trainer.module, ds)

文件“.../pybrain/tools/validation.py”,第 168 行,在分类性能数据集中)

文件“.../pybrain/tools/validation.py”,第 204 行,验证中 返回值函数(输出,目标)

文件“.../pybrain/tools/validation.py”,第 33 行,分类性能 返回浮点(n_correct)/浮点(len(输出))

TypeError: 只有长度为 1 的数组可以转换为 Python 标量

还有第二个here

  modval = ModuleValidator()
  for i in range(1000):
      trainer.trainEpochs(1)
      trainer.trainOnDataset(dataset=trndata)
      cv = CrossValidator( trainer, trndata, n_folds=5, valfunc=modval.MSE )
      print "MSE %f @ %i" %( cv.validate(), i )

错误 - trainer.train()

文件“.../rprop.py”,第 43 行,在火车中 对于 self.ds._provideSequences() 中的 seq:

AttributeError: 'NoneType' 对象没有属性 '_provideSequences'

我去源代码试图追踪错误的原因,但无法弄清楚我需要更改什么。任何帮助表示赞赏。

当我通过简单地将数据集分为 3 部分(训练、验证和测试)来运行我的代码时,它运行良好。只有当我尝试实现 k 折交叉验证时,我才会遇到这些错误。

【问题讨论】:

标签: python cross-validation pybrain


【解决方案1】:

这似乎对我有用:

import numpy as np

from processdata import process_data
from pybrain.datasets import ClassificationDataSet
from pybrain.datasets import SupervisedDataSet
from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
from pybrain.supervised.trainers import BackpropTrainer

n=FeedForwardNetwork()

#Define Layers
inLayer= LinearLayer(200)
hiddenLayer= SigmoidLayer(100)
outLayer = LinearLayer(1)

#Add layers to the neural net module
n.addInputModule(inLayer)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)

#Define Connections
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)

#add connections to the module
n.addConnection(in_to_hidden)
n.addConnection(hidden_to_out)
#make ready
n.sortModules()

#Define Trainer
trainer = BackpropTrainer( n, dataset=ds, momentum=0.1, verbose=True, weightdecay=0.005)

#perform crossvalidation
from pyBrain.tools.validation import CrossValidator
cv=CrossValidator(trainer=trainer, dataset=ds, n_folds=5) #creates a crossvalidator instance
CrossValidator.validate(cv) #calls the validate() function in CrossValidator to return results

它应该输出每个折叠的错误。

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2018-03-09
    • 2018-06-13
    • 2012-01-13
    • 2014-08-19
    • 2015-05-27
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多