{"nbformat_minor": 1, "metadata": {"kernelspec": {"language": "python", "display_name": "Python 3", "name": "python3"}, "language_info": {"file_extension": ".py", "version": "3.6.1", "mimetype": "text/x-python", "pygments_lexer": "ipython3", "codemirror_mode": {"version": 3, "name": "ipython"}, "nbconvert_exporter": "python", "name": "python"}}, "cells": [{"execution_count": null, "outputs": [], "cell_type": "code", "metadata": {"_cell_guid": "4b1df200-9655-482b-b44c-7c71839897e2", "_execution_state": "idle", "_uuid": "0a4a3144c5f8abe4c1b6c935e9d8d30d7f834ac2"}, "source": ["\n", "from sklearn import *\n", "import sklearn\n", "import pandas as pd\n", "import numpy as np\n", "import xgboost as xgb\n", "\n", "train = pd.read_csv('../input/stage1_labels.csv') \n", "test = pd.read_csv('../input/stage1_sample_submission.csv')\n", "\n", "trainp = train.copy()\n", "trainp['Id'] = trainp['Id'].map(lambda x: x.split('_')[1])\n", "piv = pd.pivot_table(trainp, columns='Id', values='Probability', aggfunc='mean', fill_value=0)\n", "d = pd.DataFrame.to_dict(piv)\n", "#from https://www.kaggle.com/philippsp/baseline-lb-0-29089\n", "d['Zone9']['Probability'] = 0.05\n", "\n", "y = train['Probability'].values\n", "pid = test['Id'].values\n", "\n", "df_all = pd.concat((train, test), axis=0, ignore_index=True)\n", "df_all['len'] = df_all['Id'].map(len)\n", "\n", "for i in range(38):\n", "    df_all['c'+str(i)] = df_all['Id'].map(lambda x: str(x[i]))\n", "df_all['c38'] = df_all['Id'].map(lambda x: str(x[i]) if len(x)==39 else '')\n", "df_all = df_all.drop(['Id','Probability','len'], axis=1)\n", "\n", "for c in df_all.columns:\n", "    if df_all[c].dtype == 'object':\n", "        lbl = preprocessing.LabelEncoder()\n", "        df_all[c] = lbl.fit_transform(df_all[c].values)\n", "        #print(c, len(df_all[c].unique()))\n", "\n", "train = df_all.iloc[:len(train)]\n", "test = df_all.iloc[len(train):]\n", "\n", "params = {\n", "    'eta': 0.02,\n", "    'max_depth': 5,\n", "    'objective': 'reg:linear',\n", "    'eval_metric': 'logloss',\n", "    'seed': 12,\n", "    'silent': True\n", "}\n", "\n", "fold = 5\n", "for i in range(fold):\n", "    x1, x2, y1, y2 = model_selection.train_test_split(train, y, test_size=0.18, random_state=i)\n", "    watchlist = [(xgb.DMatrix(x1, y1), 'train'), (xgb.DMatrix(x2, y2), 'valid')]\n", "    model = xgb.train(params, xgb.DMatrix(x1, y1), 1000,  watchlist, verbose_eval=50, early_stopping_rounds=50)\n", "    if i != 0:\n", "        pred += model.predict(xgb.DMatrix(test), ntree_limit=model.best_ntree_limit)\n", "    else:\n", "        pred = model.predict(xgb.DMatrix(test), ntree_limit=model.best_ntree_limit)\n", "pred /= fold\n", "submission = pd.DataFrame(pred, columns=['Probability'])\n", "submission['Id'] = pid\n", "submission['Probability'] += submission['Id'].map(lambda x: d[str(x).split('_')[1]]['Probability'])*3\n", "submission['Probability'] /= 4\n", "submission.to_csv('submission_xgb.csv', index=False)\n"]}], "nbformat": 4}