我用神经网络的输入数据和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();
,但此处遇到问题,只有MLMethodFactory
,TYPE_RBFNETWORK
,TYPE_SVM
,TYPE_NEAT
此类型工作正常,例如,如果我将其更改为TYPE_FEEDFORWARD
我有以下例外:
TYPE_PNN
好的我从文档中知道我应该使用这种方法:
Exception in thread "main" org.encog.EncogError: Please call selectTraining first to choose how to train.
但traningtype和triningArgs的字符串类型令人困惑。
最后一个问题是如何在训练后保存神经元,并加载它以检查训练数据?因为我想分开这个。
编辑:我忘了输入数据的大小是1500。
答案 0 :(得分:2)
我看到你对你的结果不满意,但它相对较好。我建议你考虑为你的训练增加规模。你有81列,在你的输入行中我看到的数据如16519.1600,也是2315.94,甚至是-0.6388282285709328。对于神经网络,很难为这些不同的输入正确调整权重。
附:缩放也是列的规范化!正如书中通常描述的行标准化,但列的标准化也很重要。