{"cells":[
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV f\n"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "import sys\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.ensemble import RandomForestClassifier, BaggingClassifier\nfrom sklearn.metrics import accuracy_score\n\nimport xgboost as xgb"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train_cols = ['site_name', 'user_location_region', 'is_package', 'srch_adults_cnt', 'srch_children_cnt', 'srch_destination_id', 'hotel_market', 'hotel_country', 'hotel_cluster']\ntrain = pd.DataFrame(columns=train_cols)\ntrain_chunk = pd.read_csv('../input/train.csv', chunksize=100000)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "for chunk in train_chunk:\n    train = pd.concat( [ train, chunk[chunk['is_booking']==1][train_cols] ] )"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "train.head()\ntrain_X = train[['site_name', 'user_location_region', 'is_package', 'srch_adults_cnt', 'srch_children_cnt', 'srch_destination_id', 'hotel_market', 'hotel_country']].values\ntrain_y = train['hotel_cluster'].values"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "#rf = RandomForestClassifier()\n#clf = BaggingClassifier(rf)\nclf = xgb.XGBClassifier(max_depth=5, n_estimators=10, learning_rate=0.05)\nclf.fit(train_X, train_y)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "test_y = np.array([])\ntest_chunk = pd.read_csv('../input/test.csv', chunksize=50000)\n\nfor i, chunk in enumerate(test_chunk):\n    test_X = chunk[['site_name', 'user_location_region', 'is_package', 'srch_adults_cnt', 'srch_children_cnt', 'srch_destination_id', 'hotel_market', 'hotel_country']].values\n    if i > 0:\n        test_y = np.concatenate( [test_y, clf.predict_proba(test_X)])\n    else:\n        test_y = clf.predict_proba(test_X)\n    print(i)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "def get5Best(x):    \n    return \" \".join([str(int(z)) for z in x.argsort()[::-1][:5]])\nsubmit = pd.read_csv('../input/sample_submission.csv')\nsubmit['hotel_cluster'] = np.apply_along_axis(get5Best, 1, test_y)\nsubmit.head()\nsubmit.to_csv('submission_20160418_ent_1.csv', index=False)"
 }
],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}}, "nbformat": 4, "nbformat_minor": 0}