我是在正确的扫管笏吗?预测股价

时间:2015-07-05 18:52:11

标签: java neural-network encog

我用神经网络的输入数据和csv文件准备了csv文件,我可以测试我的神经网络。结果并不令人满意。我正在尝试增加/减少输入数据的大小。可能我错过了一些东西,如果有人可以提供一些技巧,我会很高兴。这是我的密码:

function squeakyClean(arr) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] == null || arr[i] == '') {
      arr.splice(i, 1);
    };
  };
  return arr;
}

我到目前为止尝试的是更改 //input data File file = new File("path to file"); CSVFormat format = new CSVFormat('.', ','); VersatileDataSource source = new CSVDataSource(file, false, format); VersatileMLDataSet data = new VersatileMLDataSet(source); data.getNormHelper().setFormat(format); ColumnDefinition wig20OpenN = data.defineSourceColumn("wig20OpenN", 0, ColumnType.continuous); (...) ColumnDefinition futureClose = data.defineSourceColumn("futureClose", 81, ColumnType.continuous); data.analyze(); data.defineSingleOutputOthersInput(futureClose); EncogModel model = new EncogModel(data); //TYPE_RBFNETWORK, TYPE_SVM, TYPE_NEAT, TYPE_FEEDFORWARD <- this type of method i was trying model.selectMethod(data, MLMethodFactory.TYPE_SVM); model.setReport(new ConsoleStatusReportable()); data.normalize(); model.holdBackValidation(0.001, true, 10); model.selectTrainingType(data); MLRegression bestMethod = (MLRegression)model.crossvalidate(20, true); // Display the training and validation errors. System.out.println( "Training error: " + model.calculateError(bestMethod, model.getTrainingDataset())); System.out.println( "Validation error: " + model.calculateError(bestMethod, model.getValidationDataset())); NormalizationHelper helper = data.getNormHelper(); File testingData = new File("path to testing file"); ReadCSV csv = new ReadCSV(testingData, false, format); String[] line = new String[81]; MLData input = helper.allocateInputVector(); while(csv.next()) { StringBuilder result = new StringBuilder(); for(int i = 0; i <81; i++){ line[i] = csv.get(i); } String correct = csv.get(81); helper.normalizeInputVector(line,input.getData(),false); MLData output = bestMethod.compute(input); String irisChosen = helper.denormalizeOutputVectorToString(output)[0]; result.append(Arrays.toString(line)); result.append(" -> predicted: "); result.append(irisChosen); result.append("(correct: "); result.append(correct); result.append(")"); System.out.println(result.toString()); } // Delete data file and shut down. filename.delete(); Encog.getInstance().shutdown(); ,但此处遇到问题,只有MLMethodFactoryTYPE_RBFNETWORKTYPE_SVMTYPE_NEAT此类型工作正常,例如,如果我将其更改为TYPE_FEEDFORWARD我有以下例外:

TYPE_PNN

好的我从文档中知道我应该使用这种方法:

Exception in thread "main" org.encog.EncogError: Please call selectTraining first to choose how to train.

但traningtype和triningArgs的字符串类型令人困惑。

最后一个问题是如何在训练后保存神经元,并加载它以检查训练数据?因为我想分开这个。

编辑:我忘了输入数据的大小是1500。

1 个答案:

答案 0 :(得分:2)

我看到你对你的结果不满意,但它相对较好。我建议你考虑为你的训练增加规模。你有81列,在你的输入行中我看到的数据如16519.1600,也是2315.94,甚至是-0.6388282285709328。对于神经网络,很难为这些不同的输入正确调整权重。
附:缩放也是列的规范化!正如书中通常描述的行标准化,但列的标准化也很重要。