{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 데모"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 라이브러리 import 및 설정"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:38:53.774831Z",
"start_time": "2020-10-05T08:38:53.486186Z"
}
},
"outputs": [],
"source": [
"%reload_ext autoreload\n",
"%autoreload 2\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:53:10.431515Z",
"start_time": "2020-10-05T08:53:10.398638Z"
}
},
"outputs": [],
"source": [
"from lightgbm import LGBMClassifier\n",
"from matplotlib import pyplot as plt\n",
"from matplotlib import rcParams\n",
"import numpy as np\n",
"import optuna.integration.lightgbm as lgb\n",
"from pathlib import Path\n",
"import pandas as pd\n",
"from sklearn.metrics import accuracy_score\n",
"from sklearn.model_selection import StratifiedKFold, train_test_split\n",
"import seaborn as sns\n",
"import warnings"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:38:55.047271Z",
"start_time": "2020-10-05T08:38:55.018323Z"
}
},
"outputs": [],
"source": [
"rcParams['figure.figsize'] = (16, 8)\n",
"plt.style.use('fivethirtyeight')\n",
"pd.set_option('max_columns', 100)\n",
"pd.set_option(\"display.precision\", 4)\n",
"warnings.simplefilter('ignore')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 학습데이터 로드"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[03-pandas-eda.ipynb](https://github.com/kaggler-tv/dku-kaggle-class/blob/master/notebook/03-pandas-eda.ipynb)에서 생성한 `feature.csv` 피처파일 사용"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:38:55.079180Z",
"start_time": "2020-10-05T08:38:55.050994Z"
}
},
"outputs": [],
"source": [
"data_dir = Path('../data/dacon-dku')\n",
"feature_dir = Path('../build/feature')\n",
"val_dir = Path('../build/val')\n",
"tst_dir = Path('../build/tst')\n",
"sub_dir = Path('../build/sub')\n",
"\n",
"trn_file = data_dir / 'train.csv'\n",
"tst_file = data_dir / 'test.csv'\n",
"sample_file = data_dir / 'sample_submission.csv'\n",
"\n",
"target_col = 'class'\n",
"n_fold = 5\n",
"n_class = 3\n",
"seed = 42"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:38:55.109220Z",
"start_time": "2020-10-05T08:38:55.081365Z"
}
},
"outputs": [],
"source": [
"algo_name = 'lgb_optuna'\n",
"feature_name = 'feature'\n",
"model_name = f'{algo_name}_{feature_name}'\n",
"\n",
"feature_file = feature_dir / f'{feature_name}.csv'\n",
"p_val_file = val_dir / f'{model_name}.val.csv'\n",
"p_tst_file = tst_dir / f'{model_name}.tst.csv'\n",
"sub_file = sub_dir / f'{model_name}.csv'"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:38:56.480522Z",
"start_time": "2020-10-05T08:38:55.111305Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(400000, 20)\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" z | \n",
" redshift | \n",
" dered_u | \n",
" dered_g | \n",
" dered_r | \n",
" dered_i | \n",
" dered_z | \n",
" nObserve | \n",
" airmass_u | \n",
" class | \n",
" d_dered_u | \n",
" d_dered_g | \n",
" d_dered_r | \n",
" d_dered_i | \n",
" d_dered_z | \n",
" d_dered_ig | \n",
" d_dered_zg | \n",
" d_dered_rz | \n",
" d_dered_iz | \n",
" d_obs_det | \n",
"
\n",
" \n",
" id | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 16.9396 | \n",
" -8.1086e-05 | \n",
" 23.1243 | \n",
" 20.2578 | \n",
" 18.9551 | \n",
" 17.6321 | \n",
" 16.9089 | \n",
" 2.9444 | \n",
" 1.1898 | \n",
" 0.0 | \n",
" -0.1397 | \n",
" -0.0790 | \n",
" -0.0544 | \n",
" -0.0403 | \n",
" -0.0307 | \n",
" -2.6257 | \n",
" -3.3488 | \n",
" 2.0462 | \n",
" 0.7232 | \n",
" -15.0556 | \n",
"
\n",
" \n",
" 1 | \n",
" 13.1689 | \n",
" 4.5061e-03 | \n",
" 14.9664 | \n",
" 14.0045 | \n",
" 13.4114 | \n",
" 13.2363 | \n",
" 13.1347 | \n",
" 0.6931 | \n",
" 1.2533 | \n",
" 1.0 | \n",
" -0.0857 | \n",
" -0.0574 | \n",
" -0.0410 | \n",
" -0.0322 | \n",
" -0.0343 | \n",
" -0.7683 | \n",
" -0.8698 | \n",
" 0.2767 | \n",
" 0.1016 | \n",
" -0.3069 | \n",
"
\n",
" \n",
" 2 | \n",
" 15.3500 | \n",
" 4.7198e-04 | \n",
" 16.6076 | \n",
" 15.6866 | \n",
" 15.4400 | \n",
" 15.3217 | \n",
" 15.2961 | \n",
" 1.0986 | \n",
" 1.0225 | \n",
" 0.0 | \n",
" -0.1787 | \n",
" -0.1388 | \n",
" -0.0963 | \n",
" -0.0718 | \n",
" -0.0540 | \n",
" -0.3649 | \n",
" -0.3905 | \n",
" 0.1440 | \n",
" 0.0257 | \n",
" -0.9014 | \n",
"
\n",
" \n",
" 3 | \n",
" 19.6346 | \n",
" 5.8143e-06 | \n",
" 25.3536 | \n",
" 20.9947 | \n",
" 20.0873 | \n",
" 19.7947 | \n",
" 19.5552 | \n",
" 1.6094 | \n",
" 1.2054 | \n",
" 0.0 | \n",
" -0.3070 | \n",
" -0.1941 | \n",
" -0.1339 | \n",
" -0.1003 | \n",
" -0.0795 | \n",
" -1.2000 | \n",
" -1.4395 | \n",
" 0.5321 | \n",
" 0.2395 | \n",
" -1.3906 | \n",
"
\n",
" \n",
" 4 | \n",
" 17.9826 | \n",
" -3.3247e-05 | \n",
" 23.7714 | \n",
" 20.4338 | \n",
" 18.8630 | \n",
" 18.1903 | \n",
" 17.8759 | \n",
" 2.6391 | \n",
" 1.1939 | \n",
" 0.0 | \n",
" -0.6820 | \n",
" -0.2653 | \n",
" -0.1794 | \n",
" -0.1339 | \n",
" -0.1067 | \n",
" -2.2436 | \n",
" -2.5579 | \n",
" 0.9871 | \n",
" 0.3144 | \n",
" -9.3609 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" z redshift dered_u dered_g dered_r dered_i dered_z \\\n",
"id \n",
"0 16.9396 -8.1086e-05 23.1243 20.2578 18.9551 17.6321 16.9089 \n",
"1 13.1689 4.5061e-03 14.9664 14.0045 13.4114 13.2363 13.1347 \n",
"2 15.3500 4.7198e-04 16.6076 15.6866 15.4400 15.3217 15.2961 \n",
"3 19.6346 5.8143e-06 25.3536 20.9947 20.0873 19.7947 19.5552 \n",
"4 17.9826 -3.3247e-05 23.7714 20.4338 18.8630 18.1903 17.8759 \n",
"\n",
" nObserve airmass_u class d_dered_u d_dered_g d_dered_r d_dered_i \\\n",
"id \n",
"0 2.9444 1.1898 0.0 -0.1397 -0.0790 -0.0544 -0.0403 \n",
"1 0.6931 1.2533 1.0 -0.0857 -0.0574 -0.0410 -0.0322 \n",
"2 1.0986 1.0225 0.0 -0.1787 -0.1388 -0.0963 -0.0718 \n",
"3 1.6094 1.2054 0.0 -0.3070 -0.1941 -0.1339 -0.1003 \n",
"4 2.6391 1.1939 0.0 -0.6820 -0.2653 -0.1794 -0.1339 \n",
"\n",
" d_dered_z d_dered_ig d_dered_zg d_dered_rz d_dered_iz d_obs_det \n",
"id \n",
"0 -0.0307 -2.6257 -3.3488 2.0462 0.7232 -15.0556 \n",
"1 -0.0343 -0.7683 -0.8698 0.2767 0.1016 -0.3069 \n",
"2 -0.0540 -0.3649 -0.3905 0.1440 0.0257 -0.9014 \n",
"3 -0.0795 -1.2000 -1.4395 0.5321 0.2395 -1.3906 \n",
"4 -0.1067 -2.2436 -2.5579 0.9871 0.3144 -9.3609 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv(feature_file, index_col=0)\n",
"print(df.shape)\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:38:56.553068Z",
"start_time": "2020-10-05T08:38:56.482710Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(320000,) (320000, 19) (80000, 19)\n"
]
}
],
"source": [
"y = df[target_col].values[:320000]\n",
"df.drop(target_col, axis=1, inplace=True)\n",
"trn = df.iloc[:320000].values\n",
"tst = df.iloc[320000:].values\n",
"feature_name = df.columns.tolist()\n",
"print(y.shape, trn.shape, tst.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Hyperparameter Tuning"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:38:56.690768Z",
"start_time": "2020-10-05T08:38:56.556065Z"
}
},
"outputs": [],
"source": [
"X_trn, X_val, y_trn, y_val = train_test_split(trn, y, test_size=.2, random_state=seed)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:38:56.723614Z",
"start_time": "2020-10-05T08:38:56.693535Z"
}
},
"outputs": [],
"source": [
"params = {\n",
" \"objective\": \"multiclass\",\n",
" \"metric\": \"multi_logloss\",\n",
" \"num_class\": 3,\n",
" \"n_estimators\": 1000,\n",
" \"subsample_freq\": 1,\n",
" \"lambda_l1\": 0.,\n",
" \"lambda_l2\": 0.,\n",
" \"random_state\": seed,\n",
" \"n_jobs\": -1,\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:51:30.834862Z",
"start_time": "2020-10-05T08:38:56.725742Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[I 2020-10-05 01:38:56,754] A new study created in memory with name: no-name-6a091e98-0e25-46bd-a749-ed1a9211b661\n",
"feature_fraction, val_score: inf: 0%| | 0/7 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.162292\tvalid_1's multi_logloss: 0.173038\n",
"[200]\ttraining's multi_logloss: 0.147386\tvalid_1's multi_logloss: 0.166751\n",
"[300]\ttraining's multi_logloss: 0.138664\tvalid_1's multi_logloss: 0.165094\n",
"[400]\ttraining's multi_logloss: 0.131529\tvalid_1's multi_logloss: 0.164127\n",
"Early stopping, best iteration is:\n",
"[409]\ttraining's multi_logloss: 0.130959\tvalid_1's multi_logloss: 0.164059\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction, val_score: 0.164059: 14%|#4 | 1/7 [00:11<01:09, 11.58s/it][I 2020-10-05 01:39:08,337] Trial 0 finished with value: 0.16405917331427203 and parameters: {'feature_fraction': 0.7}. Best is trial 0 with value: 0.16405917331427203.\n",
"feature_fraction, val_score: 0.164059: 14%|#4 | 1/7 [00:11<01:09, 11.58s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.164111\tvalid_1's multi_logloss: 0.174182\n",
"[200]\ttraining's multi_logloss: 0.148453\tvalid_1's multi_logloss: 0.16733\n",
"[300]\ttraining's multi_logloss: 0.139438\tvalid_1's multi_logloss: 0.165289\n",
"[400]\ttraining's multi_logloss: 0.132501\tvalid_1's multi_logloss: 0.164311\n",
"[500]\ttraining's multi_logloss: 0.126573\tvalid_1's multi_logloss: 0.163827\n",
"Early stopping, best iteration is:\n",
"[492]\ttraining's multi_logloss: 0.127006\tvalid_1's multi_logloss: 0.163806\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction, val_score: 0.163806: 29%|##8 | 2/7 [00:25<01:01, 12.38s/it][I 2020-10-05 01:39:22,584] Trial 1 finished with value: 0.16380641954973035 and parameters: {'feature_fraction': 0.6}. Best is trial 1 with value: 0.16380641954973035.\n",
"feature_fraction, val_score: 0.163806: 29%|##8 | 2/7 [00:25<01:01, 12.38s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.16075\tvalid_1's multi_logloss: 0.17161\n",
"Early stopping, best iteration is:\n",
"[105]\ttraining's multi_logloss: 0.159637\tvalid_1's multi_logloss: 0.170937\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction, val_score: 0.163806: 43%|####2 | 3/7 [00:29<00:39, 9.91s/it][I 2020-10-05 01:39:26,752] Trial 2 finished with value: 0.17093706343651485 and parameters: {'feature_fraction': 0.8999999999999999}. Best is trial 1 with value: 0.16380641954973035.\n",
"feature_fraction, val_score: 0.163806: 43%|####2 | 3/7 [00:29<00:39, 9.91s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.165649\tvalid_1's multi_logloss: 0.175603\n",
"[200]\ttraining's multi_logloss: 0.149261\tvalid_1's multi_logloss: 0.167375\n",
"[300]\ttraining's multi_logloss: 0.140256\tvalid_1's multi_logloss: 0.165219\n",
"[400]\ttraining's multi_logloss: 0.133317\tvalid_1's multi_logloss: 0.164255\n",
"[500]\ttraining's multi_logloss: 0.127339\tvalid_1's multi_logloss: 0.163815\n",
"Early stopping, best iteration is:\n",
"[531]\ttraining's multi_logloss: 0.125601\tvalid_1's multi_logloss: 0.163628\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction, val_score: 0.163628: 57%|#####7 | 4/7 [00:47<00:36, 12.16s/it][I 2020-10-05 01:39:44,146] Trial 3 finished with value: 0.16362763441902556 and parameters: {'feature_fraction': 0.5}. Best is trial 3 with value: 0.16362763441902556.\n",
"feature_fraction, val_score: 0.163628: 57%|#####7 | 4/7 [00:47<00:36, 12.16s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.160287\tvalid_1's multi_logloss: 0.171711\n",
"Early stopping, best iteration is:\n",
"[130]\ttraining's multi_logloss: 0.154765\tvalid_1's multi_logloss: 0.169293\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction, val_score: 0.163628: 71%|#######1 | 5/7 [00:57<00:23, 11.58s/it][I 2020-10-05 01:39:54,386] Trial 4 finished with value: 0.16929348050036375 and parameters: {'feature_fraction': 1.0}. Best is trial 3 with value: 0.16362763441902556.\n",
"feature_fraction, val_score: 0.163628: 71%|#######1 | 5/7 [00:57<00:23, 11.58s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.161738\tvalid_1's multi_logloss: 0.173028\n",
"Early stopping, best iteration is:\n",
"[114]\ttraining's multi_logloss: 0.158324\tvalid_1's multi_logloss: 0.170882\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction, val_score: 0.163628: 86%|########5 | 6/7 [01:02<00:09, 9.64s/it][I 2020-10-05 01:39:59,485] Trial 5 finished with value: 0.1708820358219462 and parameters: {'feature_fraction': 0.8}. Best is trial 3 with value: 0.16362763441902556.\n",
"feature_fraction, val_score: 0.163628: 86%|########5 | 6/7 [01:02<00:09, 9.64s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.170758\tvalid_1's multi_logloss: 0.180113\n",
"[200]\ttraining's multi_logloss: 0.152064\tvalid_1's multi_logloss: 0.168935\n",
"[300]\ttraining's multi_logloss: 0.14251\tvalid_1's multi_logloss: 0.165979\n",
"[400]\ttraining's multi_logloss: 0.135389\tvalid_1's multi_logloss: 0.164762\n",
"Early stopping, best iteration is:\n",
"[464]\ttraining's multi_logloss: 0.131513\tvalid_1's multi_logloss: 0.164176\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction, val_score: 0.163628: 100%|##########| 7/7 [01:21<00:00, 12.34s/it][I 2020-10-05 01:40:18,148] Trial 6 finished with value: 0.16417630259249286 and parameters: {'feature_fraction': 0.4}. Best is trial 3 with value: 0.16362763441902556.\n",
"feature_fraction, val_score: 0.163628: 100%|##########| 7/7 [01:21<00:00, 11.63s/it]\n",
"num_leaves, val_score: 0.163628: 0%| | 0/20 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.150085\tvalid_1's multi_logloss: 0.16878\n",
"[200]\ttraining's multi_logloss: 0.130683\tvalid_1's multi_logloss: 0.16386\n",
"Early stopping, best iteration is:\n",
"[262]\ttraining's multi_logloss: 0.122812\tvalid_1's multi_logloss: 0.163395\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.163395: 5%|5 | 1/20 [00:09<03:08, 9.90s/it][I 2020-10-05 01:40:28,057] Trial 7 finished with value: 0.1633948316587122 and parameters: {'num_leaves': 67}. Best is trial 7 with value: 0.1633948316587122.\n",
"num_leaves, val_score: 0.163395: 5%|5 | 1/20 [00:09<03:08, 9.90s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.13437\tvalid_1's multi_logloss: 0.165749\n",
"Early stopping, best iteration is:\n",
"[183]\ttraining's multi_logloss: 0.11309\tvalid_1's multi_logloss: 0.162617\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162617: 10%|# | 2/20 [00:18<02:51, 9.50s/it][I 2020-10-05 01:40:36,638] Trial 8 finished with value: 0.16261715791253684 and parameters: {'num_leaves': 128}. Best is trial 8 with value: 0.16261715791253684.\n",
"num_leaves, val_score: 0.162617: 10%|# | 2/20 [00:18<02:51, 9.50s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.147506\tvalid_1's multi_logloss: 0.168034\n",
"[200]\ttraining's multi_logloss: 0.127448\tvalid_1's multi_logloss: 0.163461\n",
"Early stopping, best iteration is:\n",
"[248]\ttraining's multi_logloss: 0.120832\tvalid_1's multi_logloss: 0.16294\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162617: 15%|#5 | 3/20 [00:29<02:48, 9.89s/it][I 2020-10-05 01:40:47,429] Trial 9 finished with value: 0.16294025794772124 and parameters: {'num_leaves': 75}. Best is trial 8 with value: 0.16261715791253684.\n",
"num_leaves, val_score: 0.162617: 15%|#5 | 3/20 [00:29<02:48, 9.89s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.113822\tvalid_1's multi_logloss: 0.163663\n",
"Early stopping, best iteration is:\n",
"[142]\ttraining's multi_logloss: 0.0983114\tvalid_1's multi_logloss: 0.162338\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162338: 20%|## | 4/20 [00:43<02:58, 11.16s/it][I 2020-10-05 01:41:01,552] Trial 10 finished with value: 0.16233830008380942 and parameters: {'num_leaves': 243}. Best is trial 10 with value: 0.16233830008380942.\n",
"num_leaves, val_score: 0.162338: 20%|## | 4/20 [00:43<02:58, 11.16s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.115402\tvalid_1's multi_logloss: 0.163998\n",
"Early stopping, best iteration is:\n",
"[165]\ttraining's multi_logloss: 0.093376\tvalid_1's multi_logloss: 0.162661\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162338: 25%|##5 | 5/20 [00:53<02:44, 10.95s/it][I 2020-10-05 01:41:12,018] Trial 11 finished with value: 0.1626607908036498 and parameters: {'num_leaves': 233}. Best is trial 10 with value: 0.16233830008380942.\n",
"num_leaves, val_score: 0.162338: 25%|##5 | 5/20 [00:53<02:44, 10.95s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.121582\tvalid_1's multi_logloss: 0.164385\n",
"Early stopping, best iteration is:\n",
"[165]\ttraining's multi_logloss: 0.101027\tvalid_1's multi_logloss: 0.162603\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162338: 30%|### | 6/20 [01:03<02:27, 10.51s/it][I 2020-10-05 01:41:21,487] Trial 12 finished with value: 0.16260300356495658 and parameters: {'num_leaves': 195}. Best is trial 10 with value: 0.16233830008380942.\n",
"num_leaves, val_score: 0.162338: 30%|### | 6/20 [01:03<02:27, 10.51s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.11569\tvalid_1's multi_logloss: 0.163916\n",
"Early stopping, best iteration is:\n",
"[154]\ttraining's multi_logloss: 0.0968509\tvalid_1's multi_logloss: 0.162224\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162224: 35%|###5 | 7/20 [01:13<02:14, 10.34s/it][I 2020-10-05 01:41:31,435] Trial 13 finished with value: 0.16222355114345732 and parameters: {'num_leaves': 231}. Best is trial 13 with value: 0.16222355114345732.\n",
"num_leaves, val_score: 0.162224: 35%|###5 | 7/20 [01:13<02:14, 10.34s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.112095\tvalid_1's multi_logloss: 0.16367\n",
"Early stopping, best iteration is:\n",
"[142]\ttraining's multi_logloss: 0.0962171\tvalid_1's multi_logloss: 0.162379\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162224: 40%|#### | 8/20 [01:22<02:00, 10.05s/it][I 2020-10-05 01:41:40,807] Trial 14 finished with value: 0.16237915241116044 and parameters: {'num_leaves': 255}. Best is trial 13 with value: 0.16222355114345732.\n",
"num_leaves, val_score: 0.162224: 40%|#### | 8/20 [01:22<02:00, 10.05s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.119369\tvalid_1's multi_logloss: 0.164238\n",
"Early stopping, best iteration is:\n",
"[158]\ttraining's multi_logloss: 0.100064\tvalid_1's multi_logloss: 0.162377\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162224: 45%|####5 | 9/20 [01:31<01:47, 9.79s/it][I 2020-10-05 01:41:49,978] Trial 15 finished with value: 0.16237721560017102 and parameters: {'num_leaves': 208}. Best is trial 13 with value: 0.16222355114345732.\n",
"num_leaves, val_score: 0.162224: 45%|####5 | 9/20 [01:31<01:47, 9.79s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.129841\tvalid_1's multi_logloss: 0.165067\n",
"[200]\ttraining's multi_logloss: 0.103666\tvalid_1's multi_logloss: 0.162631\n",
"Early stopping, best iteration is:\n",
"[195]\ttraining's multi_logloss: 0.104686\tvalid_1's multi_logloss: 0.162603\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162224: 50%|##### | 10/20 [01:41<01:37, 9.79s/it][I 2020-10-05 01:41:59,780] Trial 16 finished with value: 0.16260282042518934 and parameters: {'num_leaves': 150}. Best is trial 13 with value: 0.16222355114345732.\n",
"num_leaves, val_score: 0.162224: 50%|##### | 10/20 [01:41<01:37, 9.79s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.112095\tvalid_1's multi_logloss: 0.16367\n",
"Early stopping, best iteration is:\n",
"[142]\ttraining's multi_logloss: 0.0962171\tvalid_1's multi_logloss: 0.162379\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162224: 55%|#####5 | 11/20 [01:51<01:29, 9.90s/it][I 2020-10-05 01:42:09,928] Trial 17 finished with value: 0.16237915241116044 and parameters: {'num_leaves': 255}. Best is trial 13 with value: 0.16222355114345732.\n",
"num_leaves, val_score: 0.162224: 55%|#####5 | 11/20 [01:51<01:29, 9.90s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.125475\tvalid_1's multi_logloss: 0.16473\n",
"Early stopping, best iteration is:\n",
"[156]\ttraining's multi_logloss: 0.108027\tvalid_1's multi_logloss: 0.162763\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162224: 60%|###### | 12/20 [02:01<01:18, 9.78s/it][I 2020-10-05 01:42:19,440] Trial 18 finished with value: 0.16276280677618915 and parameters: {'num_leaves': 172}. Best is trial 13 with value: 0.16222355114345732.\n",
"num_leaves, val_score: 0.162224: 60%|###### | 12/20 [02:01<01:18, 9.78s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.112095\tvalid_1's multi_logloss: 0.16367\n",
"Early stopping, best iteration is:\n",
"[142]\ttraining's multi_logloss: 0.0962171\tvalid_1's multi_logloss: 0.162379\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162224: 65%|######5 | 13/20 [02:11<01:10, 10.02s/it][I 2020-10-05 01:42:30,015] Trial 19 finished with value: 0.16237915241116044 and parameters: {'num_leaves': 255}. Best is trial 13 with value: 0.16222355114345732.\n",
"num_leaves, val_score: 0.162224: 65%|######5 | 13/20 [02:11<01:10, 10.02s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.118248\tvalid_1's multi_logloss: 0.164028\n",
"Early stopping, best iteration is:\n",
"[159]\ttraining's multi_logloss: 0.0983824\tvalid_1's multi_logloss: 0.162364\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162224: 70%|####### | 14/20 [02:23<01:02, 10.42s/it][I 2020-10-05 01:42:41,378] Trial 20 finished with value: 0.16236442115335945 and parameters: {'num_leaves': 215}. Best is trial 13 with value: 0.16222355114345732.\n",
"num_leaves, val_score: 0.162224: 70%|####### | 14/20 [02:23<01:02, 10.42s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.11743\tvalid_1's multi_logloss: 0.164095\n",
"Early stopping, best iteration is:\n",
"[158]\ttraining's multi_logloss: 0.0974664\tvalid_1's multi_logloss: 0.162342\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162224: 75%|#######5 | 15/20 [02:34<00:53, 10.68s/it][I 2020-10-05 01:42:52,664] Trial 21 finished with value: 0.1623416323842142 and parameters: {'num_leaves': 220}. Best is trial 13 with value: 0.16222355114345732.\n",
"num_leaves, val_score: 0.162224: 75%|#######5 | 15/20 [02:34<00:53, 10.68s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.11553\tvalid_1's multi_logloss: 0.16354\n",
"Early stopping, best iteration is:\n",
"[155]\ttraining's multi_logloss: 0.0964272\tvalid_1's multi_logloss: 0.162102\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162102: 80%|######## | 16/20 [02:45<00:43, 10.88s/it][I 2020-10-05 01:43:04,015] Trial 22 finished with value: 0.16210203791715908 and parameters: {'num_leaves': 232}. Best is trial 22 with value: 0.16210203791715908.\n",
"num_leaves, val_score: 0.162102: 80%|######## | 16/20 [02:45<00:43, 10.88s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.176055\tvalid_1's multi_logloss: 0.18274\n",
"[200]\ttraining's multi_logloss: 0.159619\tvalid_1's multi_logloss: 0.171477\n",
"Early stopping, best iteration is:\n",
"[215]\ttraining's multi_logloss: 0.158132\tvalid_1's multi_logloss: 0.170663\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162102: 85%|########5 | 17/20 [02:53<00:29, 9.97s/it][I 2020-10-05 01:43:11,860] Trial 23 finished with value: 0.1706630522857091 and parameters: {'num_leaves': 19}. Best is trial 22 with value: 0.16210203791715908.\n",
"num_leaves, val_score: 0.162102: 85%|########5 | 17/20 [02:53<00:29, 9.97s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.124357\tvalid_1's multi_logloss: 0.16471\n",
"Early stopping, best iteration is:\n",
"[166]\ttraining's multi_logloss: 0.104317\tvalid_1's multi_logloss: 0.162603\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162102: 90%|######### | 18/20 [03:05<00:20, 10.39s/it][I 2020-10-05 01:43:23,219] Trial 24 finished with value: 0.16260324998196404 and parameters: {'num_leaves': 179}. Best is trial 22 with value: 0.16210203791715908.\n",
"num_leaves, val_score: 0.162102: 90%|######### | 18/20 [03:05<00:20, 10.39s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114898\tvalid_1's multi_logloss: 0.163815\n",
"Early stopping, best iteration is:\n",
"[153]\ttraining's multi_logloss: 0.096125\tvalid_1's multi_logloss: 0.162262\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162102: 95%|#########5| 19/20 [03:16<00:10, 10.78s/it][I 2020-10-05 01:43:34,904] Trial 25 finished with value: 0.1622623114693665 and parameters: {'num_leaves': 237}. Best is trial 22 with value: 0.16210203791715908.\n",
"num_leaves, val_score: 0.162102: 95%|#########5| 19/20 [03:16<00:10, 10.78s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.135095\tvalid_1's multi_logloss: 0.165697\n",
"Early stopping, best iteration is:\n",
"[173]\ttraining's multi_logloss: 0.115912\tvalid_1's multi_logloss: 0.16288\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"num_leaves, val_score: 0.162102: 100%|##########| 20/20 [03:26<00:00, 10.33s/it][I 2020-10-05 01:43:44,206] Trial 26 finished with value: 0.16287975139034827 and parameters: {'num_leaves': 125}. Best is trial 22 with value: 0.16210203791715908.\n",
"num_leaves, val_score: 0.162102: 100%|##########| 20/20 [03:26<00:00, 10.30s/it]\n",
"bagging, val_score: 0.162102: 0%| | 0/10 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.115842\tvalid_1's multi_logloss: 0.163836\n",
"Early stopping, best iteration is:\n",
"[159]\ttraining's multi_logloss: 0.0949288\tvalid_1's multi_logloss: 0.162088\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"bagging, val_score: 0.162088: 10%|# | 1/10 [00:10<01:38, 10.96s/it][I 2020-10-05 01:43:55,179] Trial 27 finished with value: 0.1620877679754371 and parameters: {'bagging_fraction': 0.8713477624436328, 'bagging_freq': 5}. Best is trial 27 with value: 0.1620877679754371.\n",
"bagging, val_score: 0.162088: 10%|# | 1/10 [00:10<01:38, 10.96s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.115669\tvalid_1's multi_logloss: 0.164101\n",
"Early stopping, best iteration is:\n",
"[157]\ttraining's multi_logloss: 0.0951842\tvalid_1's multi_logloss: 0.162401\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"bagging, val_score: 0.162088: 20%|## | 2/10 [00:21<01:26, 10.82s/it][I 2020-10-05 01:44:05,681] Trial 28 finished with value: 0.16240084080295847 and parameters: {'bagging_fraction': 0.8886806944631855, 'bagging_freq': 5}. Best is trial 27 with value: 0.1620877679754371.\n",
"bagging, val_score: 0.162088: 20%|## | 2/10 [00:21<01:26, 10.82s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.117368\tvalid_1's multi_logloss: 0.164542\n",
"Early stopping, best iteration is:\n",
"[149]\ttraining's multi_logloss: 0.0989798\tvalid_1's multi_logloss: 0.163361\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"bagging, val_score: 0.162088: 30%|### | 3/10 [00:31<01:13, 10.51s/it][I 2020-10-05 01:44:15,479] Trial 29 finished with value: 0.16336100572898682 and parameters: {'bagging_fraction': 0.5681932661011941, 'bagging_freq': 2}. Best is trial 27 with value: 0.1620877679754371.\n",
"bagging, val_score: 0.162088: 30%|### | 3/10 [00:31<01:13, 10.51s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.115516\tvalid_1's multi_logloss: 0.163795\n",
"Early stopping, best iteration is:\n",
"[155]\ttraining's multi_logloss: 0.0961473\tvalid_1's multi_logloss: 0.162374\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"bagging, val_score: 0.162088: 40%|#### | 4/10 [00:42<01:05, 10.85s/it][I 2020-10-05 01:44:27,115] Trial 30 finished with value: 0.1623740442728427 and parameters: {'bagging_fraction': 0.9775794746513194, 'bagging_freq': 7}. Best is trial 27 with value: 0.1620877679754371.\n",
"bagging, val_score: 0.162088: 40%|#### | 4/10 [00:42<01:05, 10.85s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.1162\tvalid_1's multi_logloss: 0.164003\n",
"Early stopping, best iteration is:\n",
"[148]\ttraining's multi_logloss: 0.0985721\tvalid_1's multi_logloss: 0.162386\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"bagging, val_score: 0.162088: 50%|##### | 5/10 [00:53<00:53, 10.74s/it][I 2020-10-05 01:44:37,594] Trial 31 finished with value: 0.16238600797292838 and parameters: {'bagging_fraction': 0.7757330938405489, 'bagging_freq': 5}. Best is trial 27 with value: 0.1620877679754371.\n",
"bagging, val_score: 0.162088: 50%|##### | 5/10 [00:53<00:53, 10.74s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.118878\tvalid_1's multi_logloss: 0.164902\n",
"Early stopping, best iteration is:\n",
"[134]\ttraining's multi_logloss: 0.105612\tvalid_1's multi_logloss: 0.163776\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"bagging, val_score: 0.162088: 60%|###### | 6/10 [01:02<00:40, 10.24s/it][I 2020-10-05 01:44:46,683] Trial 32 finished with value: 0.16377610052662436 and parameters: {'bagging_fraction': 0.4255315208181163, 'bagging_freq': 2}. Best is trial 27 with value: 0.1620877679754371.\n",
"bagging, val_score: 0.162088: 60%|###### | 6/10 [01:02<00:40, 10.24s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.116585\tvalid_1's multi_logloss: 0.164377\n",
"Early stopping, best iteration is:\n",
"[144]\ttraining's multi_logloss: 0.0997517\tvalid_1's multi_logloss: 0.163076\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"bagging, val_score: 0.162088: 70%|####### | 7/10 [01:12<00:30, 10.19s/it][I 2020-10-05 01:44:56,743] Trial 33 finished with value: 0.16307643077787534 and parameters: {'bagging_fraction': 0.7525176997746762, 'bagging_freq': 7}. Best is trial 27 with value: 0.1620877679754371.\n",
"bagging, val_score: 0.162088: 70%|####### | 7/10 [01:12<00:30, 10.19s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.115468\tvalid_1's multi_logloss: 0.1639\n",
"Early stopping, best iteration is:\n",
"[155]\ttraining's multi_logloss: 0.0959966\tvalid_1's multi_logloss: 0.162265\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"bagging, val_score: 0.162088: 80%|######## | 8/10 [01:23<00:20, 10.40s/it][I 2020-10-05 01:45:07,637] Trial 34 finished with value: 0.1622653832358846 and parameters: {'bagging_fraction': 0.9861921068861398, 'bagging_freq': 4}. Best is trial 27 with value: 0.1620877679754371.\n",
"bagging, val_score: 0.162088: 80%|######## | 8/10 [01:23<00:20, 10.40s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.117607\tvalid_1's multi_logloss: 0.164824\n",
"Early stopping, best iteration is:\n",
"[149]\ttraining's multi_logloss: 0.0992214\tvalid_1's multi_logloss: 0.163512\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"bagging, val_score: 0.162088: 90%|######### | 9/10 [01:33<00:10, 10.26s/it][I 2020-10-05 01:45:17,564] Trial 35 finished with value: 0.1635119517922178 and parameters: {'bagging_fraction': 0.6114784429051928, 'bagging_freq': 6}. Best is trial 27 with value: 0.1620877679754371.\n",
"bagging, val_score: 0.162088: 90%|######### | 9/10 [01:33<00:10, 10.26s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.115761\tvalid_1's multi_logloss: 0.164004\n",
"Early stopping, best iteration is:\n",
"[165]\ttraining's multi_logloss: 0.0930721\tvalid_1's multi_logloss: 0.162492\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"bagging, val_score: 0.162088: 100%|##########| 10/10 [01:44<00:00, 10.67s/it][I 2020-10-05 01:45:29,181] Trial 36 finished with value: 0.1624918021211458 and parameters: {'bagging_fraction': 0.8671070660255529, 'bagging_freq': 3}. Best is trial 27 with value: 0.1620877679754371.\n",
"bagging, val_score: 0.162088: 100%|##########| 10/10 [01:44<00:00, 10.50s/it]\n",
"feature_fraction_stage2, val_score: 0.162088: 0%| | 0/6 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.115842\tvalid_1's multi_logloss: 0.163836\n",
"Early stopping, best iteration is:\n",
"[159]\ttraining's multi_logloss: 0.0949288\tvalid_1's multi_logloss: 0.162088\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction_stage2, val_score: 0.162088: 17%|#6 | 1/6 [00:10<00:54, 10.87s/it][I 2020-10-05 01:45:40,073] Trial 37 finished with value: 0.1620877679754371 and parameters: {'feature_fraction': 0.516}. Best is trial 37 with value: 0.1620877679754371.\n",
"feature_fraction_stage2, val_score: 0.162088: 17%|#6 | 1/6 [00:10<00:54, 10.87s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.120798\tvalid_1's multi_logloss: 0.166608\n",
"Early stopping, best iteration is:\n",
"[187]\ttraining's multi_logloss: 0.0909902\tvalid_1's multi_logloss: 0.163141\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction_stage2, val_score: 0.162088: 33%|###3 | 2/6 [00:23<00:45, 11.46s/it][I 2020-10-05 01:45:52,891] Trial 38 finished with value: 0.16314079654316815 and parameters: {'feature_fraction': 0.42}. Best is trial 37 with value: 0.1620877679754371.\n",
"feature_fraction_stage2, val_score: 0.162088: 33%|###3 | 2/6 [00:23<00:45, 11.46s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.117827\tvalid_1's multi_logloss: 0.164479\n",
"Early stopping, best iteration is:\n",
"[144]\ttraining's multi_logloss: 0.101044\tvalid_1's multi_logloss: 0.1624\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction_stage2, val_score: 0.162088: 50%|##### | 3/6 [00:34<00:33, 11.12s/it][I 2020-10-05 01:46:03,220] Trial 39 finished with value: 0.16240010191948395 and parameters: {'feature_fraction': 0.484}. Best is trial 37 with value: 0.1620877679754371.\n",
"feature_fraction_stage2, val_score: 0.162088: 50%|##### | 3/6 [00:34<00:33, 11.12s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.117827\tvalid_1's multi_logloss: 0.164479\n",
"Early stopping, best iteration is:\n",
"[144]\ttraining's multi_logloss: 0.101044\tvalid_1's multi_logloss: 0.1624\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction_stage2, val_score: 0.162088: 67%|######6 | 4/6 [00:44<00:21, 10.87s/it][I 2020-10-05 01:46:13,504] Trial 40 finished with value: 0.16240010191948395 and parameters: {'feature_fraction': 0.45199999999999996}. Best is trial 37 with value: 0.1620877679754371.\n",
"feature_fraction_stage2, val_score: 0.162088: 67%|######6 | 4/6 [00:44<00:21, 10.87s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114238\tvalid_1's multi_logloss: 0.163253\n",
"Early stopping, best iteration is:\n",
"[147]\ttraining's multi_logloss: 0.0974959\tvalid_1's multi_logloss: 0.162036\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction_stage2, val_score: 0.162036: 83%|########3 | 5/6 [00:54<00:10, 10.73s/it][I 2020-10-05 01:46:23,910] Trial 41 finished with value: 0.16203598423148052 and parameters: {'feature_fraction': 0.58}. Best is trial 41 with value: 0.16203598423148052.\n",
"feature_fraction_stage2, val_score: 0.162036: 83%|########3 | 5/6 [00:54<00:10, 10.73s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.115842\tvalid_1's multi_logloss: 0.163836\n",
"Early stopping, best iteration is:\n",
"[159]\ttraining's multi_logloss: 0.0949288\tvalid_1's multi_logloss: 0.162088\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"feature_fraction_stage2, val_score: 0.162036: 100%|##########| 6/6 [01:05<00:00, 10.83s/it][I 2020-10-05 01:46:34,966] Trial 42 finished with value: 0.1620877679754371 and parameters: {'feature_fraction': 0.5479999999999999}. Best is trial 41 with value: 0.16203598423148052.\n",
"feature_fraction_stage2, val_score: 0.162036: 100%|##########| 6/6 [01:05<00:00, 10.96s/it]\n",
"regularization_factors, val_score: 0.162036: 0%| | 0/20 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.11423\tvalid_1's multi_logloss: 0.163224\n",
"Early stopping, best iteration is:\n",
"[137]\ttraining's multi_logloss: 0.100596\tvalid_1's multi_logloss: 0.16214\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 5%|5 | 1/20 [00:10<03:14, 10.23s/it][I 2020-10-05 01:46:45,213] Trial 43 finished with value: 0.16213993619831954 and parameters: {'lambda_l1': 2.737377867689276e-07, 'lambda_l2': 9.151388396395205e-05}. Best is trial 43 with value: 0.16213993619831954.\n",
"regularization_factors, val_score: 0.162036: 5%|5 | 1/20 [00:10<03:14, 10.23s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.13737\tvalid_1's multi_logloss: 0.165753\n",
"[200]\ttraining's multi_logloss: 0.115654\tvalid_1's multi_logloss: 0.162753\n",
"Early stopping, best iteration is:\n",
"[201]\ttraining's multi_logloss: 0.115488\tvalid_1's multi_logloss: 0.162735\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 10%|# | 2/20 [00:24<03:23, 11.33s/it][I 2020-10-05 01:46:59,115] Trial 44 finished with value: 0.16273540769580838 and parameters: {'lambda_l1': 5.616299389204908, 'lambda_l2': 9.911250368472304}. Best is trial 43 with value: 0.16213993619831954.\n",
"regularization_factors, val_score: 0.162036: 10%|# | 2/20 [00:24<03:23, 11.33s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.123488\tvalid_1's multi_logloss: 0.163763\n",
"Early stopping, best iteration is:\n",
"[170]\ttraining's multi_logloss: 0.10233\tvalid_1's multi_logloss: 0.162141\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 15%|#5 | 3/20 [00:36<03:16, 11.54s/it][I 2020-10-05 01:47:11,149] Trial 45 finished with value: 0.16214066259839668 and parameters: {'lambda_l1': 2.1519596207674128, 'lambda_l2': 4.6125717451863005e-08}. Best is trial 43 with value: 0.16213993619831954.\n",
"regularization_factors, val_score: 0.162036: 15%|#5 | 3/20 [00:36<03:16, 11.54s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.1238\tvalid_1's multi_logloss: 0.164048\n",
"Early stopping, best iteration is:\n",
"[155]\ttraining's multi_logloss: 0.106531\tvalid_1's multi_logloss: 0.162269\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 20%|## | 4/20 [00:50<03:16, 12.26s/it][I 2020-10-05 01:47:25,073] Trial 46 finished with value: 0.16226872763053296 and parameters: {'lambda_l1': 1.5311561670646566e-08, 'lambda_l2': 6.882260323572732}. Best is trial 43 with value: 0.16213993619831954.\n",
"regularization_factors, val_score: 0.162036: 20%|## | 4/20 [00:50<03:16, 12.26s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114194\tvalid_1's multi_logloss: 0.163385\n",
"Early stopping, best iteration is:\n",
"[141]\ttraining's multi_logloss: 0.099175\tvalid_1's multi_logloss: 0.162368\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 25%|##5 | 5/20 [01:09<03:37, 14.50s/it][I 2020-10-05 01:47:44,803] Trial 47 finished with value: 0.1623678901503559 and parameters: {'lambda_l1': 0.0005448057993686177, 'lambda_l2': 5.121791403463975e-08}. Best is trial 43 with value: 0.16213993619831954.\n",
"regularization_factors, val_score: 0.162036: 25%|##5 | 5/20 [01:09<03:37, 14.50s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.11424\tvalid_1's multi_logloss: 0.163359\n",
"Early stopping, best iteration is:\n",
"[155]\ttraining's multi_logloss: 0.0949821\tvalid_1's multi_logloss: 0.162132\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 30%|### | 6/20 [01:25<03:27, 14.84s/it][I 2020-10-05 01:48:00,438] Trial 48 finished with value: 0.16213221126715713 and parameters: {'lambda_l1': 0.0007723294399190148, 'lambda_l2': 0.0042048908933122395}. Best is trial 48 with value: 0.16213221126715713.\n",
"regularization_factors, val_score: 0.162036: 30%|### | 6/20 [01:25<03:27, 14.84s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114365\tvalid_1's multi_logloss: 0.163106\n",
"Early stopping, best iteration is:\n",
"[143]\ttraining's multi_logloss: 0.0987875\tvalid_1's multi_logloss: 0.162099\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 35%|###5 | 7/20 [01:37<03:01, 13.93s/it][I 2020-10-05 01:48:12,257] Trial 49 finished with value: 0.16209917281696537 and parameters: {'lambda_l1': 2.0516618958043193e-06, 'lambda_l2': 0.0008841325123849131}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 35%|###5 | 7/20 [01:37<03:01, 13.93s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114339\tvalid_1's multi_logloss: 0.163447\n",
"Early stopping, best iteration is:\n",
"[133]\ttraining's multi_logloss: 0.101937\tvalid_1's multi_logloss: 0.162351\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 40%|#### | 8/20 [01:46<02:30, 12.55s/it][I 2020-10-05 01:48:21,578] Trial 50 finished with value: 0.16235102725063633 and parameters: {'lambda_l1': 3.200783717728594e-06, 'lambda_l2': 0.0016579361992030447}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 40%|#### | 8/20 [01:46<02:30, 12.55s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114127\tvalid_1's multi_logloss: 0.16348\n",
"Early stopping, best iteration is:\n",
"[143]\ttraining's multi_logloss: 0.0986415\tvalid_1's multi_logloss: 0.16254\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 45%|####5 | 9/20 [01:56<02:08, 11.71s/it][I 2020-10-05 01:48:31,316] Trial 51 finished with value: 0.16254010022503304 and parameters: {'lambda_l1': 9.959907115384746e-06, 'lambda_l2': 1.0008735818272323e-05}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 45%|####5 | 9/20 [01:56<02:08, 11.71s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.115182\tvalid_1's multi_logloss: 0.163427\n",
"Early stopping, best iteration is:\n",
"[158]\ttraining's multi_logloss: 0.0952347\tvalid_1's multi_logloss: 0.162259\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 50%|##### | 10/20 [02:07<01:55, 11.57s/it][I 2020-10-05 01:48:42,552] Trial 52 finished with value: 0.1622585208871488 and parameters: {'lambda_l1': 0.01857887945756072, 'lambda_l2': 0.22498727332043805}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 50%|##### | 10/20 [02:07<01:55, 11.57s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114185\tvalid_1's multi_logloss: 0.163329\n",
"Early stopping, best iteration is:\n",
"[152]\ttraining's multi_logloss: 0.0959258\tvalid_1's multi_logloss: 0.162526\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 55%|#####5 | 11/20 [02:18<01:43, 11.48s/it][I 2020-10-05 01:48:53,817] Trial 53 finished with value: 0.16252607084337764 and parameters: {'lambda_l1': 2.0226575516207603e-08, 'lambda_l2': 1.237595213185944e-06}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 55%|#####5 | 11/20 [02:18<01:43, 11.48s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114405\tvalid_1's multi_logloss: 0.163306\n",
"Early stopping, best iteration is:\n",
"[137]\ttraining's multi_logloss: 0.100944\tvalid_1's multi_logloss: 0.162227\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 60%|###### | 12/20 [02:29<01:29, 11.19s/it][I 2020-10-05 01:49:04,338] Trial 54 finished with value: 0.16222749212089208 and parameters: {'lambda_l1': 7.716652058064478e-06, 'lambda_l2': 0.03831506886393764}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 60%|###### | 12/20 [02:29<01:29, 11.19s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114408\tvalid_1's multi_logloss: 0.16349\n",
"Early stopping, best iteration is:\n",
"[143]\ttraining's multi_logloss: 0.0988651\tvalid_1's multi_logloss: 0.162504\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 65%|######5 | 13/20 [02:40<01:17, 11.05s/it][I 2020-10-05 01:49:15,049] Trial 55 finished with value: 0.16250393480853328 and parameters: {'lambda_l1': 0.0397494610177511, 'lambda_l2': 3.491880854311525e-05}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 65%|######5 | 13/20 [02:40<01:17, 11.05s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114578\tvalid_1's multi_logloss: 0.163602\n",
"Early stopping, best iteration is:\n",
"[149]\ttraining's multi_logloss: 0.0971587\tvalid_1's multi_logloss: 0.162246\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 70%|####### | 14/20 [02:50<01:05, 10.96s/it][I 2020-10-05 01:49:25,794] Trial 56 finished with value: 0.16224556156010456 and parameters: {'lambda_l1': 2.9831412097747654e-07, 'lambda_l2': 0.06764896441300657}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 70%|####### | 14/20 [02:50<01:05, 10.96s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114128\tvalid_1's multi_logloss: 0.163086\n",
"Early stopping, best iteration is:\n",
"[143]\ttraining's multi_logloss: 0.0985553\tvalid_1's multi_logloss: 0.162141\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 75%|#######5 | 15/20 [03:01<00:54, 10.86s/it][I 2020-10-05 01:49:36,444] Trial 57 finished with value: 0.16214117108329165 and parameters: {'lambda_l1': 5.571366596823703e-05, 'lambda_l2': 1.1185338510339606e-06}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 75%|#######5 | 15/20 [03:01<00:54, 10.86s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114268\tvalid_1's multi_logloss: 0.163263\n",
"Early stopping, best iteration is:\n",
"[124]\ttraining's multi_logloss: 0.104901\tvalid_1's multi_logloss: 0.162238\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 80%|######## | 16/20 [03:12<00:43, 10.77s/it][I 2020-10-05 01:49:46,998] Trial 58 finished with value: 0.1622377681164801 and parameters: {'lambda_l1': 2.2342344009077944e-07, 'lambda_l2': 0.0009265964422642836}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 80%|######## | 16/20 [03:12<00:43, 10.77s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114294\tvalid_1's multi_logloss: 0.16334\n",
"Early stopping, best iteration is:\n",
"[127]\ttraining's multi_logloss: 0.104043\tvalid_1's multi_logloss: 0.162184\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.162036: 85%|########5 | 17/20 [03:21<00:31, 10.36s/it][I 2020-10-05 01:49:56,405] Trial 59 finished with value: 0.1621840348879034 and parameters: {'lambda_l1': 0.02743298446075123, 'lambda_l2': 0.010389398930529176}. Best is trial 49 with value: 0.16209917281696537.\n",
"regularization_factors, val_score: 0.162036: 85%|########5 | 17/20 [03:21<00:31, 10.36s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.116446\tvalid_1's multi_logloss: 0.163248\n",
"Early stopping, best iteration is:\n",
"[161]\ttraining's multi_logloss: 0.0960004\tvalid_1's multi_logloss: 0.161803\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.161803: 90%|######### | 18/20 [03:32<00:21, 10.67s/it][I 2020-10-05 01:50:07,807] Trial 60 finished with value: 0.16180307845830263 and parameters: {'lambda_l1': 0.002157343741168164, 'lambda_l2': 0.6844996577650422}. Best is trial 60 with value: 0.16180307845830263.\n",
"regularization_factors, val_score: 0.161803: 90%|######### | 18/20 [03:32<00:21, 10.67s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.118633\tvalid_1's multi_logloss: 0.163468\n",
"Early stopping, best iteration is:\n",
"[150]\ttraining's multi_logloss: 0.101832\tvalid_1's multi_logloss: 0.161919\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.161803: 95%|#########5| 19/20 [03:44<00:10, 10.83s/it][I 2020-10-05 01:50:19,012] Trial 61 finished with value: 0.16191902449823384 and parameters: {'lambda_l1': 0.004938765369111081, 'lambda_l2': 1.883234137966169}. Best is trial 60 with value: 0.16180307845830263.\n",
"regularization_factors, val_score: 0.161803: 95%|#########5| 19/20 [03:44<00:10, 10.83s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.11704\tvalid_1's multi_logloss: 0.163295\n",
"Early stopping, best iteration is:\n",
"[151]\ttraining's multi_logloss: 0.0993753\tvalid_1's multi_logloss: 0.162078\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"regularization_factors, val_score: 0.161803: 100%|##########| 20/20 [03:54<00:00, 10.87s/it][I 2020-10-05 01:50:29,954] Trial 62 finished with value: 0.1620782159582214 and parameters: {'lambda_l1': 0.002352063059463711, 'lambda_l2': 0.9678149953457204}. Best is trial 60 with value: 0.16180307845830263.\n",
"regularization_factors, val_score: 0.161803: 100%|##########| 20/20 [03:54<00:00, 11.75s/it]\n",
"min_data_in_leaf, val_score: 0.161803: 0%| | 0/5 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.121836\tvalid_1's multi_logloss: 0.163592\n",
"Early stopping, best iteration is:\n",
"[147]\ttraining's multi_logloss: 0.105574\tvalid_1's multi_logloss: 0.162165\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"min_data_in_leaf, val_score: 0.161803: 20%|## | 1/5 [00:10<00:40, 10.21s/it][I 2020-10-05 01:50:40,179] Trial 63 finished with value: 0.1621645138673385 and parameters: {'min_child_samples': 100}. Best is trial 63 with value: 0.1621645138673385.\n",
"min_data_in_leaf, val_score: 0.161803: 20%|## | 1/5 [00:10<00:40, 10.21s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.115276\tvalid_1's multi_logloss: 0.163448\n",
"Early stopping, best iteration is:\n",
"[166]\ttraining's multi_logloss: 0.0932289\tvalid_1's multi_logloss: 0.162097\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"min_data_in_leaf, val_score: 0.161803: 40%|#### | 2/5 [00:22<00:32, 10.74s/it][I 2020-10-05 01:50:52,146] Trial 64 finished with value: 0.1620967491411566 and parameters: {'min_child_samples': 10}. Best is trial 64 with value: 0.1620967491411566.\n",
"min_data_in_leaf, val_score: 0.161803: 40%|#### | 2/5 [00:22<00:32, 10.74s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.118865\tvalid_1's multi_logloss: 0.163391\n",
"Early stopping, best iteration is:\n",
"[157]\ttraining's multi_logloss: 0.0995464\tvalid_1's multi_logloss: 0.16194\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"min_data_in_leaf, val_score: 0.161803: 60%|###### | 3/5 [00:33<00:21, 10.80s/it][I 2020-10-05 01:51:03,072] Trial 65 finished with value: 0.1619401524055166 and parameters: {'min_child_samples': 50}. Best is trial 65 with value: 0.1619401524055166.\n",
"min_data_in_leaf, val_score: 0.161803: 60%|###### | 3/5 [00:33<00:21, 10.80s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.114807\tvalid_1's multi_logloss: 0.163714\n",
"Early stopping, best iteration is:\n",
"[172]\ttraining's multi_logloss: 0.0915486\tvalid_1's multi_logloss: 0.162508\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"min_data_in_leaf, val_score: 0.161803: 80%|######## | 4/5 [00:47<00:11, 11.81s/it][I 2020-10-05 01:51:17,244] Trial 66 finished with value: 0.16250780944638324 and parameters: {'min_child_samples': 5}. Best is trial 65 with value: 0.1619401524055166.\n",
"min_data_in_leaf, val_score: 0.161803: 80%|######## | 4/5 [00:47<00:11, 11.81s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[100]\ttraining's multi_logloss: 0.116787\tvalid_1's multi_logloss: 0.16349\n",
"Early stopping, best iteration is:\n",
"[162]\ttraining's multi_logloss: 0.0960875\tvalid_1's multi_logloss: 0.162041\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"min_data_in_leaf, val_score: 0.161803: 100%|##########| 5/5 [01:00<00:00, 12.14s/it][I 2020-10-05 01:51:30,168] Trial 67 finished with value: 0.1620405229325728 and parameters: {'min_child_samples': 25}. Best is trial 65 with value: 0.1619401524055166.\n",
"min_data_in_leaf, val_score: 0.161803: 100%|##########| 5/5 [01:00<00:00, 12.04s/it]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best params: {'objective': 'multiclass', 'metric': 'multi_logloss', 'num_class': 3, 'lambda_l1': 0.002157343741168164, 'lambda_l2': 0.6844996577650422, 'random_state': 42, 'n_jobs': -1, 'feature_pre_filter': False, 'bagging_freq': 5, 'num_leaves': 232, 'feature_fraction': 0.58, 'bagging_fraction': 0.8713477624436328, 'min_child_samples': 20}\n",
" Accuracy = 0.9328125\n",
" Params: \n",
" objective: multiclass\n",
" metric: multi_logloss\n",
" num_class: 3\n",
" lambda_l1: 0.002157343741168164\n",
" lambda_l2: 0.6844996577650422\n",
" random_state: 42\n",
" n_jobs: -1\n",
" feature_pre_filter: False\n",
" bagging_freq: 5\n",
" num_leaves: 232\n",
" feature_fraction: 0.58\n",
" bagging_fraction: 0.8713477624436328\n",
" min_child_samples: 20\n"
]
}
],
"source": [
"dtrain = lgb.Dataset(X_trn, label=y_trn)\n",
"dval = lgb.Dataset(X_val, label=y_val)\n",
"\n",
"model = lgb.train(params, dtrain, valid_sets=[dtrain, dval], \n",
" verbose_eval=100, early_stopping_rounds=10)\n",
"\n",
"prediction = np.argmax(model.predict(X_val, num_iteration=model.best_iteration), \n",
" axis=1)\n",
"accuracy = accuracy_score(y_val, prediction)\n",
"\n",
"params = model.params\n",
"print(\"Best params:\", params)\n",
"print(\" Accuracy = {}\".format(accuracy))\n",
"print(\" Params: \")\n",
"for key, value in params.items():\n",
" print(\" {}: {}\".format(key, value))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Stratified K-Fold Cross Validation"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:51:30.898328Z",
"start_time": "2020-10-05T08:51:30.838172Z"
}
},
"outputs": [],
"source": [
"cv = StratifiedKFold(n_splits=n_fold, shuffle=True, random_state=seed)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## LightGBM 모델 학습"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:54:00.359900Z",
"start_time": "2020-10-05T08:53:24.061986Z"
},
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"training model for CV #1\n",
"[1]\tvalid_0's multi_logloss: 0.887685\n",
"Training until validation scores don't improve for 10 rounds\n",
"[2]\tvalid_0's multi_logloss: 0.806995\n",
"[3]\tvalid_0's multi_logloss: 0.732773\n",
"[4]\tvalid_0's multi_logloss: 0.670089\n",
"[5]\tvalid_0's multi_logloss: 0.617591\n",
"[6]\tvalid_0's multi_logloss: 0.574849\n",
"[7]\tvalid_0's multi_logloss: 0.536247\n",
"[8]\tvalid_0's multi_logloss: 0.504096\n",
"[9]\tvalid_0's multi_logloss: 0.478267\n",
"[10]\tvalid_0's multi_logloss: 0.449372\n",
"[11]\tvalid_0's multi_logloss: 0.423029\n",
"[12]\tvalid_0's multi_logloss: 0.400206\n",
"[13]\tvalid_0's multi_logloss: 0.378186\n",
"[14]\tvalid_0's multi_logloss: 0.359595\n",
"[15]\tvalid_0's multi_logloss: 0.343111\n",
"[16]\tvalid_0's multi_logloss: 0.32884\n",
"[17]\tvalid_0's multi_logloss: 0.315538\n",
"[18]\tvalid_0's multi_logloss: 0.302793\n",
"[19]\tvalid_0's multi_logloss: 0.29092\n",
"[20]\tvalid_0's multi_logloss: 0.281147\n",
"[21]\tvalid_0's multi_logloss: 0.271235\n",
"[22]\tvalid_0's multi_logloss: 0.262939\n",
"[23]\tvalid_0's multi_logloss: 0.255613\n",
"[24]\tvalid_0's multi_logloss: 0.249139\n",
"[25]\tvalid_0's multi_logloss: 0.242552\n",
"[26]\tvalid_0's multi_logloss: 0.237431\n",
"[27]\tvalid_0's multi_logloss: 0.23282\n",
"[28]\tvalid_0's multi_logloss: 0.227565\n",
"[29]\tvalid_0's multi_logloss: 0.223501\n",
"[30]\tvalid_0's multi_logloss: 0.218986\n",
"[31]\tvalid_0's multi_logloss: 0.21584\n",
"[32]\tvalid_0's multi_logloss: 0.212288\n",
"[33]\tvalid_0's multi_logloss: 0.20819\n",
"[34]\tvalid_0's multi_logloss: 0.204601\n",
"[35]\tvalid_0's multi_logloss: 0.201395\n",
"[36]\tvalid_0's multi_logloss: 0.198837\n",
"[37]\tvalid_0's multi_logloss: 0.197026\n",
"[38]\tvalid_0's multi_logloss: 0.194824\n",
"[39]\tvalid_0's multi_logloss: 0.19274\n",
"[40]\tvalid_0's multi_logloss: 0.190935\n",
"[41]\tvalid_0's multi_logloss: 0.18911\n",
"[42]\tvalid_0's multi_logloss: 0.187821\n",
"[43]\tvalid_0's multi_logloss: 0.186075\n",
"[44]\tvalid_0's multi_logloss: 0.184739\n",
"[45]\tvalid_0's multi_logloss: 0.18333\n",
"[46]\tvalid_0's multi_logloss: 0.181974\n",
"[47]\tvalid_0's multi_logloss: 0.180962\n",
"[48]\tvalid_0's multi_logloss: 0.17983\n",
"[49]\tvalid_0's multi_logloss: 0.178772\n",
"[50]\tvalid_0's multi_logloss: 0.177696\n",
"[51]\tvalid_0's multi_logloss: 0.176538\n",
"[52]\tvalid_0's multi_logloss: 0.175577\n",
"[53]\tvalid_0's multi_logloss: 0.174605\n",
"[54]\tvalid_0's multi_logloss: 0.173987\n",
"[55]\tvalid_0's multi_logloss: 0.17349\n",
"[56]\tvalid_0's multi_logloss: 0.172916\n",
"[57]\tvalid_0's multi_logloss: 0.172321\n",
"[58]\tvalid_0's multi_logloss: 0.172054\n",
"[59]\tvalid_0's multi_logloss: 0.171347\n",
"[60]\tvalid_0's multi_logloss: 0.170822\n",
"[61]\tvalid_0's multi_logloss: 0.170136\n",
"[62]\tvalid_0's multi_logloss: 0.169646\n",
"[63]\tvalid_0's multi_logloss: 0.169232\n",
"[64]\tvalid_0's multi_logloss: 0.168706\n",
"[65]\tvalid_0's multi_logloss: 0.168235\n",
"[66]\tvalid_0's multi_logloss: 0.167782\n",
"[67]\tvalid_0's multi_logloss: 0.167341\n",
"[68]\tvalid_0's multi_logloss: 0.166726\n",
"[69]\tvalid_0's multi_logloss: 0.166387\n",
"[70]\tvalid_0's multi_logloss: 0.166005\n",
"[71]\tvalid_0's multi_logloss: 0.165743\n",
"[72]\tvalid_0's multi_logloss: 0.165471\n",
"[73]\tvalid_0's multi_logloss: 0.165295\n",
"[74]\tvalid_0's multi_logloss: 0.164958\n",
"[75]\tvalid_0's multi_logloss: 0.164628\n",
"[76]\tvalid_0's multi_logloss: 0.164338\n",
"[77]\tvalid_0's multi_logloss: 0.164087\n",
"[78]\tvalid_0's multi_logloss: 0.16385\n",
"[79]\tvalid_0's multi_logloss: 0.16368\n",
"[80]\tvalid_0's multi_logloss: 0.16347\n",
"[81]\tvalid_0's multi_logloss: 0.163289\n",
"[82]\tvalid_0's multi_logloss: 0.162989\n",
"[83]\tvalid_0's multi_logloss: 0.16278\n",
"[84]\tvalid_0's multi_logloss: 0.162596\n",
"[85]\tvalid_0's multi_logloss: 0.162419\n",
"[86]\tvalid_0's multi_logloss: 0.162314\n",
"[87]\tvalid_0's multi_logloss: 0.162181\n",
"[88]\tvalid_0's multi_logloss: 0.162046\n",
"[89]\tvalid_0's multi_logloss: 0.161932\n",
"[90]\tvalid_0's multi_logloss: 0.161799\n",
"[91]\tvalid_0's multi_logloss: 0.161624\n",
"[92]\tvalid_0's multi_logloss: 0.161486\n",
"[93]\tvalid_0's multi_logloss: 0.161416\n",
"[94]\tvalid_0's multi_logloss: 0.161295\n",
"[95]\tvalid_0's multi_logloss: 0.161198\n",
"[96]\tvalid_0's multi_logloss: 0.161067\n",
"[97]\tvalid_0's multi_logloss: 0.16097\n",
"[98]\tvalid_0's multi_logloss: 0.160924\n",
"[99]\tvalid_0's multi_logloss: 0.160863\n",
"[100]\tvalid_0's multi_logloss: 0.160765\n",
"Did not meet early stopping. Best iteration is:\n",
"[100]\tvalid_0's multi_logloss: 0.160765\n",
"training model for CV #2\n",
"[1]\tvalid_0's multi_logloss: 0.88779\n",
"Training until validation scores don't improve for 10 rounds\n",
"[2]\tvalid_0's multi_logloss: 0.807213\n",
"[3]\tvalid_0's multi_logloss: 0.733363\n",
"[4]\tvalid_0's multi_logloss: 0.670832\n",
"[5]\tvalid_0's multi_logloss: 0.618288\n",
"[6]\tvalid_0's multi_logloss: 0.575526\n",
"[7]\tvalid_0's multi_logloss: 0.536857\n",
"[8]\tvalid_0's multi_logloss: 0.505037\n",
"[9]\tvalid_0's multi_logloss: 0.47929\n",
"[10]\tvalid_0's multi_logloss: 0.450373\n",
"[11]\tvalid_0's multi_logloss: 0.424125\n",
"[12]\tvalid_0's multi_logloss: 0.401418\n",
"[13]\tvalid_0's multi_logloss: 0.379454\n",
"[14]\tvalid_0's multi_logloss: 0.360905\n",
"[15]\tvalid_0's multi_logloss: 0.344343\n",
"[16]\tvalid_0's multi_logloss: 0.330158\n",
"[17]\tvalid_0's multi_logloss: 0.316967\n",
"[18]\tvalid_0's multi_logloss: 0.304161\n",
"[19]\tvalid_0's multi_logloss: 0.292266\n",
"[20]\tvalid_0's multi_logloss: 0.282536\n",
"[21]\tvalid_0's multi_logloss: 0.27242\n",
"[22]\tvalid_0's multi_logloss: 0.264239\n",
"[23]\tvalid_0's multi_logloss: 0.256906\n",
"[24]\tvalid_0's multi_logloss: 0.250408\n",
"[25]\tvalid_0's multi_logloss: 0.24376\n",
"[26]\tvalid_0's multi_logloss: 0.238697\n",
"[27]\tvalid_0's multi_logloss: 0.234075\n",
"[28]\tvalid_0's multi_logloss: 0.228668\n",
"[29]\tvalid_0's multi_logloss: 0.224628\n",
"[30]\tvalid_0's multi_logloss: 0.220041\n",
"[31]\tvalid_0's multi_logloss: 0.216811\n",
"[32]\tvalid_0's multi_logloss: 0.213212\n",
"[33]\tvalid_0's multi_logloss: 0.209096\n",
"[34]\tvalid_0's multi_logloss: 0.20543\n",
"[35]\tvalid_0's multi_logloss: 0.20222\n",
"[36]\tvalid_0's multi_logloss: 0.199696\n",
"[37]\tvalid_0's multi_logloss: 0.197864\n",
"[38]\tvalid_0's multi_logloss: 0.195635\n",
"[39]\tvalid_0's multi_logloss: 0.193596\n",
"[40]\tvalid_0's multi_logloss: 0.191792\n",
"[41]\tvalid_0's multi_logloss: 0.189973\n",
"[42]\tvalid_0's multi_logloss: 0.188623\n",
"[43]\tvalid_0's multi_logloss: 0.186884\n",
"[44]\tvalid_0's multi_logloss: 0.185463\n",
"[45]\tvalid_0's multi_logloss: 0.184091\n",
"[46]\tvalid_0's multi_logloss: 0.182679\n",
"[47]\tvalid_0's multi_logloss: 0.181703\n",
"[48]\tvalid_0's multi_logloss: 0.180533\n",
"[49]\tvalid_0's multi_logloss: 0.179481\n",
"[50]\tvalid_0's multi_logloss: 0.178421\n",
"[51]\tvalid_0's multi_logloss: 0.177324\n",
"[52]\tvalid_0's multi_logloss: 0.176353\n",
"[53]\tvalid_0's multi_logloss: 0.175382\n",
"[54]\tvalid_0's multi_logloss: 0.174781\n",
"[55]\tvalid_0's multi_logloss: 0.174281\n",
"[56]\tvalid_0's multi_logloss: 0.173667\n",
"[57]\tvalid_0's multi_logloss: 0.173106\n",
"[58]\tvalid_0's multi_logloss: 0.172818\n",
"[59]\tvalid_0's multi_logloss: 0.172127\n",
"[60]\tvalid_0's multi_logloss: 0.171629\n",
"[61]\tvalid_0's multi_logloss: 0.170923\n",
"[62]\tvalid_0's multi_logloss: 0.170356\n",
"[63]\tvalid_0's multi_logloss: 0.169955\n",
"[64]\tvalid_0's multi_logloss: 0.169404\n",
"[65]\tvalid_0's multi_logloss: 0.168908\n",
"[66]\tvalid_0's multi_logloss: 0.168497\n",
"[67]\tvalid_0's multi_logloss: 0.167975\n",
"[68]\tvalid_0's multi_logloss: 0.167403\n",
"[69]\tvalid_0's multi_logloss: 0.167091\n",
"[70]\tvalid_0's multi_logloss: 0.166641\n",
"[71]\tvalid_0's multi_logloss: 0.16634\n",
"[72]\tvalid_0's multi_logloss: 0.166062\n",
"[73]\tvalid_0's multi_logloss: 0.165835\n",
"[74]\tvalid_0's multi_logloss: 0.165508\n",
"[75]\tvalid_0's multi_logloss: 0.165188\n",
"[76]\tvalid_0's multi_logloss: 0.164855\n",
"[77]\tvalid_0's multi_logloss: 0.164575\n",
"[78]\tvalid_0's multi_logloss: 0.164313\n",
"[79]\tvalid_0's multi_logloss: 0.164143\n",
"[80]\tvalid_0's multi_logloss: 0.163892\n",
"[81]\tvalid_0's multi_logloss: 0.163722\n",
"[82]\tvalid_0's multi_logloss: 0.163467\n",
"[83]\tvalid_0's multi_logloss: 0.163283\n",
"[84]\tvalid_0's multi_logloss: 0.163108\n",
"[85]\tvalid_0's multi_logloss: 0.162918\n",
"[86]\tvalid_0's multi_logloss: 0.162784\n",
"[87]\tvalid_0's multi_logloss: 0.162645\n",
"[88]\tvalid_0's multi_logloss: 0.162533\n",
"[89]\tvalid_0's multi_logloss: 0.162412\n",
"[90]\tvalid_0's multi_logloss: 0.162295\n",
"[91]\tvalid_0's multi_logloss: 0.162164\n",
"[92]\tvalid_0's multi_logloss: 0.162034\n",
"[93]\tvalid_0's multi_logloss: 0.161977\n",
"[94]\tvalid_0's multi_logloss: 0.161814\n",
"[95]\tvalid_0's multi_logloss: 0.161676\n",
"[96]\tvalid_0's multi_logloss: 0.161553\n",
"[97]\tvalid_0's multi_logloss: 0.161416\n",
"[98]\tvalid_0's multi_logloss: 0.161358\n",
"[99]\tvalid_0's multi_logloss: 0.16128\n",
"[100]\tvalid_0's multi_logloss: 0.161208\n",
"Did not meet early stopping. Best iteration is:\n",
"[100]\tvalid_0's multi_logloss: 0.161208\n",
"training model for CV #3\n",
"[1]\tvalid_0's multi_logloss: 0.888182\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training until validation scores don't improve for 10 rounds\n",
"[2]\tvalid_0's multi_logloss: 0.807823\n",
"[3]\tvalid_0's multi_logloss: 0.733827\n",
"[4]\tvalid_0's multi_logloss: 0.671355\n",
"[5]\tvalid_0's multi_logloss: 0.619043\n",
"[6]\tvalid_0's multi_logloss: 0.576281\n",
"[7]\tvalid_0's multi_logloss: 0.537631\n",
"[8]\tvalid_0's multi_logloss: 0.505846\n",
"[9]\tvalid_0's multi_logloss: 0.48021\n",
"[10]\tvalid_0's multi_logloss: 0.451288\n",
"[11]\tvalid_0's multi_logloss: 0.424874\n",
"[12]\tvalid_0's multi_logloss: 0.402194\n",
"[13]\tvalid_0's multi_logloss: 0.380136\n",
"[14]\tvalid_0's multi_logloss: 0.361568\n",
"[15]\tvalid_0's multi_logloss: 0.345076\n",
"[16]\tvalid_0's multi_logloss: 0.330965\n",
"[17]\tvalid_0's multi_logloss: 0.31773\n",
"[18]\tvalid_0's multi_logloss: 0.305015\n",
"[19]\tvalid_0's multi_logloss: 0.293206\n",
"[20]\tvalid_0's multi_logloss: 0.283564\n",
"[21]\tvalid_0's multi_logloss: 0.273633\n",
"[22]\tvalid_0's multi_logloss: 0.265385\n",
"[23]\tvalid_0's multi_logloss: 0.258095\n",
"[24]\tvalid_0's multi_logloss: 0.251579\n",
"[25]\tvalid_0's multi_logloss: 0.244952\n",
"[26]\tvalid_0's multi_logloss: 0.23975\n",
"[27]\tvalid_0's multi_logloss: 0.235061\n",
"[28]\tvalid_0's multi_logloss: 0.229747\n",
"[29]\tvalid_0's multi_logloss: 0.225709\n",
"[30]\tvalid_0's multi_logloss: 0.220889\n",
"[31]\tvalid_0's multi_logloss: 0.217743\n",
"[32]\tvalid_0's multi_logloss: 0.214033\n",
"[33]\tvalid_0's multi_logloss: 0.209863\n",
"[34]\tvalid_0's multi_logloss: 0.206261\n",
"[35]\tvalid_0's multi_logloss: 0.202945\n",
"[36]\tvalid_0's multi_logloss: 0.200528\n",
"[37]\tvalid_0's multi_logloss: 0.198798\n",
"[38]\tvalid_0's multi_logloss: 0.196612\n",
"[39]\tvalid_0's multi_logloss: 0.194611\n",
"[40]\tvalid_0's multi_logloss: 0.192814\n",
"[41]\tvalid_0's multi_logloss: 0.191021\n",
"[42]\tvalid_0's multi_logloss: 0.189701\n",
"[43]\tvalid_0's multi_logloss: 0.187895\n",
"[44]\tvalid_0's multi_logloss: 0.186507\n",
"[45]\tvalid_0's multi_logloss: 0.185171\n",
"[46]\tvalid_0's multi_logloss: 0.183836\n",
"[47]\tvalid_0's multi_logloss: 0.182827\n",
"[48]\tvalid_0's multi_logloss: 0.181668\n",
"[49]\tvalid_0's multi_logloss: 0.180634\n",
"[50]\tvalid_0's multi_logloss: 0.179595\n",
"[51]\tvalid_0's multi_logloss: 0.178425\n",
"[52]\tvalid_0's multi_logloss: 0.177459\n",
"[53]\tvalid_0's multi_logloss: 0.176445\n",
"[54]\tvalid_0's multi_logloss: 0.175823\n",
"[55]\tvalid_0's multi_logloss: 0.175356\n",
"[56]\tvalid_0's multi_logloss: 0.174777\n",
"[57]\tvalid_0's multi_logloss: 0.174302\n",
"[58]\tvalid_0's multi_logloss: 0.174046\n",
"[59]\tvalid_0's multi_logloss: 0.173413\n",
"[60]\tvalid_0's multi_logloss: 0.172846\n",
"[61]\tvalid_0's multi_logloss: 0.172162\n",
"[62]\tvalid_0's multi_logloss: 0.171647\n",
"[63]\tvalid_0's multi_logloss: 0.171235\n",
"[64]\tvalid_0's multi_logloss: 0.170701\n",
"[65]\tvalid_0's multi_logloss: 0.170179\n",
"[66]\tvalid_0's multi_logloss: 0.169794\n",
"[67]\tvalid_0's multi_logloss: 0.169364\n",
"[68]\tvalid_0's multi_logloss: 0.168817\n",
"[69]\tvalid_0's multi_logloss: 0.168495\n",
"[70]\tvalid_0's multi_logloss: 0.168103\n",
"[71]\tvalid_0's multi_logloss: 0.167792\n",
"[72]\tvalid_0's multi_logloss: 0.167506\n",
"[73]\tvalid_0's multi_logloss: 0.167289\n",
"[74]\tvalid_0's multi_logloss: 0.166962\n",
"[75]\tvalid_0's multi_logloss: 0.1666\n",
"[76]\tvalid_0's multi_logloss: 0.166282\n",
"[77]\tvalid_0's multi_logloss: 0.165981\n",
"[78]\tvalid_0's multi_logloss: 0.165719\n",
"[79]\tvalid_0's multi_logloss: 0.16549\n",
"[80]\tvalid_0's multi_logloss: 0.165258\n",
"[81]\tvalid_0's multi_logloss: 0.165104\n",
"[82]\tvalid_0's multi_logloss: 0.164809\n",
"[83]\tvalid_0's multi_logloss: 0.164652\n",
"[84]\tvalid_0's multi_logloss: 0.16446\n",
"[85]\tvalid_0's multi_logloss: 0.164244\n",
"[86]\tvalid_0's multi_logloss: 0.164087\n",
"[87]\tvalid_0's multi_logloss: 0.163936\n",
"[88]\tvalid_0's multi_logloss: 0.163847\n",
"[89]\tvalid_0's multi_logloss: 0.163725\n",
"[90]\tvalid_0's multi_logloss: 0.163546\n",
"[91]\tvalid_0's multi_logloss: 0.163384\n",
"[92]\tvalid_0's multi_logloss: 0.163317\n",
"[93]\tvalid_0's multi_logloss: 0.163227\n",
"[94]\tvalid_0's multi_logloss: 0.163106\n",
"[95]\tvalid_0's multi_logloss: 0.163038\n",
"[96]\tvalid_0's multi_logloss: 0.16291\n",
"[97]\tvalid_0's multi_logloss: 0.162827\n",
"[98]\tvalid_0's multi_logloss: 0.162808\n",
"[99]\tvalid_0's multi_logloss: 0.162718\n",
"[100]\tvalid_0's multi_logloss: 0.162623\n",
"Did not meet early stopping. Best iteration is:\n",
"[100]\tvalid_0's multi_logloss: 0.162623\n",
"training model for CV #4\n",
"[1]\tvalid_0's multi_logloss: 0.888082\n",
"Training until validation scores don't improve for 10 rounds\n",
"[2]\tvalid_0's multi_logloss: 0.807554\n",
"[3]\tvalid_0's multi_logloss: 0.733538\n",
"[4]\tvalid_0's multi_logloss: 0.670882\n",
"[5]\tvalid_0's multi_logloss: 0.618469\n",
"[6]\tvalid_0's multi_logloss: 0.575876\n",
"[7]\tvalid_0's multi_logloss: 0.537155\n",
"[8]\tvalid_0's multi_logloss: 0.505148\n",
"[9]\tvalid_0's multi_logloss: 0.479386\n",
"[10]\tvalid_0's multi_logloss: 0.450515\n",
"[11]\tvalid_0's multi_logloss: 0.424251\n",
"[12]\tvalid_0's multi_logloss: 0.401551\n",
"[13]\tvalid_0's multi_logloss: 0.379571\n",
"[14]\tvalid_0's multi_logloss: 0.361112\n",
"[15]\tvalid_0's multi_logloss: 0.344704\n",
"[16]\tvalid_0's multi_logloss: 0.330557\n",
"[17]\tvalid_0's multi_logloss: 0.317386\n",
"[18]\tvalid_0's multi_logloss: 0.304682\n",
"[19]\tvalid_0's multi_logloss: 0.292814\n",
"[20]\tvalid_0's multi_logloss: 0.283112\n",
"[21]\tvalid_0's multi_logloss: 0.272964\n",
"[22]\tvalid_0's multi_logloss: 0.264676\n",
"[23]\tvalid_0's multi_logloss: 0.257546\n",
"[24]\tvalid_0's multi_logloss: 0.251024\n",
"[25]\tvalid_0's multi_logloss: 0.244319\n",
"[26]\tvalid_0's multi_logloss: 0.239161\n",
"[27]\tvalid_0's multi_logloss: 0.234454\n",
"[28]\tvalid_0's multi_logloss: 0.229221\n",
"[29]\tvalid_0's multi_logloss: 0.225168\n",
"[30]\tvalid_0's multi_logloss: 0.220564\n",
"[31]\tvalid_0's multi_logloss: 0.217413\n",
"[32]\tvalid_0's multi_logloss: 0.213796\n",
"[33]\tvalid_0's multi_logloss: 0.209798\n",
"[34]\tvalid_0's multi_logloss: 0.206158\n",
"[35]\tvalid_0's multi_logloss: 0.202923\n",
"[36]\tvalid_0's multi_logloss: 0.200481\n",
"[37]\tvalid_0's multi_logloss: 0.198662\n",
"[38]\tvalid_0's multi_logloss: 0.196412\n",
"[39]\tvalid_0's multi_logloss: 0.194417\n",
"[40]\tvalid_0's multi_logloss: 0.192569\n",
"[41]\tvalid_0's multi_logloss: 0.190719\n",
"[42]\tvalid_0's multi_logloss: 0.189407\n",
"[43]\tvalid_0's multi_logloss: 0.187703\n",
"[44]\tvalid_0's multi_logloss: 0.186364\n",
"[45]\tvalid_0's multi_logloss: 0.184915\n",
"[46]\tvalid_0's multi_logloss: 0.183598\n",
"[47]\tvalid_0's multi_logloss: 0.182639\n",
"[48]\tvalid_0's multi_logloss: 0.181472\n",
"[49]\tvalid_0's multi_logloss: 0.180405\n",
"[50]\tvalid_0's multi_logloss: 0.179333\n",
"[51]\tvalid_0's multi_logloss: 0.178182\n",
"[52]\tvalid_0's multi_logloss: 0.17724\n",
"[53]\tvalid_0's multi_logloss: 0.176375\n",
"[54]\tvalid_0's multi_logloss: 0.175762\n",
"[55]\tvalid_0's multi_logloss: 0.175282\n",
"[56]\tvalid_0's multi_logloss: 0.174697\n",
"[57]\tvalid_0's multi_logloss: 0.17415\n",
"[58]\tvalid_0's multi_logloss: 0.173869\n",
"[59]\tvalid_0's multi_logloss: 0.17318\n",
"[60]\tvalid_0's multi_logloss: 0.172733\n",
"[61]\tvalid_0's multi_logloss: 0.172024\n",
"[62]\tvalid_0's multi_logloss: 0.171474\n",
"[63]\tvalid_0's multi_logloss: 0.171093\n",
"[64]\tvalid_0's multi_logloss: 0.170575\n",
"[65]\tvalid_0's multi_logloss: 0.170069\n",
"[66]\tvalid_0's multi_logloss: 0.169674\n",
"[67]\tvalid_0's multi_logloss: 0.1692\n",
"[68]\tvalid_0's multi_logloss: 0.168655\n",
"[69]\tvalid_0's multi_logloss: 0.168365\n",
"[70]\tvalid_0's multi_logloss: 0.167922\n",
"[71]\tvalid_0's multi_logloss: 0.167672\n",
"[72]\tvalid_0's multi_logloss: 0.167392\n",
"[73]\tvalid_0's multi_logloss: 0.167152\n",
"[74]\tvalid_0's multi_logloss: 0.166795\n",
"[75]\tvalid_0's multi_logloss: 0.166484\n",
"[76]\tvalid_0's multi_logloss: 0.166176\n",
"[77]\tvalid_0's multi_logloss: 0.16586\n",
"[78]\tvalid_0's multi_logloss: 0.165626\n",
"[79]\tvalid_0's multi_logloss: 0.165419\n",
"[80]\tvalid_0's multi_logloss: 0.165195\n",
"[81]\tvalid_0's multi_logloss: 0.164999\n",
"[82]\tvalid_0's multi_logloss: 0.16474\n",
"[83]\tvalid_0's multi_logloss: 0.164555\n",
"[84]\tvalid_0's multi_logloss: 0.164367\n",
"[85]\tvalid_0's multi_logloss: 0.164149\n",
"[86]\tvalid_0's multi_logloss: 0.164002\n",
"[87]\tvalid_0's multi_logloss: 0.16386\n",
"[88]\tvalid_0's multi_logloss: 0.163718\n",
"[89]\tvalid_0's multi_logloss: 0.163589\n",
"[90]\tvalid_0's multi_logloss: 0.163441\n",
"[91]\tvalid_0's multi_logloss: 0.163278\n",
"[92]\tvalid_0's multi_logloss: 0.163212\n",
"[93]\tvalid_0's multi_logloss: 0.16311\n",
"[94]\tvalid_0's multi_logloss: 0.163003\n",
"[95]\tvalid_0's multi_logloss: 0.162931\n",
"[96]\tvalid_0's multi_logloss: 0.162856\n",
"[97]\tvalid_0's multi_logloss: 0.16273\n",
"[98]\tvalid_0's multi_logloss: 0.162677\n",
"[99]\tvalid_0's multi_logloss: 0.162568\n",
"[100]\tvalid_0's multi_logloss: 0.162504\n",
"Did not meet early stopping. Best iteration is:\n",
"[100]\tvalid_0's multi_logloss: 0.162504\n",
"training model for CV #5\n",
"[1]\tvalid_0's multi_logloss: 0.888092\n",
"Training until validation scores don't improve for 10 rounds\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2]\tvalid_0's multi_logloss: 0.807693\n",
"[3]\tvalid_0's multi_logloss: 0.733491\n",
"[4]\tvalid_0's multi_logloss: 0.671129\n",
"[5]\tvalid_0's multi_logloss: 0.618705\n",
"[6]\tvalid_0's multi_logloss: 0.57604\n",
"[7]\tvalid_0's multi_logloss: 0.537409\n",
"[8]\tvalid_0's multi_logloss: 0.505426\n",
"[9]\tvalid_0's multi_logloss: 0.479669\n",
"[10]\tvalid_0's multi_logloss: 0.450762\n",
"[11]\tvalid_0's multi_logloss: 0.424318\n",
"[12]\tvalid_0's multi_logloss: 0.401659\n",
"[13]\tvalid_0's multi_logloss: 0.379624\n",
"[14]\tvalid_0's multi_logloss: 0.360976\n",
"[15]\tvalid_0's multi_logloss: 0.344415\n",
"[16]\tvalid_0's multi_logloss: 0.330197\n",
"[17]\tvalid_0's multi_logloss: 0.316947\n",
"[18]\tvalid_0's multi_logloss: 0.304189\n",
"[19]\tvalid_0's multi_logloss: 0.292354\n",
"[20]\tvalid_0's multi_logloss: 0.282748\n",
"[21]\tvalid_0's multi_logloss: 0.27266\n",
"[22]\tvalid_0's multi_logloss: 0.264334\n",
"[23]\tvalid_0's multi_logloss: 0.256925\n",
"[24]\tvalid_0's multi_logloss: 0.250391\n",
"[25]\tvalid_0's multi_logloss: 0.243777\n",
"[26]\tvalid_0's multi_logloss: 0.238721\n",
"[27]\tvalid_0's multi_logloss: 0.233946\n",
"[28]\tvalid_0's multi_logloss: 0.228615\n",
"[29]\tvalid_0's multi_logloss: 0.224572\n",
"[30]\tvalid_0's multi_logloss: 0.219902\n",
"[31]\tvalid_0's multi_logloss: 0.216819\n",
"[32]\tvalid_0's multi_logloss: 0.21314\n",
"[33]\tvalid_0's multi_logloss: 0.209137\n",
"[34]\tvalid_0's multi_logloss: 0.205516\n",
"[35]\tvalid_0's multi_logloss: 0.202264\n",
"[36]\tvalid_0's multi_logloss: 0.19985\n",
"[37]\tvalid_0's multi_logloss: 0.19802\n",
"[38]\tvalid_0's multi_logloss: 0.195812\n",
"[39]\tvalid_0's multi_logloss: 0.193766\n",
"[40]\tvalid_0's multi_logloss: 0.191952\n",
"[41]\tvalid_0's multi_logloss: 0.190067\n",
"[42]\tvalid_0's multi_logloss: 0.188738\n",
"[43]\tvalid_0's multi_logloss: 0.186915\n",
"[44]\tvalid_0's multi_logloss: 0.18549\n",
"[45]\tvalid_0's multi_logloss: 0.184087\n",
"[46]\tvalid_0's multi_logloss: 0.182655\n",
"[47]\tvalid_0's multi_logloss: 0.181576\n",
"[48]\tvalid_0's multi_logloss: 0.180405\n",
"[49]\tvalid_0's multi_logloss: 0.179379\n",
"[50]\tvalid_0's multi_logloss: 0.178372\n",
"[51]\tvalid_0's multi_logloss: 0.1772\n",
"[52]\tvalid_0's multi_logloss: 0.17624\n",
"[53]\tvalid_0's multi_logloss: 0.175243\n",
"[54]\tvalid_0's multi_logloss: 0.174661\n",
"[55]\tvalid_0's multi_logloss: 0.17419\n",
"[56]\tvalid_0's multi_logloss: 0.173562\n",
"[57]\tvalid_0's multi_logloss: 0.172985\n",
"[58]\tvalid_0's multi_logloss: 0.172743\n",
"[59]\tvalid_0's multi_logloss: 0.172077\n",
"[60]\tvalid_0's multi_logloss: 0.171579\n",
"[61]\tvalid_0's multi_logloss: 0.170879\n",
"[62]\tvalid_0's multi_logloss: 0.170339\n",
"[63]\tvalid_0's multi_logloss: 0.169927\n",
"[64]\tvalid_0's multi_logloss: 0.169393\n",
"[65]\tvalid_0's multi_logloss: 0.168907\n",
"[66]\tvalid_0's multi_logloss: 0.168512\n",
"[67]\tvalid_0's multi_logloss: 0.168046\n",
"[68]\tvalid_0's multi_logloss: 0.167479\n",
"[69]\tvalid_0's multi_logloss: 0.167142\n",
"[70]\tvalid_0's multi_logloss: 0.166733\n",
"[71]\tvalid_0's multi_logloss: 0.16642\n",
"[72]\tvalid_0's multi_logloss: 0.166117\n",
"[73]\tvalid_0's multi_logloss: 0.16594\n",
"[74]\tvalid_0's multi_logloss: 0.165631\n",
"[75]\tvalid_0's multi_logloss: 0.165319\n",
"[76]\tvalid_0's multi_logloss: 0.165009\n",
"[77]\tvalid_0's multi_logloss: 0.164692\n",
"[78]\tvalid_0's multi_logloss: 0.164448\n",
"[79]\tvalid_0's multi_logloss: 0.164204\n",
"[80]\tvalid_0's multi_logloss: 0.164001\n",
"[81]\tvalid_0's multi_logloss: 0.163816\n",
"[82]\tvalid_0's multi_logloss: 0.16362\n",
"[83]\tvalid_0's multi_logloss: 0.163419\n",
"[84]\tvalid_0's multi_logloss: 0.163196\n",
"[85]\tvalid_0's multi_logloss: 0.162951\n",
"[86]\tvalid_0's multi_logloss: 0.162872\n",
"[87]\tvalid_0's multi_logloss: 0.162699\n",
"[88]\tvalid_0's multi_logloss: 0.162559\n",
"[89]\tvalid_0's multi_logloss: 0.16243\n",
"[90]\tvalid_0's multi_logloss: 0.162293\n",
"[91]\tvalid_0's multi_logloss: 0.162156\n",
"[92]\tvalid_0's multi_logloss: 0.162047\n",
"[93]\tvalid_0's multi_logloss: 0.161981\n",
"[94]\tvalid_0's multi_logloss: 0.161849\n",
"[95]\tvalid_0's multi_logloss: 0.161724\n",
"[96]\tvalid_0's multi_logloss: 0.161577\n",
"[97]\tvalid_0's multi_logloss: 0.161448\n",
"[98]\tvalid_0's multi_logloss: 0.161383\n",
"[99]\tvalid_0's multi_logloss: 0.161339\n",
"[100]\tvalid_0's multi_logloss: 0.16119\n",
"Did not meet early stopping. Best iteration is:\n",
"[100]\tvalid_0's multi_logloss: 0.16119\n"
]
}
],
"source": [
"p_val = np.zeros((trn.shape[0], n_class))\n",
"p_tst = np.zeros((tst.shape[0], n_class))\n",
"for i, (i_trn, i_val) in enumerate(cv.split(trn, y), 1):\n",
" print(f'training model for CV #{i}')\n",
" clf = LGBMClassifier(**params)\n",
" clf.fit(trn[i_trn], y[i_trn],\n",
" eval_set=[(trn[i_val], y[i_val])],\n",
" eval_metric='multiclass',\n",
" early_stopping_rounds=10)\n",
" \n",
" p_val[i_val, :] = clf.predict_proba(trn[i_val])\n",
" p_tst += clf.predict_proba(tst) / n_fold"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:54:00.428750Z",
"start_time": "2020-10-05T08:54:00.363125Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"93.2466%\n"
]
}
],
"source": [
"print(f'{accuracy_score(y, np.argmax(p_val, axis=1)) * 100:.4f}%')"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:54:00.469957Z",
"start_time": "2020-10-05T08:54:00.431515Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(320000, 3) (80000, 3)\n"
]
}
],
"source": [
"print(p_val.shape, p_tst.shape)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:54:01.328066Z",
"start_time": "2020-10-05T08:54:00.472868Z"
}
},
"outputs": [],
"source": [
"np.savetxt(p_val_file, p_val, fmt='%.6f', delimiter=',')\n",
"np.savetxt(p_tst_file, p_tst, fmt='%.6f', delimiter=',')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 피처 중요도 시각화"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:54:01.664554Z",
"start_time": "2020-10-05T08:54:01.331052Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABGEAAAHyCAYAAABLWtN4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOzdfVSVdb7//9dGUCmozSQCciM6gEsUb1IMDe+d4+ioM9OoiHdnmCYaUCN1Kss75njDGDpWgp6OHfXIaEPHOuHc6KggI0klGokrHNrURtCMHBtsgC9S7P37o9X+Sd6B4d6X+Hystdfa1/W5Pp/rva8+rYWvdV2fy1RTU2MXAAAAAAAAbis3VxcAAAAAAABwNyCEAQAAAAAAcAJCGAAAAAAAACcghAEAAAAAAHACQhgAAAAAAAAnIIQBAAAAAABwAkIYAAAAAAAAJyCEAQAAAAAAcAJCGABtwmKxuLoEQBJzEcbAPIRRMBdhFMxFGIER5iEhDAAAAAAAgBMQwgAAAAAAADgBIQwAAAAAAIATmGpqauyuLgLfnXn7OVeXAAAAAABAm6hJCGzzMS0Wi8LDw9t83NYw9J0wcXFxSkpKuqW+Q4cOVVpaWhtX1DLFxcUym806c+aMS84PAAAAAACMx9AhDAAAAAAAQHtBCHMdNptNTU1Nd815AQAAAADA7WWYEKa+vl5JSUkKDAxUeHi4NmzY0OK+Fy5cUHx8vPz9/dW3b19lZWVddcylS5eUkpKisLAwBQUFaeLEiSouLna079q1S4GBgTpw4ICGDh0qX19flZWVqbGxUStXrlRkZKQCAgI0evRo5ebmNhv70KFDio6Olp+fnyZMmKDy8vIW136985rN5qs+UVFRLR4XAAAAAAAYi7urC/jG8uXLlZ+fr507dyogIEDr1q1TYWGhJk2adNO+ycnJqqqq0ptvvilPT08999xzqqysdLTb7XbFxcXpvvvuU3Z2tnx8fLR7925NmTJFRUVF8vf3lyQ1NDQoPT1dGzduVJcuXeTn56d58+bJarVq69atjrBkxowZysvLU1RUlM6ePatZs2Zp7ty5euyxx/TBBx9o6dKlrfrt3z7vN0HMN2pra/WTn/xEsbGxrRoXAAAAAAAYhyFCmNraWmVlZSkjI0Njx46VJGVmZioyMvKmfcvLy3Xw4EHt379fMTExkqQtW7ZowIABjmOOHDmiU6dOqby8XJ6enpKkZcuWaf/+/crOzlZKSookqampSenp6Y6+VqtVe/bsUUlJiYKDgyVJiYmJys/P144dO7RhwwZt27ZNQUFBev7552UymRQREaHy8nKtWbOmxb//2+eVpPvvv1/S148nPfHEE/L399fGjRtbPCYAAAAAAHcqi8VyR417pRu9gckQIYzValVjY6OGDBni2Ofl5aU+ffrctG9ZWZnc3Nw0aNAgx76QkBAFBAQ4tk+ePKn6+nqFhYU169vQ0CCr1erYdnd3b/bIz8mTJ2W32x3hzjcuX76sESNGOM4/ePBgmUwmR/uVv6Mlvn3eK61cuVIffPCB8vLy1Llz51aNCwAAAADAneh2vEraCK+oNkQI0xauDEG+zWazqWvXrtq3b99Vbd7e3o7vnTp1UocOHZr1M5lMysvLk4eHR7N+bRmIfPu839i9e7e2b9+uffv2qWvXrm12PgAAAAAA4HyGCGF69OghDw8PFRUVKTQ0VJJUV1en0tJSx/b1REREyGaz6cSJE3rooYckSVVVVTp//rzjmP79++uzzz6Tm5vbTce7Ur9+/WS321VdXe248+XbevXqpb1798putzuCoKKiohaf43reffddLV68WK+88goL8gIAAAAA0A4Y4u1IXl5emjNnjlJTU3X48GGdPn1a8+fPl81mu2nf8PBwjRs3TgsXLtSxY8dUUlKi5ORkx9ovkjRq1CjFxMRo5syZOnjwoCoqKnTs2DGtXbtWhYWF1x07LCxM06dPV3JysnJyclRRUaHi4mJt2rRJe/fulSQlJCSosrJSS5YskcViUU5OjrZv3/6drkd1dbVmz56tRx99VIMHD1Z1dbWqq6v1j3/84zuNCwAAAAAAXMcQIYwkrVq1SrGxsZo9e7YmT56s3r17a9iwYS3qu3nzZoWEhGjKlCmKj4/XtGnTFBIS4mg3mUx67bXXNHz4cKWkpCg6OloJCQkqLy9vtnbMtWRmZmrWrFlasWKFoqOjFRcXp6NHjzrGDw4OVlZWlnJzcxUbG6vNmzdr5cqVt34hJH344Ye6cOGCMjIy1KtXL8dn9OjR32lcAAAAAADgOqaamhq7q4sAcOczwiJXgMRchDEwD2EUzEUYBXMRRmCEeWiYO2EAAAAAAADaM0MszHsjhYWFmjZt2nXbz50758RqWm/q1Kl6++23r9m2aNEiLV682MkVAQAAAAAAVzB8CDNw4EAVFBS4uoxb9tJLL6mhoeGabT4+Pk6uBgAAAAAAuIrhQxhPT0/17NnT1WXcsm7durm6BAAAAAAAYACsCQMAAAAAAOAEhDAAAAAAAABOQAgDAAAAAADgBIQwAAAAAAAATkAIAwAAAAAA4ASEMAAAAAAAAE5ACAMAAAAAAOAEppqaGruri8B3Z95+ztUlAAAAAABuk5qEQFeXcMezWCwKDw93aQ3cCQMAAAAAAOAEd1UIExcXp6SkJKef9+LFizKbzSooKHD6uQEAAAAAgDHcVSEMAAAAAACAqxDCtMKXX37p6hIAAAAAAMAdqt2GMPX19UpKSlJgYKDCw8O1YcOGZu2NjY1auXKlIiMjFRAQoNGjRys3N9fRXlBQILPZrAMHDmjMmDHy9fVVbm6u7Ha7XnzxRQ0YMED+/v4aNmyYsrOzm4393nvvaeTIkfLz89Pw4cN1/PjxFtf9zXkvXrzo2HfmzBmZzWYVFxff4tUAAAAAAACu5u7qAm6X5cuXKz8/Xzt37lRAQIDWrVunwsJCTZo0SZI0b948Wa1Wbd26VYGBgTpw4IBmzJihvLw8RUVFOcZJTU3V6tWr1bNnT3l5eWn16tXKycnR+vXrFRYWpqKiIqWkpMhsNmv8+PGqra3V9OnT9fDDD2vLli06f/68nn32WVddBgAAAAAAYBDtMoSpra1VVlaWMjIyNHbsWElSZmamIiMjJUlWq1V79uxRSUmJgoODJUmJiYnKz8/Xjh07mt0188wzz2jMmDGSpLq6OmVmZuqNN97QsGHDJEmhoaE6ceKEXnnlFY0fP1579uxRY2OjMjMz5eXlpcjISC1evFiPP/64My8BAAAAAKAdsVgsri6hXXDGdbzRa7DbZQhjtVrV2NioIUOGOPZ5eXmpT58+kqSTJ0/KbrcrJiamWb/Lly9rxIgRzfYNHDjQ8b2srEwNDQ2aOnWqTCaTY/+XX36pkJAQxzF9+vSRl5eXo/3KOgAAAAAAaK0b/cMeLWOxWFx+HdtlCHMzNptNJpNJeXl58vDwaNbWuXPnZtv33ntvs36S9OqrrzruoPmGu3vbXEo3t6+X6bHb7Y59X331VZuMDQAAAAAAXKddhjA9evSQh4eHioqKFBoaKunrR4lKS0sVGhqqfv36yW63q7q6+qo7X26kV69e6tSpk6qqqjRy5MjrHrN7927V1dU5ApyioqIWn6NLly6SpE8//dTx/dSpUy3uDwAAAAAAjKldvh3Jy8tLc+bMUWpqqg4fPqzTp09r/vz5jjtZwsLCNH36dCUnJysnJ0cVFRUqLi7Wpk2btHfv3uuO6+3trQULFmj58uXKysrSxx9/rJKSEm3btk07duyQJE2dOlXu7u6aP3++Tp8+rcOHD1/1ZqYb6dmzp4KCgvTb3/5W5eXlysvLU3p6+ne6HgAAAAAAwPXa5Z0wkrRq1SrV1dVp9uzZ8vT0VGJiourr6x3tmZmZWr9+vVasWKFPPvlEPj4+evDBBzV8+PAbjrt06VL5+voqIyNDixcvlre3t6KiopSSkiLp6wAoOztbixYt0siRIxUeHq7U1FTFx8e3qG4PDw/993//txYvXqzY2FhFRUVpxYoViouLu/WLAQAAAAAAXM5UU1Njv/lhAHBjRljkCpCYizAG5iGMgrkIo2AuwgiMMA/b5eNIAAAAAAAARkMI42QLFy5UYGDgNT8LFy50dXkAAAAAAOA2abdrwhjVc889pwULFlyzzdvb28nVAAAAAAAAZyGEcTJfX1/5+vq6ugwAAAAAAOBkPI4EAAAAAADgBIQwAAAAAAAATkAIAwAAAAAA4ASEMAAAAAAAAE5ACAMAAAAAAOAEhDAAAAAAAABOQAgDAAAAAADgBKaamhq7q4vAd2fefs7VJQAAAADAXaUmIdDVJaAVLBaLwsPDXVqDoe+EiYuLU1JS0i31HTp0qNLS0tq4opYpLi6W2WzWmTNnbnpsQUGBzGazLl686ITKAAAAAACAqxg6hLkbPPTQQyorK9P3vvc9V5cCAAAAAABuI0KY67DZbGpqarrt5+nYsaP8/PxkMplu+7kAAAAAAIDrGCaEqa+vV1JSkgIDAxUeHq4NGza0uO+FCxcUHx8vf39/9e3bV1lZWVcdc+nSJaWkpCgsLExBQUGaOHGiiouLHe27du1SYGCgDhw4oKFDh8rX11dlZWVqbGzUypUrFRkZqYCAAI0ePVq5ubnNxj506JCio6Pl5+enCRMmqLy8vMW1X+txpKysLPXt21cBAQGKi4vTK6+8IrPZ3OIxAQAAAACA8RgmhFm+fLny8/O1c+dO5eTkqKSkRIWFhS3qm5ycLKvVqjfffFO7du3SH/7wB1VWVjra7Xa74uLidP78eWVnZ+vIkSMaNmyYpkyZok8//dRxXENDg9LT07Vx40a9++67Cg4O1rx583T06FFt3bpVb7/9tuLj4zVjxgydOnVKknT27FnNmjVLo0aNUkFBgRITE7Vy5cpbvg7Hjh3TE088oV/+8pcqKCjQxIkTXba2DQAAAAAAaDvuri5Akmpra5WVlaWMjAyNHTtWkpSZmanIyMib9i0vL9fBgwe1f/9+xcTESJK2bNmiAQMGOI45cuSITp06pfLycnl6ekqSli1bpv379ys7O1spKSmSpKamJqWnpzv6Wq1W7dmzRyUlJQoODpYkJSYmKj8/Xzt27NCGDRu0bds2BQUF6fnnn5fJZFJERITKy8u1Zs2aW7oWL7/8ssaMGaMnn3xSkhQWFqb33ntP//M//3NL4wEAAAAAbg+LxeLqEtBKzvhvdqM3MBkihLFarWpsbNSQIUMc+7y8vNSnT5+b9i0rK5Obm5sGDRrk2BcSEqKAgADH9smTJ1VfX6+wsLBmfRsaGmS1Wh3b7u7uioqKatbPbrc7wp1vXL58WSNGjHCcf/Dgwc3WdLnyd7TWhx9+qB/+8IfN9g0aNIgQBgAAAAAMxtWvO0brGOEV1YYIYdrCjRa2tdls6tq1q/bt23dVm7e3t+N7p06d1KFDh2b9TCaT8vLy5OHh0axf586d26BqAAAAAABwtzBECNOjRw95eHioqKhIoaGhkqS6ujqVlpY6tq8nIiJCNptNJ06c0EMPPSRJqqqq0vnz5x3H9O/fX5999pnc3NxuOt6V+vXrJ7vdrurqasedL9/Wq1cv7d27V3a73REEFRUVtfgc1/o9Vy4YLEnvvffeLY8HAAAAAACMwRAL83p5eWnOnDlKTU3V4cOHdfr0ac2fP182m+2mfcPDwzVu3DgtXLhQx44dU0lJiZKTkx1rv0jSqFGjFBMTo5kzZ+rgwYOqqKjQsWPHtHbt2hsu/hsWFqbp06crOTlZOTk5qqioUHFxsTZt2qS9e/dKkhISElRZWaklS5bIYrEoJydH27dvv+Vr8fjjjysvL08vvfSSPvroI+3cuVN/+tOfbnk8AAAAAABgDIYIYSRp1apVio2N1ezZszV58mT17t1bw4YNa1HfzZs3KyQkRFOmTFF8fLymTZumkJAQR7vJZNJrr72m4cOHKyUlRdHR0UpISFB5eXmztWOuJTMzU7NmzdKKFSsUHR2tuLg4HT161DF+cHCwsrKylJubq9jYWG3evPk7vR1pyJAhevHFF/Xyyy/r4Ycf1p///GelpKTw+BMAAAAAAHc4U01Njd3VReDGnn32Wf3tb39r8Su7AVcwwiJXgMRchDEwD2EUzEUYBXMRRmCEeWiINWHQ3EsvvaRRo0bJy8tL+fn52r59u5YvX+7qsgAAAAAAwHdg+BCmsLBQ06ZNu277uXPnnFhN602dOlVvv/32NdsWLVqkxYsXX7X/m3VnvvjiC3Xv3l0rVqxQUlLS7S4VAAAAAADcRoYPYQYOHKiCggJXl3HLXnrpJTU0NFyzzcfH55r7v8vCvgAAAAAAwJgMH8J4enqqZ8+eri7jlnXr1s3VJQAAAAAAAAMwzNuRAAAAAAAA2jNCGAAAAAAAACcghAEAAAAAAHACQhgAAAAAAAAnIIQBAAAAAABwAkIYAAAAAAAAJyCEAQAAAAAAcAJCGAAAAAAAACcw1dTU2F1dBL478/Zzri4BAAAAAO4aNQmBri4BrWSxWBQeHu7SGrgTphWeeuop/ehHP2rRsbt27VJg4I3/p7zWMTt27FDfvn3l4+OjtLS0W64VAAAAAAAYCyGMCz3yyCN6//33Hds1NTX69a9/rQULFuj06dNasGCBfvSjH+mpp55yYZUAAAAAAKAtuLu6AFdobGxUx44dXV2GPD095enp6diurKzUV199pfHjx8vf39+FlQEAAAAAgLZ2V9wJ86Mf/UiLFi3SsmXL9P3vf1/jx4/X3//+d02fPl1BQUEKCwvTo48+qurqakefpqYmLVu2TN27d1f37t21ZMkSNTU1NRv36NGjGjdunAIDAxUSEqIxY8aotLS02TF/+9vfNHToUHXr1k2TJk1SRUWFo+3Kx5F27dqlESNGSJIGDBggs9mspKQkHT16VFu3bpXZbJbZbNaZM2du01UCAAAAAAC3010RwkjSa6+9Jrvdrn379mndunWaOHGievfurdzcXL355puqra3VzJkzZbPZJEkZGRnauXOnXnjhBR08eFBNTU363//9X8d4X331lWbOnKmYmBi99dZbOnTokJKSktShQwfHMZcvX9bvfvc7ZWRk6MCBA7p06ZIWLVp0zfoeeeQRvf7665KkvLw8lZWV6be//a2GDBmiWbNmqaysTGVlZQoKCrqNVwkAAAAAANwud83jSCEhIVqzZo0kac2aNerbt69+85vfONpffvllhYaGqri4WIMGDdKWLVv0xBNP6Kc//akkad26dcrLy3Mc/69//UuXLl3SD3/4Q/Xo0UOSFBER0eycX331ldavX+9YfXnBggWaP3++7Ha7TCZTs2M9PT31ve99T5L0wAMPyM/PT5Lk4eGhe+65x7ENAAAAAHA9i8Xi6hJwC5zx3+1Gb2C6a0KYAQMGOL6fPHlShYWF13x7kdVqVVhYmD799FNFR0c79ru5uWnQoEE6d+7rV0H7+Pho5syZ+tnPfqaRI0dqxIgR+vGPf6zg4GBHn06dOjW7+P7+/mpsbFRNTY18fHxux88EAAAAADiBq191jNYzwiuq75oQ5t5773V8t9ls+rd/+zetXr36quN8fX0djyTdzObNm5WUlKTc3Fzt27dPq1ev1q5duzR27FhJkrt788v7zd0vLR0fAAAAAAC0H3fNmjBX6t+/v/7+978rODhYPXv2bPbx9vbW/fffL39/fx0/ftzRx26367333rtqrKioKD355JP685//rNjYWL366qttWmvHjh2vWhAYAAAAAADcee7KEOaXv/ylvvjiCyUkJOj48eOqqKhQfn6+UlJS9K9//UuS9Ktf/UovvviicnJyZLFYtGTJkmZvT6qoqFBqaqreffddVVZW6siRI/rggw/Uq1evNq01JCREJ06c0JkzZ3Tx4kXuogEAAAAA4A51V4YwAQEB+utf/yo3Nzf97Gc/U0xMjH7961+rY8eO6tSpkyRp/vz5mjVrlhYsWKCxY8fKZrNp2rRpjjHuuecelZeX6+c//7kGDx6s5ORkTZs2TU8++WSb1rpgwQJ17NhRMTEx+v73v6+qqqo2HR8AAAAAADiHqaamxu7qIgDc+YywyBUgMRdhDMxDGAVzEUbBXIQRGGEe3pV3wgAAAAAAADgbIQwAAAAAAIATEMIAAAAAAAA4ASEMAAAAAACAExDCAAAAAAAAOAEhDAAAAAAAgBMQwgAAAAAAADgBIQwAAAAAAIATEMIAAAAAAAA4ASEMAAAAAACAExDCAAAAAAAAOIGppqbG7uoi8N2Zt59zdQkAAAAAcFvUJAS6ugS0AxaLReHh4S6t4Y64EyYuLk5JSUm31Hfo0KFKS0tr44papri4WGazWWfOnLnpsQUFBTKbzbp48aITKgMAAAAAAM52R4Qwd4OHHnpIZWVl+t73vufqUgAAAAAAwG1ACHMTNptNTU1Nt/08HTt2lJ+fn0wm020/FwAAAAAAcD7DhTD19fVKSkpSYGCgwsPDtWHDhhb3vXDhguLj4+Xv76++ffsqKyvrqmMuXbqklJQUhYWFKSgoSBMnTlRxcbGjfdeuXQoMDNSBAwc0dOhQ+fr6qqysTI2NjVq5cqUiIyMVEBCg0aNHKzc3t9nYhw4dUnR0tPz8/DRhwgSVl5e3uPZvP44UFRUls9l81acljzYBAAAAAADjcXd1Ad+2fPly5efna+fOnQoICNC6detUWFioSZMm3bRvcnKyqqqq9Oabb8rT01PPPfecKisrHe12u11xcXG67777lJ2dLR8fH+3evVtTpkxRUVGR/P39JUkNDQ1KT0/Xxo0b1aVLF/n5+WnevHmyWq3aunWrI6SZMWOG8vLyFBUVpbNnz2rWrFmaO3euHnvsMX3wwQdaunTpLV+Hw4cPN7sD54knnpDValXXrl1veUwAAAAAAOA6hgphamtrlZWVpYyMDI0dO1aSlJmZqcjIyJv2LS8v18GDB7V//37FxMRIkrZs2aIBAwY4jjly5IhOnTql8vJyeXp6SpKWLVum/fv3Kzs7WykpKZKkpqYmpaenO/parVbt2bNHJSUlCg4OliQlJiYqPz9fO3bs0IYNG7Rt2zYFBQXp+eefl8lkUkREhMrLy7VmzZpbuhZdunRxfH/hhRdUVFSk3NxcR90AAAAAcLewWCyuLgHthDPm0o3ewGSoEMZqtaqxsVFDhgxx7PPy8lKfPn1u2resrExubm4aNGiQY19ISIgCAgIc2ydPnlR9fb3CwsKa9W1oaJDVanVsu7u7Kyoqqlk/u93uCHe+cfnyZY0YMcJx/sGDBzdb0+XK33Gr9u3bp7S0NL3++uvq0aPHdx4PAAAAAO40rn6tMNoHI7yi2lAhTFu40cK2NptNXbt21b59+65q8/b2dnzv1KmTOnTo0KyfyWRSXl6ePDw8mvXr3LlzG1R9baWlpUpMTFR6erpiY2Nv23kAAAAAAMDtZ6gQpkePHvLw8FBRUZFCQ0MlSXV1dSotLXVsX09ERIRsNptOnDihhx56SJJUVVWl8+fPO47p37+/PvvsM7m5ud10vCv169dPdrtd1dXVjjtfvq1Xr17au3ev7Ha7IwgqKipq8Tm+7eLFi5oxY4bmzp2ruXPn3vI4AAAAAADAGAz1diQvLy/NmTNHqampOnz4sE6fPq358+fLZrPdtG94eLjGjRunhQsX6tixYyopKVFycnKzNVRGjRqlmJgYzZw5UwcPHlRFRYWOHTumtWvXqrCw8Lpjh4WFafr06UpOTlZOTo4qKipUXFysTZs2ae/evZKkhIQEVVZWasmSJbJYLMrJydH27dtv+VrMmTNH3bp10/z581VdXe34OON12QAAAAAAoO0Z6k4YSVq1apXq6uo0e/ZseXp6KjExUfX19S3qu3nzZj3xxBOaMmWKHnjgAT3zzDP6xz/+4Wg3mUx67bXXtHr1aqWkpOjChQvq2rWrHnroIcXHx99w7MzMTK1fv14rVqzQJ598Ih8fHz344IMaPny4JCk4OFhZWVlaunSpduzYoQEDBmjlypVKTEy8pevwTSjUu3fvZvtPnjyp7t2739KYAAAAAADAdUw1NTV2VxcB4M5nhEWuAIm5CGNgHsIomIswCuYijMAI89BQjyMBAAAAAAC0V4Z7HOl6CgsLNW3atOu2nzt3zonVtN7UqVP19ttvX7Nt0aJFWrx4sZMrAgAAAAAAznTHhDADBw5UQUGBq8u4ZS+99JIaGhqu2ebj4+PkagAAAAAAgLPdMSGMp6enevbs6eoyblm3bt1cXQIAAAAAAHAh1oQBAAAAAABwAkIYAAAAAAAAJyCEAQAAAAAAcAJCGAAAAAAAACcghAEAAAAAAHACQhgAAAAAAAAnIIQBAAAAAABwAkIYAAAAAAAAJ3B3dQFoG+bt51xdAu5690hvMQ9hBMxFGAHzEEbBXGzPahICXV0CgFYy3J0wcXFxSkpKuqW+Q4cOVVpaWhtX1DLFxcUym806c+aMS84PAAAAAACMzXAhDAAAAAAAQHtECHMFm82mpqYmV5cBAAAAAADaIZeGMPX19UpKSlJgYKDCw8O1YcOGFve9cOGC4uPj5e/vr759+yorK+uqYy5duqSUlBSFhYUpKChIEydOVHFxsaN9165dCgwM1IEDBzR06FD5+vqqrKxMjY2NWrlypSIjIxUQEKDRo0crNze32diHDh1SdHS0/Pz8NGHCBJWXl7e49qioKJnN5qs+3zzKVF5erokTJ8rPz0+DBw/WgQMHFBgYqF27drX4HAAAAAAAwFhcujDv8uXLlZ+fr507dyogIEDr1q1TYWGhJk2adNO+ycnJqqqq0ptvvilPT08999xzqqysdLTb7XbFxcXpvvvuU3Z2tnx8fLR7925NmTJFRUVF8vf3lyQ1NDQoPT1dGzduVJcuXeTn56d58+bJarVq69atjpBmxowZysvLU1RUlM6ePatZs2Zp7ty5euyxx/TBBx9o6dKlLf7dhw8fbnbHzRNPPCGr1aquXbvKZrNp9uzZ6tq1qw4ePKiGhgY9++yzunz5ciuuLAAAAAAAMBqXhTC1tbXKyspSRkaGxo4dK0nKzMxUZGTkTfuWl5fr4MGD2r9/v2JiYiRJW7Zs0YABAxzHHDlyRKdOnVJ5ebk8PT0lSdMB/LkAACAASURBVMuWLdP+/fuVnZ2tlJQUSVJTU5PS09Mdfa1Wq/bs2aOSkhIFBwdLkhITE5Wfn68dO3Zow4YN2rZtm4KCgvT888/LZDIpIiJC5eXlWrNmTYt+e5cuXRzfX3jhBRUVFSk3N1eenp7Kzc2VxWLRG2+8oW7dukmS1q5dq/Hjx7dobAAAAAB3B4vF4uoSWuVOqxftkzPmYXh4+HXbXBbCWK1WNTY2asiQIY59Xl5e6tOnz037lpWVyc3NTYMGDXLsCwkJUUBAgGP75MmTqq+vV1hYWLO+DQ0Nslqtjm13d3dFRUU162e32x3hzjcuX76sESNGOM4/ePBgmUwmR/uVv6Ol9u3bp7S0NL3++uvq0aOHJOnDDz9UQECAI4CRpAcffFBubizfAwAAAOD/d6N/6BmNxWK5o+pF+2SEeejSx5G+qytDkG+z2Wzq2rWr9u3bd1Wbt7e343unTp3UoUOHZv1MJpPy8vLk4eHRrF/nzp3boOqvlZaWKjExUenp6YqNjW2zcQEAAAAAgDG5LITp0aOHPDw8VFRUpNDQUElSXV2dSktLHdvXExERIZvNphMnTuihhx6SJFVVVen8+fOOY/r376/PPvtMbm5uNx3vSv369ZPdbld1dbXjzpdv69Wrl/bu3Su73e4IgoqKilp8josXL2rGjBmaO3eu5s6de9VvO3/+vM6fP++4s6e4uFg2m63F4wMAAAAAAONx2TMuXl5emjNnjlJTU3X48GGdPn1a8+fPb1HYEB4ernHjxmnhwoU6duyYSkpKlJyc7Fj7RZJGjRqlmJgYzZw5UwcPHlRFRYWOHTumtWvXqrCw8Lpjh4WFafr06UpOTlZOTo4qKipUXFysTZs2ae/evZKkhIQEVVZWasmSJbJYLMrJydH27dtb/NvnzJmjbt26af78+aqurnZ8mpqaNHr0aIWHhyspKUmnTp1SUVGRli5dKnd39xve+QMAAAAAAIzNpQuNrFq1SrGxsZo9e7YmT56s3r17a9iwYS3qu3nzZoWEhGjKlCmKj4/XtGnTFBIS4mg3mUx67bXXNHz4cKWkpCg6OloJCQkqLy9vtnbMtWRmZmrWrFlasWKFoqOjFRcXp6NHjzrGDw4OVlZWlnJzcxUbG6vNmzdr5cqVLf7dhYWFeuedd9S7d2/16tXL8Tl79qzc3Nz0+9//XpcvX9bYsWOVlJSkxYsXy2QytenjUAAAAAAAwLlMNTU1dlcXgRs7deqUhg8frvz8/GZvgAKMxAiLXAEScxHGwDyEUTAXYRTMRRiBEebhHb0wb3v1xz/+Uffee6969uypyspKLV26VH379lX//v1dXRoAAAAAALhFhgxhCgsLNW3atOu2nzt3zonVtN7UqVP19ttvX7Nt0aJFWrx48Q3719bWKjU1VefOnZPZbFZsbKzWrl3LmjAAAAAAANzBDBnCDBw4UAUFBa4u45a99NJLamhouGabj4/PTfvHx8crPj6+rcsCAAAAAAAuZMgQxtPTUz179nR1GbesW7duri4BAAAAAAAYjEvfjgQAAAAAAHC3IIQBAAAAAABwAkIYAAAAAAAAJyCEAQAAAAAAcAJCGAAAAAAAACcghAEAAAAAAHACQhgAAAAAAAAncHd1AWgb5u3nXF0C7nr3SG8xD2EEzEUYAfPQFWoSAl1dAgAAN3TX3gkTFxenpKQkp5/34sWLMpvNKigocPq5AQAAAACA69y1IQwAAAAAAIAzEcLcoi+//PKuOi8AAAAAAPhu7ooQpr6+XklJSQoMDFR4eLg2bNjQrL2xsVErV65UZGSkAgICNHr0aOXm5jraCwoKZDabdeDAAY0ZM0a+vr7Kzc2V3W7Xiy++qAEDBsjf31/Dhg1TdnZ2s7Hfe+89jRw5Un5+fho+fLiOHz/e4rqvd14AAAAAAHDnuSsW5l2+fLny8/O1c+dOBQQEaN26dSosLNSkSZMkSfPmzZPVatXWrVsVGBioAwcOaMaMGcrLy1NUVJRjnNTUVK1evVo9e/aUl5eXVq9erZycHK1fv15hYWEqKipSSkqKzGazxo8fr9raWk2fPl0PP/ywtmzZovPnz+vZZ59tdf3fPi8AAAAAALjztPsQpra2VllZWcrIyNDYsWMlSZmZmYqMjJQkWa1W7dmzRyUlJQoODpYkJSYmKj8/Xzt27Gh218wzzzyjMWPGSJLq6uqUmZmpN954Q8OGDZMkhYaG6sSJE3rllVc0fvx47dmzR42NjcrMzJSXl5ciIyO1ePFiPf744636DVeeFwAAANdmsVhcXYIhcV1gFMxFGIEz5mF4ePh129p9CGO1WtXY2KghQ4Y49nl5ealPnz6SpJMnT8putysmJqZZv8uXL2vEiBHN9g0cONDxvaysTA0NDZo6dapMJpNj/5dffqmQkBDHMX369Gl298qVdbTUlecFAADAtd3oj967lcVi4brAEJiLMAIjzMN2H8LcjM1mk8lkUl5enjw8PJq1de7cudn2vffe26yfJL366quOO2i+4e7etpf1yvMCAAAAAIA7U7sPYXr06CEPDw8VFRUpNDRU0tePEpWWlio0NFT9+vWT3W5XdXX1VXe+3EivXr3UqVMnVVVVaeTIkdc9Zvfu3aqrq3MEKUVFRd/5NwEAAAAAgDtPuw9hvLy8NGfOHKWmpqpLly7y9/fX888/77iTJSwsTNOnT1dycrLWrFmj/v3765///Kfeeustde/eXVOmTLnmuN7e3lqwYIGWL18uu92uhx9+WLW1tTp+/Ljc3Nz085//XFOnTtWqVas0f/58Pf300/r000+vejMTAAAAAAC4O7T7EEaSVq1apbq6Os2ePVuenp5KTExUfX29oz0zM1Pr16/XihUr9Mknn8jHx0cPPvighg8ffsNxly5dKl9fX2VkZGjx4sXy9vZWVFSUUlJSJH0dAGVnZ2vRokUaOXKkwsPDlZqaqvj4+Nv6ewEAAAAAgPGYampq7K4uAsCdzwiLXAEScxHGwDyEUTAXYRTMRRiBEeahm0vPDgAAAAAAcJcghHGhhQsXKjAw8JqfhQsXuro8AAAAAADQhu6KNWGM6rnnntOCBQuu2ebt7e3kagAAAAAAwO1ECONCvr6+8vX1dXUZAAAAAADACXgcCQAAAAAAwAkIYQAAAAAAAJyAEAYAAAAAAMAJCGEAAAAAAACcgBAGAAAAAADACQhhAAAAAAAAnIAQBgAAAAAAwAkIYQAAAAAAAJzA3dUFoG2Yt59zdQm4690jvcU8hBEwF2EEzMMr1SQEuroEAAAM4a66EyYuLk5JSUlOP+/FixdlNptVUFDg9HMDAAAAAABjuKtCGAAAAAAAAFchhGmFL7/80tUlAAAAAACAO1S7DWHq6+uVlJSkwMBAhYeHa8OGDc3aGxsbtXLlSkVGRiogIECjR49Wbm6uo72goEBms1kHDhzQmDFj5Ovrq9zcXNntdr344osaMGCA/P39NWzYMGVnZzcb+7333tPIkSPl5+en4cOH6/jx462q/a9//asGDx4sPz8/TZgwQa+//rrMZrPOnDlz6xcEAAAAAAC4VLtdmHf58uXKz8/Xzp07FRAQoHXr1qmwsFCTJk2SJM2bN09Wq1Vbt25VYGCgDhw4oBkzZigvL09RUVGOcVJTU7V69Wr17NlTXl5eWr16tXJycrR+/XqFhYWpqKhIKSkpMpvNGj9+vGprazV9+nQ9/PDD2rJli86fP69nn322xXVXVVVpzpw5+uUvf6mEhASVlpZq6dKlbX59AAAAAACAc7XLEKa2tlZZWVnKyMjQ2LFjJUmZmZmKjIyUJFmtVu3Zs0clJSUKDg6WJCUmJio/P187duxodtfMM888ozFjxkiS6urqlJmZqTfeeEPDhg2TJIWGhurEiRN65ZVXNH78eO3Zs0eNjY3KzMyUl5eXIiMjtXjxYj3++OMtqn3btm0KDQ3V2rVrJUnh4eEqLy/XqlWr2ubiAAAAOJnFYnF1CXc1rj+MgrkII3DGPAwPD79uW7sMYaxWqxobGzVkyBDHPi8vL/Xp00eSdPLkSdntdsXExDTrd/nyZY0YMaLZvoEDBzq+l5WVqaGhQVOnTpXJZHLs//LLLxUSEuI4pk+fPvLy8nK0X1nHzXz44YfNzilJgwcPbnF/AAAAo7nRH6O4vSwWC9cfhsBchBEYYR62yxDmZmw2m0wmk/Ly8uTh4dGsrXPnzs2277333mb9JOnVV1913EHzDXf3u/JSAgAAAACAFmqXyUGPHj3k4eGhoqIihYaGSvr6UaLS0lKFhoaqX79+stvtqq6uvurOlxvp1auXOnXqpKqqKo0cOfK6x+zevVt1dXWOAKeoqKjF54iIiNBf/vKXZvtOnDjR4v4AAAAAAMCY2uXbkby8vDRnzhylpqbq8OHDOn36tObPn++4kyUsLEzTp09XcnKycnJyVFFRoeLiYm3atEl79+697rje3t5asGCBli9frqysLH388ccqKSnRtm3btGPHDknS1KlT5e7urvnz5+v06dM6fPjwVW9mupGEhARZrVYtW7ZMFotFe/fu1fbt2yWp2SNQAAAAAADgztIuQxhJWrVqlWJjYzV79mxNnjxZvXv3diymK329UO+sWbO0YsUKRUdHKy4uTkePHnWs7XI9S5cu1ZIlS5SRkaGYmBj99Kc/1d69e9W9e3dJXwdA2dnZ+uijjzRy5EgtW7ZMqampLa47JCREO3fu1L59+xQbG6stW7bomWeekXT1o1IAAAAAAODOYaqpqbG7ugjc2JYtW5SWlqYzZ85wNwwMywiLXAEScxHGwDyEUTAXYRTMRRiBEeZhu1wT5k63detWPfjgg3rggQd0/PhxpaenKz4+ngAGAAAAAIA7GCGMky1cuFCvvfbaNdumT5+ujRs36uOPP9bvfvc7ff755+rWrZt+8Ytf6Omnn3ZypQAAAAAAoC0RwjjZc889pwULFlyzzdvbW5KUlpamtLQ0Z5YFAAAAAABuM0IYJ/P19ZWvr6+rywAAAAAAAE7Wbt+OBAAAAAAAYCSEMAAAAAAAAE5ACAMAAAAAAOAEhDAAAAAAAABOQAgDAAAAAADgBIQwAAAAAAAATkAIAwAAAAAA4ATuri4AbcO8/ZyrS8Bd7x7pLeYhjIC5CCNo2TysSQh0Qi0AAMAouBMGAAAAAADACe7IECYuLk5JSUm31Hfo0KFKS0tr44papri4WGazWWfOnHHJ+QEAAAAAgOvckSEMAAAAAADAneaW1oT56KOP9NZbb+nChQuaNm2aunfvrsbGRlVXV8vPz08dO3Zs6zoNw2azyW63q0OHDq4uBQAAAAAA3EFadSeMzWZTSkqKoqOj9eSTT2rt2rWqqKiQJDU2Nurhhx/Wyy+/3KYF1tfXKykpSYGBgQoPD9eGDRta3PfChQuKj4+Xv7+/+vbtq6ysrKuOuXTpklJSUhQWFqagoCBNnDhRxcXFjvZdu3YpMDBQBw4c0NChQ+Xr66uysjI1NjZq5cqVioyMVEBAgEaPHq3c3NxmYx86dEjR0dHy8/PThAkTVF5e3uLao6KiZDabr/rwKBMAAAAAAHemVt0Js2HDBv3+97/X0qVLNXLkSP3gBz9wtHl5eWny5Mn605/+pAULFrRZgcuXL1d+fr527typgIAArVu3ToWFhZo0adJN+yYnJ6uqqkpvvvmmPD099dxzz6mystLRbrfbFRcXp/vuu0/Z2dny8fHR7t27NWXKFBUVFcnf31+S1NDQoPT0dG3cuFFdunSRn5+f5s2bJ6vVqq1btzpCmhkzZigvL09RUVE6e/asZs2apblz5+qxxx7TBx98oKVLl7b4dx8+fFhNTU2O7SeeeEJWq1Vdu3ZtxdUDAABGZrFYXF0C7gLMMxgFcxFG4Ix5GB4eft22VoUwu3bt0uzZs7V48WJ9/vnnV7VHRkbqr3/9a+srvI7a2lplZWUpIyNDY8eOlSRlZmYqMjLypn3Ly8t18OBB7d+/XzExMZKkLVu2aMCAAY5jjhw5olOnTqm8vFyenp6SpGXLlmn//v3Kzs5WSkqKJKmpqUnp6emOvlarVXv27FFJSYmCg4MlSYmJicrPz9eOHTu0YcMGbdu2TUFBQXr++edlMpkUERGh8vJyrVmzpkW/vUuXLo7vL7zwgoqKipSbm+uoEwAA3Plu9Eca0BYsFgvzDIbAXIQRGGEetiqE+eSTTzRo0KDrtnt6eqq2tvY7F/UNq9WqxsZGDRkyxLHPy8tLffr0uWnfsrIyubm5Nas3JCREAQEBju2TJ0+qvr5eYWFhzfo2NDTIarU6tt3d3RUVFdWsn91ud4Q737h8+bJGjBjhOP/gwYNlMpkc7Vf+jpbat2+f0tLS9Prrr6tHjx6t7g8AAAAAAIyhVSFM165dmz3O823vv/++484Qo7gyBPk2m82mrl27at++fVe1eXt7O7536tSp2UK8NptNJpNJeXl58vDwaNavc+fObVD110pLS5WYmKj09HTFxsa22bgAAAAAAMD5WrUw75QpU7Rt2zZ99NFHjn3fhBwHDx7UH/7wB/3kJz9ps+J69OghDw8PFRUVOfbV1dWptLT0pn0jIiJks9l04sQJx76qqiqdP3/esd2/f3999tlncnNzU8+ePZt9fH19rzt2v379ZLfbVV1dfVW/bt26SZJ69eqlEydOyG63O/pd+Ttu5uLFi5oxY4bmzp2ruXPntrgfAAAAAAAwplaFMEuWLFFQUJBGjBihxx57TCaTSb/73e80btw4xcXFqW/fvlq0aFGbFefl5aU5c+YoNTVVhw8f1unTpzV//nzZbLab9g0PD9e4ceO0cOFCHTt2TCUlJUpOTm62psqoUaMUExOjmTNn6uDBg6qoqNCxY8e0du1aFRYWXnfssLAwTZ8+XcnJycrJyVFFRYWKi4u1adMm7d27V5KUkJCgyspKLVmyRBaLRTk5Odq+fXuLf/ucOXPUrVs3zZ8/X9XV1Y7PlYv1AgAAAACAO0erQpj77rtPBw4c0KJFi/TZZ5+pc+fOeuedd1RXV6clS5boL3/5S5svHLtq1SrFxsZq9uzZmjx5snr37q1hw4a1qO/mzZsVEhKiKVOmKD4+XtOmTVNISIij3WQy6bXXXtPw4cMdr95OSEhQeXl5s7VjriUzM1OzZs3SihUrFB0drbi4OB09etQxfnBwsLKyspSbm6vY2Fht3rxZK1eubPHvLiws1DvvvKPevXurV69ejs/Zs2dbPAYAAAAAADAOU01Njf3mh329WO3//d//KSIi4oaL8wK4OxlhpXFAYi7CGJiHMArmIoyCuQgjMMI8bPGdMJ07d1ZKSopOnTp1O+sBAAAAAABol1r1dqSwsDBVV1ffrlpapbCwUNOmTbtu+7lz55xYTetNnTpVb7/99jXbFi1apMWLFzu5IgAAAAAAcDu1KoR56qmn9NRTT2nSpEnq06fP7aqpRQYOHKiCggKX1vBdvPTSS2poaLhmm4+Pj5OrAQAAAAAAt1urQpi33npLXbp00YgRIzRkyBD16NHjqoV4TSaT1q9f36ZFXounp6d69ux5289zu3zzKmsAAAAAAHB3aFUIs23bNsf3d955R++8885VxzgrhAEAAAAAALiTtCqE+ec//3m76gAAAAAAAGjXWvx2JAAAAAAAANw6QhgAAAAAAAAnaNXjSD4+PjKZTDc97vPPP7/lggAAAAAAANqjVoUwTz/99FUhTFNTkyorK/WXv/xFYWFhGj9+fJsWCAAAAAAA0B60KoR59tlnr9v26aefaty4cQoLC/vORQEAAAAAALQ3rQphbsTf31+/+MUvlJ6erqlTp7bVsGgh8/Zzri4Bd717pLeYhzAC5iKurSYh0NUlAACAu1ybLsx7zz336MyZM2055E2ZzWbl5OQ49ZwAAAAAAACt1WZ3wpSWlurll1/W97///bYaskXKyspkNpudek4AAAAAAIDWalUI069fv2u+HenSpUv64osvdM8992jXrl1tVlxL+Pn53bD9yy+/lIeHh5OqAQAAAAAAuLZWPY708MMPX/WJjY3VrFmz9Pzzz+vUqVMaOXJkmxZ46NAhTZgwQd27d1doaKgeeeQRlZWVOdqvfBzpzJkzMpvN2rNnjyZPnix/f39t375dSUlJiouL0wsvvKCIiAiFhIQoNTVVNptNaWlpCgsLU0REhF544YVm587IyNCwYcPUrVs39e7dWwsWLFBNTY2j/dKlS0pMTFRYWJj8/PzUv39/bd682dG+fft2DRo0SH5+furZs6ceeeQRffXVVzf9zd/Ue6W0tDQNHTr0lq4hAAAAAABwvVbdCbNly5bbVcd11dXV6Ve/+pX69u2r//f//p/Wr1+vGTNm6N1331XHjh2v2ec3v/mNVq9erU2bNsnDw0PFxcUqLCxUt27d9Kc//UklJSV67LHHdOrUKfXr10/79+/XkSNHtGjRIo0aNUoDBgyQJLm5uSktLU2hoaGqqqrS008/raefflr/9V//JUlavXq1SktLlZ2dLV9fX505c0YXL16UJBUXF+vXv/61tmzZopiYGF26dElHjhxxzkUDAAAAAACG06oQZt68eUpISNDgwYOv2X7ixAlt27ZNmZmZbVKcJP34xz9utp2Zmang4GCdOHHiuneGJCYmXtXvvvvu0/r169WhQwdFREQoIyNDn376qV5//XVJUlhYmDZu3KiCggJHCJOcnOzo3717d/3Hf/yHZs6cqf/8z/+Um5ubqqqq1L9/fw0aNEiSFBIS4ji+qqpK9957ryZMmCBvb29JUlRU1He8GgAA4FZZLJZ2fT7gepiLMArmIozAGfMwPDz8um2tCmF2796tUaNGXTeEOXPmjF599dU2DWGsVqvWrFmj48eP6+LFi7LZbLLZbDp79ux1+wwcOPCqfb169VKHDh0c2127dtX999/f7JiuXbvqwoULju2//e1v2rhxoz788EN98cUXampqUmNjo6qrqxUQEKBHH31U//7v/673339fo0eP1g9/+EPFxsZKkkaPHq2goCD1799fY8eO1ejRozV58mRHIAMAAJzrRn8QtTWLxeLU8wHXw1yEUTAXYQRGmIdt+orqzz//XJ06dWrLIRUXF6d//OMfeuGFF3To0CEdOXJE7u7uamxsvG6fe++996p9316c12Qyyd3d/ap9NptNklRZWam4uDhFRERox44dys/PV0ZGhiQ5zv2DH/xAp06d0oIFC3Tx4kXFxcU57p7x9vbWkSNHtH37dgUFBWnjxo0aMmSIzp8/f9Pf7ObmJrvd3mxfS9aSAQAAAAAAxnXTO2GOHj2qt956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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"imp = pd.DataFrame({'feature': df.columns, 'importance': clf.feature_importances_})\n",
"imp = imp.sort_values('importance').set_index('feature')\n",
"imp.plot(kind='barh')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 제출 파일 생성"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:54:01.717722Z",
"start_time": "2020-10-05T08:54:01.667076Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(80000, 1)\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" class | \n",
"
\n",
" \n",
" id | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 320000 | \n",
" 0 | \n",
"
\n",
" \n",
" 320001 | \n",
" 0 | \n",
"
\n",
" \n",
" 320002 | \n",
" 0 | \n",
"
\n",
" \n",
" 320003 | \n",
" 0 | \n",
"
\n",
" \n",
" 320004 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" class\n",
"id \n",
"320000 0\n",
"320001 0\n",
"320002 0\n",
"320003 0\n",
"320004 0"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sub = pd.read_csv(sample_file, index_col=0)\n",
"print(sub.shape)\n",
"sub.head()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:54:01.754346Z",
"start_time": "2020-10-05T08:54:01.720089Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" class | \n",
"
\n",
" \n",
" id | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 320000 | \n",
" 2 | \n",
"
\n",
" \n",
" 320001 | \n",
" 0 | \n",
"
\n",
" \n",
" 320002 | \n",
" 2 | \n",
"
\n",
" \n",
" 320003 | \n",
" 0 | \n",
"
\n",
" \n",
" 320004 | \n",
" 2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" class\n",
"id \n",
"320000 2\n",
"320001 0\n",
"320002 2\n",
"320003 0\n",
"320004 2"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sub[target_col] = np.argmax(p_tst, axis=1)\n",
"sub.head()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:54:01.788659Z",
"start_time": "2020-10-05T08:54:01.756610Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"2 41111\n",
"0 29973\n",
"1 8916\n",
"Name: class, dtype: int64"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sub[target_col].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-05T08:54:01.936033Z",
"start_time": "2020-10-05T08:54:01.791219Z"
}
},
"outputs": [],
"source": [
"sub.to_csv(sub_file)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": true,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 4
}