1. 程式人生 > >Kaggle比賽之Artifical Neural Networks Applied to Taxi Destination Prediction程式碼整理

Kaggle比賽之Artifical Neural Networks Applied to Taxi Destination Prediction程式碼整理

Code of the winning entry to the Kaggle ECML/PKDD taxi destination competition. Our approach is described in our paper.

依賴性

我們使用了MILA實驗室的這些包:

  • Theano. 通用的gpu加速python數學庫,具有類似numpy的介面 (see [3, 4]). See http://deeplearning.net/software/theano/
  • Blocks.基於Theano的Python深度學習神經網路框架。 As Blocks evolves very rapidly, we suggest you use commit 1e0aca9171611be4df404129d91a991354e67730
    , which we had the code working on. See https://github.com/mila-udem/blocks
  • Fuel. A data pipelining framework for Blocks. Same that for Blocks, we suggest you use commit ed725a7ff9f3d080ef882d4ae7e4373c4984f35a. See https://github.com/mila-udem/fuel

對於均值漂移演算法使用的sklearn,而其他地方也使用了 numpy, cPickle and h5py .

結構

對存檔的python檔案做出簡要介紹:

  • config/*.py: 我們實驗的不同模型的配置檔案。其中 mlp_tgtcls_1_cswdtx_alexandre.py是結果最好的。
  • data/*.py : 與資料傳輸相關的檔案:
    • __init__.py 包含一些關於資料的一般統計資訊
    • csv_to_hdf5.py : 通過Fule將csv檔案轉化為hdfs檔案。
    • hdf5.py : 處理HDFS檔案的實用函式
    • init_valid.py : 初始化驗證集或者測試集(validation set)的HDF5檔案
    • make_valid_cut.py
      : 通過時間切分列表生成驗證集(validation set)。切分列表被儲存在python檔案中。路徑為 data/cuts/ (我們使用了一個切割檔案)
    • transformers.py : 通過Fuel,將訓練資料集轉化為模型可用的結構。
  • data_analysis/*.py : 通過scripts對資料集進行各種各樣的分析。
    • cluster_arrival.py : 通過script去生成均值漂移聚類的目的地中心點。產生了3392個聚類中心點。
  • model/*.py : 我們嘗試過的各種模型的資原始碼。
    • __init__.py 所有模型的公用程式碼,包含元資料嵌入程式碼。
    • mlp.py 所有MLP模型的公用程式碼
    • dest_mlp_tgtcls.py 輸出層使用聚類點的MLP目的地預測程式碼。
  • error.py 基於Haversine Distance的誤差計算函式。
  • ext_saveload.py 用於儲存和重新載入模型引數的塊擴充套件,防止訓練中斷。
  • ext_test.py在測試集上訓練模型,產生csv檔案輸出的塊擴充套件。
  • train.py 訓練和測試的主程式碼。主函式

如何重現得獎結果?

prepare.sh,助手指令碼,可以幫助執行1-6步並且做一些其他檢查。但是如果中途遇到錯誤,script將從頭開始執行。在訓練之前的2.4.5步耗時很長。

注意,有些指令碼希望儲存庫位於您的PYTHONPATH中(轉到儲存庫的根目錄,輸入’ export PYTHONPATH= ’ P W D : PYTHONPATH ‘)。

  1. Set the TAXI_PATH environment variable to the path of the folder containing the CSV files.設定‘TAXI_PATH’環境變數為包含CSV檔案的資料夾的路徑。
  2. 執行 data/csv_to_hdf5.py "$TAXI_PATH" "$TAXI_PATH/data.hdf5" 產生HDFS檔案 (儲存位置在TAXI_PATH下). 這個過程大約需要20分鐘。
  3. 執行 data/init_valid.py valid.hdf5 其初始化設定HDFS檔案的變數
  4. 執行 data/make_valid_cut.py test_times_0 生成驗證集(the validation set). 這個過程需要幾分鐘
  5. 執行 data_analysis/cluster_arrival.py 生成目的地位置聚類中心. 這個過程大約需要幾分鐘。
  6. 建立資料夾 model_data 和資料夾 output (next to the training script), which will receive respectively a regular save of the model parameters and many submission files generated from the model at a regular interval.它將分別接收定期儲存的模型引數和從模型生成的許多提交檔案。
  7. 執行 ./train.py dest_mlp_tgtcls_1_cswdtx_alexandre 訓練模型。每1000個迭代,輸出結果儲存在 output/ .在任何時間,使用三個 Ctrl+C 即可中斷模型. 訓練指令碼設定在10000次迭代後停止訓練 but a result file produced after less than 2 000 000 iterations is already the winning solution. We trained our model on a GeForce GTX 680 card and it took about an afternoon to generate the winning solution.
    When running the training script, set the following Theano flags environment variable to exploit GPU parallelism:
    THEANO_FLAGS=floatX=float32,device=gpu,optimizer=fast_run

*More information in this pdf