From 4b5b504256c44ca4e367934094929f0e687d4499 Mon Sep 17 00:00:00 2001 From: Vladimir Nikolaev Date: Mon, 7 May 2018 17:50:03 +0300 Subject: [PATCH] fix gini --- .../homework-practice-05.ipynb | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/ML17/homeworks-practice/homework-practice-05/homework-practice-05.ipynb b/ML17/homeworks-practice/homework-practice-05/homework-practice-05.ipynb index 7d8291a..769c442 100644 --- a/ML17/homeworks-practice/homework-practice-05/homework-practice-05.ipynb +++ b/ML17/homeworks-practice/homework-practice-05/homework-practice-05.ipynb @@ -496,10 +496,28 @@ "metadata": {}, "outputs": [], "source": [ - "import sklearn.metrics\n", - "\n", "def gini(y_true, y_pred):\n", - " return 2*sklearn.metrics.auc(y_true, y_pred) - 1" + " # check and get number of samples\n", + " assert y_true.shape == y_pred.shape\n", + " n_samples = y_true.shape[0]\n", + " \n", + " # sort rows on prediction column \n", + " # (from largest to smallest)\n", + " arr = np.array([y_true, y_pred]).transpose()\n", + " true_order = arr[arr[:,0].argsort()][::-1,0]\n", + " pred_order = arr[arr[:,1].argsort()][::-1,0]\n", + " \n", + " # get Lorenz curves\n", + " L_true = np.cumsum(true_order) / np.sum(true_order)\n", + " L_pred = np.cumsum(pred_order) / np.sum(pred_order)\n", + " L_ones = np.linspace(1/n_samples, 1, n_samples)\n", + " \n", + " # get Gini coefficients (area between curves)\n", + " G_true = np.sum(L_ones - L_true)\n", + " G_pred = np.sum(L_ones - L_pred)\n", + " \n", + " # normalize to true Gini coefficient\n", + " return G_pred/G_true" ] }, { @@ -651,12 +669,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Что бы мы ни делали, бустинги по-прежнему остаются самыми лучшими алгоритмами прогнозирования для широкого спектра задач. В особенности, если мы не работаем со структурированными данными: последовательностями или картинками. Бустинг хоть и сложный по своей структуре алгоритм, но вероятностные распределения не чужды и ему. Запустите _LGBMModel_ используя классическую регрессию и регрессию Пуассона. Настройте параметры, чтобы добиться наилучшего качества. В особенности обратите внимание на _objective_, _n_estimators_, *num_leaves* и _colsample_bytree_.\n", - "\n", - " У меня в первом приближении получилось 1181.6, надеюсь, у вас получится лучше. И если вам будет интересно,\n", - " можете попробовать предсказанные данные на Kaggle. Ведь для этого уже всё готово :) У меня выходит ни много, \n", - " ни мало 0.384266 нормированный gini на private.\n", - " " + "Что бы мы ни делали, бустинги по-прежнему остаются самыми лучшими алгоритмами прогнозирования для широкого спектра задач. В особенности, если мы не работаем со структурированными данными: последовательностями или картинками. Бустинг хоть и сложный по своей структуре алгоритм, но вероятностные распределения не чужды и ему. Запустите _LGBMModel_ используя классическую регрессию и регрессию Пуассона. Настройте параметры, чтобы добиться наилучшего качества. В особенности обратите внимание на *objective*, *n_estimators*, *num_leaves* и *colsample_bytree*." ] }, { @@ -732,21 +745,21 @@ "metadata": { "hide_input": false, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 2", "language": "python", - "name": "python3" + "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.4" + "pygments_lexer": "ipython2", + "version": "2.7.14" }, "widgets": { "state": {},