2015-07-05 34 views
0

我準備了神經網絡輸入數據的csv文件,以及可以測試我的神經網絡的csv文件。結果並不令人滿意。我試圖增加/減少輸入數據的大小。也許我失去了一些東西,我會很高興,如果有人能的一些技巧等。這裏是我的encog代碼:我在右笏嗎?預測股票價格

//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_RBFNETWORKTYPE_SVMTYPE_NEATTYPE_FEEDFORWARD這種類型的正常工作,例如,如果我把它改成TYPE_PNN我有例外以下:

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

好吧,我從我應該使用這種方法的文檔知道:

selectTraining(VersatileMLDataSet dataset, String trainingType, String trainingArgs) 

但是,traningtype和triningArgs的字符串類型很混亂。

最後一個問題如何在訓練到文件後保存神經,並加載它來檢查訓練數據?因爲我想分開。

編輯:我忘了輸入數據的大小是1500

+0

你能介紹一下你的文本文件中有什麼嗎?什麼是標準化的結果? –

+0

從輸入或輸出?或兩者? – Pulkownik

+0

從這兩個文件 –

回答

2

我看你不滿意你的結果,但它是比較精細的。我建議你考慮在你的訓練中加入比例。你有81列,在你的輸入行中,我看到的數據如16519.1600,也是2315.94,甚至-0.6388282285709328。對於神經網絡來說,很難正確調整這些不同輸入的權重。
P.S.縮放也正常化的列!通常在書中描述的是對行進行歸一化,但對列進行歸一化也很重要。

+0

是的結果是好的,但我想更好,因爲有時預測值遠高於或低於正確的值。無論如何,我想出瞭如何保存規範化文件和它的外觀很好:http://pastebin.com/0vVP5WF3請看看,所以我不得不嘗試少數據或其他參數。感謝您的時間和幫助! – Pulkownik

+0

http://www.amazon.com/Cyber​​netic-Trading-Strategies-State-Art/dp/0471149209在本書中,建議您不要預測未來的價格,但使用神經網絡的未來指標值(例如移動平均線交叉)。本書中的另一個建議是與神經網絡一起加入一些交易策略,以提高交易策略的精確度。 –

+0

好的謝謝你的鏈接。加入某種交易策略意味着什麼?因爲我想實現的是在索引上獲得正確的方向,並且在該方向上打開兩個相反的位置。一個是指數短缺,另一個是該指數中的一批股票(這些股票將取決於另一個指標),例如如果神經工作預測上行方向,我將在指數上開40%,在指數上開60%指數中的股票。 – Pulkownik