├── .gitignore ├── 007. machine learning ensemble - random forest.ipynb ├── 008. machine learning - ensemble boosting basic.ipynb ├── 009. XGboost, LightGBM.ipynb ├── 010. credit_card_fraud_basic.ipynb ├── 011. outlier, oversampling with credit card fraud_kaggle.ipynb ├── 012. stacking ensemble.ipynb ├── 013. Time series cointegration.ipynb └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/python,pycharm,jupyternotebooks 3 | # Edit at https://www.gitignore.io/?templates=python,pycharm,jupyternotebooks 4 | 5 | ### JupyterNotebooks ### 6 | # gitignore template for Jupyter Notebooks 7 | # website: http://jupyter.org/ 8 | 9 | .ipynb_checkpoints 10 | */.ipynb_checkpoints/* 11 | 12 | # IPython 13 | profile_default/ 14 | ipython_config.py 15 | 16 | # Remove previous ipynb_checkpoints 17 | # git rm -r .ipynb_checkpoints/ 18 | 19 | ### PyCharm ### 20 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 21 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 22 | 23 | # User-specific stuff 24 | .idea/**/workspace.xml 25 | .idea/**/tasks.xml 26 | .idea/**/usage.statistics.xml 27 | .idea/**/dictionaries 28 | .idea/**/shelf 29 | 30 | # Generated files 31 | .idea/**/contentModel.xml 32 | 33 | # Sensitive or high-churn files 34 | .idea/**/dataSources/ 35 | .idea/**/dataSources.ids 36 | .idea/**/dataSources.local.xml 37 | .idea/**/sqlDataSources.xml 38 | .idea/**/dynamic.xml 39 | .idea/**/uiDesigner.xml 40 | .idea/**/dbnavigator.xml 41 | 42 | # Gradle 43 | .idea/**/gradle.xml 44 | .idea/**/libraries 45 | 46 | # Gradle and Maven with auto-import 47 | # When using Gradle or Maven with auto-import, you should exclude module files, 48 | # since they will be recreated, and may cause churn. Uncomment if using 49 | # auto-import. 50 | # .idea/modules.xml 51 | # .idea/*.iml 52 | # .idea/modules 53 | # *.iml 54 | # *.ipr 55 | 56 | # CMake 57 | cmake-build-*/ 58 | 59 | # Mongo Explorer plugin 60 | .idea/**/mongoSettings.xml 61 | 62 | # File-based project format 63 | *.iws 64 | 65 | # IntelliJ 66 | out/ 67 | 68 | # mpeltonen/sbt-idea plugin 69 | .idea_modules/ 70 | 71 | # JIRA plugin 72 | atlassian-ide-plugin.xml 73 | 74 | # Cursive Clojure plugin 75 | .idea/replstate.xml 76 | 77 | # Crashlytics plugin (for Android Studio and IntelliJ) 78 | com_crashlytics_export_strings.xml 79 | crashlytics.properties 80 | crashlytics-build.properties 81 | fabric.properties 82 | 83 | # Editor-based Rest Client 84 | .idea/httpRequests 85 | 86 | # Android studio 3.1+ serialized cache file 87 | .idea/caches/build_file_checksums.ser 88 | 89 | ### PyCharm Patch ### 90 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 91 | 92 | # *.iml 93 | # modules.xml 94 | # .idea/misc.xml 95 | # *.ipr 96 | 97 | # Sonarlint plugin 98 | .idea/**/sonarlint/ 99 | 100 | # SonarQube Plugin 101 | .idea/**/sonarIssues.xml 102 | 103 | # Markdown Navigator plugin 104 | .idea/**/markdown-navigator.xml 105 | .idea/**/markdown-navigator/ 106 | 107 | ### Python ### 108 | # Byte-compiled / optimized / DLL files 109 | __pycache__/ 110 | *.py[cod] 111 | *$py.class 112 | 113 | # C extensions 114 | *.so 115 | 116 | # Distribution / packaging 117 | .Python 118 | build/ 119 | develop-eggs/ 120 | dist/ 121 | downloads/ 122 | eggs/ 123 | .eggs/ 124 | lib/ 125 | lib64/ 126 | parts/ 127 | sdist/ 128 | var/ 129 | wheels/ 130 | pip-wheel-metadata/ 131 | share/python-wheels/ 132 | *.egg-info/ 133 | .installed.cfg 134 | *.egg 135 | MANIFEST 136 | 137 | # PyInstaller 138 | # Usually these files are written by a python script from a template 139 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 140 | *.manifest 141 | *.spec 142 | 143 | # Installer logs 144 | pip-log.txt 145 | pip-delete-this-directory.txt 146 | 147 | # Unit test / coverage reports 148 | htmlcov/ 149 | .tox/ 150 | .nox/ 151 | .coverage 152 | .coverage.* 153 | .cache 154 | nosetests.xml 155 | coverage.xml 156 | *.cover 157 | .hypothesis/ 158 | .pytest_cache/ 159 | 160 | # Translations 161 | *.mo 162 | *.pot 163 | 164 | # Scrapy stuff: 165 | .scrapy 166 | 167 | # Sphinx documentation 168 | docs/_build/ 169 | 170 | # PyBuilder 171 | target/ 172 | 173 | # pyenv 174 | .python-version 175 | 176 | # pipenv 177 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 178 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 179 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 180 | # install all needed dependencies. 181 | #Pipfile.lock 182 | 183 | # celery beat schedule file 184 | celerybeat-schedule 185 | 186 | # SageMath parsed files 187 | *.sage.py 188 | 189 | # Spyder project settings 190 | .spyderproject 191 | .spyproject 192 | 193 | # Rope project settings 194 | .ropeproject 195 | 196 | # Mr Developer 197 | .mr.developer.cfg 198 | .project 199 | .pydevproject 200 | 201 | # mkdocs documentation 202 | /site 203 | 204 | # mypy 205 | .mypy_cache/ 206 | .dmypy.json 207 | dmypy.json 208 | 209 | # Pyre type checker 210 | .pyre/ 211 | 212 | # End of https://www.gitignore.io/api/python,pycharm,jupyternotebooks 213 | -------------------------------------------------------------------------------- /007. machine learning ensemble - random forest.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 출처\n", 8 | "\n", 9 | "- https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python\n", 10 | "- https://www.kaggle.com/lsjsj92/simple-titanic-kernel-82-for-beginner-like-me\n", 11 | "- https://www.kaggle.com/startupsci/titanic-data-science-solutions\n", 12 | "- https://www.kaggle.com/ash316/eda-to-prediction-dietanic\n", 13 | "- https://www.kaggle.com/mjbahmani/a-comprehensive-ml-workflow-with-python" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 1, 19 | "metadata": {}, 20 | "outputs": [], 21 | "source": [ 22 | "import pandas as pd\n", 23 | "import numpy as np\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "import seaborn as sns\n", 26 | "\n", 27 | "from sklearn.tree import DecisionTreeClassifier\n", 28 | "from sklearn.ensemble import RandomForestClassifier\n", 29 | "from sklearn.model_selection import train_test_split, GridSearchCV\n", 30 | "from sklearn.metrics import accuracy_score" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 2, 36 | "metadata": {}, 37 | "outputs": [ 38 | { 39 | "data": { 40 | "text/html": [ 41 | "
\n", 42 | "\n", 55 | "\n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", 151 | "
" 152 | ], 153 | "text/plain": [ 154 | " PassengerId Survived Pclass \\\n", 155 | "0 1 0 3 \n", 156 | "1 2 1 1 \n", 157 | "2 3 1 3 \n", 158 | "3 4 1 1 \n", 159 | "4 5 0 3 \n", 160 | "\n", 161 | " Name Sex Age SibSp \\\n", 162 | "0 Braund, Mr. Owen Harris male 22.0 1 \n", 163 | "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", 164 | "2 Heikkinen, Miss. Laina female 26.0 0 \n", 165 | "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", 166 | "4 Allen, Mr. William Henry male 35.0 0 \n", 167 | "\n", 168 | " Parch Ticket Fare Cabin Embarked \n", 169 | "0 0 A/5 21171 7.2500 NaN S \n", 170 | "1 0 PC 17599 71.2833 C85 C \n", 171 | "2 0 STON/O2. 3101282 7.9250 NaN S \n", 172 | "3 0 113803 53.1000 C123 S \n", 173 | "4 0 373450 8.0500 NaN S " 174 | ] 175 | }, 176 | "execution_count": 2, 177 | "metadata": {}, 178 | "output_type": "execute_result" 179 | } 180 | ], 181 | "source": [ 182 | "data = pd.read_csv('../datas/titanic/train.csv')\n", 183 | "data.head()" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 3, 189 | "metadata": {}, 190 | "outputs": [ 191 | { 192 | "data": { 193 | "text/plain": [ 194 | "PassengerId 0\n", 195 | "Survived 0\n", 196 | "Pclass 0\n", 197 | "Name 0\n", 198 | "Sex 0\n", 199 | "Age 177\n", 200 | "SibSp 0\n", 201 | "Parch 0\n", 202 | "Ticket 0\n", 203 | "Fare 0\n", 204 | "Cabin 687\n", 205 | "Embarked 2\n", 206 | "dtype: int64" 207 | ] 208 | }, 209 | "execution_count": 3, 210 | "metadata": {}, 211 | "output_type": "execute_result" 212 | } 213 | ], 214 | "source": [ 215 | "data.isna().sum()" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": 4, 221 | "metadata": {}, 222 | "outputs": [ 223 | { 224 | "name": "stdout", 225 | "output_type": "stream", 226 | "text": [ 227 | "age null값 비율 : 19.865\n", 228 | "cabin null값 비율 : 77.104\n" 229 | ] 230 | } 231 | ], 232 | "source": [ 233 | "print(\"age null값 비율 : {0:.3f}\".format((data['Age'].isna().sum() / len(data)) * 100))\n", 234 | "print(\"cabin null값 비율 : {0:.3f}\".format((data['Cabin'].isna().sum() / len(data)) * 100 ))" 235 | ] 236 | }, 237 | { 238 | "cell_type": "code", 239 | "execution_count": null, 240 | "metadata": {}, 241 | "outputs": [], 242 | "source": [] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": 13, 247 | "metadata": {}, 248 | "outputs": [], 249 | "source": [ 250 | "data['Embarked'].fillna('S', inplace = True)\n", 251 | "data['Fare'].fillna(0, inplace=True)\n", 252 | "data['Fare'] = data['Fare'].map(lambda x : np.log(x) if x > 0 else 0)" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": 14, 258 | "metadata": {}, 259 | "outputs": [], 260 | "source": [ 261 | "data['Initial'] = data['Name'].str.extract('([A-Za-z]+)\\.')\n", 262 | "data['Initial'].data(['Mlle','Mme','Ms','Dr','Major','Lady','Countess','Jonkheer','Col','Rev','Capt','Sir','Don', 'Dona'],['Miss','Miss','Miss','Mr','Mr','Mrs','Mrs','Other','Other','Other','Mr','Mr','Mr','Other'],inplace=True)\n", 263 | "mapping = {\n", 264 | " \"Mr\":0,\n", 265 | " \"Miss\":1,\n", 266 | " \"Mrs\" : 1,\n", 267 | " \"Master\":2,\n", 268 | " \"Other\":3\n", 269 | "}\n", 270 | "\n", 271 | "data['Initial'] = data['Initial'].map(mapping)\n" 272 | ] 273 | }, 274 | { 275 | "cell_type": "code", 276 | "execution_count": 15, 277 | "metadata": {}, 278 | "outputs": [], 279 | "source": [ 280 | "mapping_sex = {\n", 281 | " 'male' : 0,\n", 282 | " 'female': 1\n", 283 | "}\n", 284 | "\n", 285 | "mapping_em = {\n", 286 | " 'S' :0,\n", 287 | " 'C' :1,\n", 288 | " 'Q' :2\n", 289 | "}\n", 290 | "\n", 291 | "\n", 292 | "data['Sex'] = data['Sex'].map(mapping_sex)\n", 293 | "data['Embarked'] = data['Embarked'].map(mapping_em)\n", 294 | "\n", 295 | "\n", 296 | "data.drop(['PassengerId', \"Ticket\", \"Cabin\", \"Name\"], axis = 1, inplace = True)\n" 297 | ] 298 | }, 299 | { 300 | "cell_type": "code", 301 | "execution_count": 16, 302 | "metadata": {}, 303 | "outputs": [ 304 | { 305 | "data": { 306 | "text/plain": [ 307 | "Initial\n", 308 | "0 32.739609\n", 309 | "1 27.834615\n", 310 | "2 4.574167\n", 311 | "3 45.888889\n", 312 | "Name: Age, dtype: float64" 313 | ] 314 | }, 315 | "execution_count": 16, 316 | "metadata": {}, 317 | "output_type": "execute_result" 318 | } 319 | ], 320 | "source": [ 321 | "data.groupby('Initial')['Age'].mean()" 322 | ] 323 | }, 324 | { 325 | "cell_type": "code", 326 | "execution_count": 17, 327 | "metadata": {}, 328 | "outputs": [], 329 | "source": [ 330 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 0), 'Age' ] = 32\n", 331 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 1), 'Age' ] = 28\n", 332 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 2), 'Age' ] = 5\n", 333 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 3), 'Age' ] = 45" 334 | ] 335 | }, 336 | { 337 | "cell_type": "code", 338 | "execution_count": 18, 339 | "metadata": {}, 340 | "outputs": [ 341 | { 342 | "data": { 343 | "text/html": [ 344 | "
\n", 345 | "\n", 358 | "\n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | "
SurvivedPclassSexAgeSibSpParchFareEmbarkedInitial
003022.0101.98100100
111138.0104.26666211
213126.0002.07002201
311135.0103.97217701
403035.0002.08567200
\n", 436 | "
" 437 | ], 438 | "text/plain": [ 439 | " Survived Pclass Sex Age SibSp Parch Fare Embarked Initial\n", 440 | "0 0 3 0 22.0 1 0 1.981001 0 0\n", 441 | "1 1 1 1 38.0 1 0 4.266662 1 1\n", 442 | "2 1 3 1 26.0 0 0 2.070022 0 1\n", 443 | "3 1 1 1 35.0 1 0 3.972177 0 1\n", 444 | "4 0 3 0 35.0 0 0 2.085672 0 0" 445 | ] 446 | }, 447 | "execution_count": 18, 448 | "metadata": {}, 449 | "output_type": "execute_result" 450 | } 451 | ], 452 | "source": [ 453 | "data.head()" 454 | ] 455 | }, 456 | { 457 | "cell_type": "code", 458 | "execution_count": 19, 459 | "metadata": {}, 460 | "outputs": [], 461 | "source": [ 462 | "y = data['Survived']\n", 463 | "X = data.drop('Survived', axis = 1)" 464 | ] 465 | }, 466 | { 467 | "cell_type": "code", 468 | "execution_count": 20, 469 | "metadata": {}, 470 | "outputs": [], 471 | "source": [ 472 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=0)" 473 | ] 474 | }, 475 | { 476 | "cell_type": "code", 477 | "execution_count": 21, 478 | "metadata": {}, 479 | "outputs": [ 480 | { 481 | "name": "stderr", 482 | "output_type": "stream", 483 | "text": [ 484 | "d:\\anaconda3\\envs\\soojin\\lib\\site-packages\\sklearn\\ensemble\\forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", 485 | " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n" 486 | ] 487 | }, 488 | { 489 | "data": { 490 | "text/plain": [ 491 | "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n", 492 | " max_depth=None, max_features='auto', max_leaf_nodes=None,\n", 493 | " min_impurity_decrease=0.0, min_impurity_split=None,\n", 494 | " min_samples_leaf=1, min_samples_split=2,\n", 495 | " min_weight_fraction_leaf=0.0, n_estimators=10,\n", 496 | " n_jobs=None, oob_score=False, random_state=0, verbose=0,\n", 497 | " warm_start=False)" 498 | ] 499 | }, 500 | "execution_count": 21, 501 | "metadata": {}, 502 | "output_type": "execute_result" 503 | } 504 | ], 505 | "source": [ 506 | "rf = RandomForestClassifier(random_state=0)\n", 507 | "rf.fit(X_train, y_train)" 508 | ] 509 | }, 510 | { 511 | "cell_type": "code", 512 | "execution_count": 22, 513 | "metadata": {}, 514 | "outputs": [ 515 | { 516 | "name": "stdout", 517 | "output_type": "stream", 518 | "text": [ 519 | "정확도 :0.810\n" 520 | ] 521 | } 522 | ], 523 | "source": [ 524 | "pred = rf.predict(X_test)\n", 525 | "print(\"정확도 :{0:.3f}\".format(accuracy_score(y_test, pred)))" 526 | ] 527 | }, 528 | { 529 | "cell_type": "code", 530 | "execution_count": 23, 531 | "metadata": {}, 532 | "outputs": [], 533 | "source": [ 534 | "rf_param_grid = {\n", 535 | " 'n_estimators' : [100, 200, 300],\n", 536 | " 'max_depth' : [4, 6, 8, 10, 12],\n", 537 | " 'min_samples_leaf' : [3, 5, 6, 7, 10],\n", 538 | " 'min_samples_split' : [2, 3, 5, 7, 10]\n", 539 | "}" 540 | ] 541 | }, 542 | { 543 | "cell_type": "code", 544 | "execution_count": 24, 545 | "metadata": {}, 546 | "outputs": [ 547 | { 548 | "name": "stderr", 549 | "output_type": "stream", 550 | "text": [ 551 | "d:\\anaconda3\\envs\\soojin\\lib\\site-packages\\sklearn\\model_selection\\_split.py:1978: FutureWarning: The default value of cv will change from 3 to 5 in version 0.22. Specify it explicitly to silence this warning.\n", 552 | " warnings.warn(CV_WARNING, FutureWarning)\n", 553 | "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 12 concurrent workers.\n" 554 | ] 555 | }, 556 | { 557 | "name": "stdout", 558 | "output_type": "stream", 559 | "text": [ 560 | "Fitting 3 folds for each of 128 candidates, totalling 384 fits\n" 561 | ] 562 | }, 563 | { 564 | "name": "stderr", 565 | "output_type": "stream", 566 | "text": [ 567 | "[Parallel(n_jobs=-1)]: Done 26 tasks | elapsed: 4.4s\n", 568 | "[Parallel(n_jobs=-1)]: Done 176 tasks | elapsed: 9.7s\n", 569 | "[Parallel(n_jobs=-1)]: Done 384 out of 384 | elapsed: 16.7s finished\n" 570 | ] 571 | }, 572 | { 573 | "data": { 574 | "text/plain": [ 575 | "GridSearchCV(cv='warn', error_score='raise-deprecating',\n", 576 | " estimator=RandomForestClassifier(bootstrap=True, class_weight=None,\n", 577 | " criterion='gini', max_depth=None,\n", 578 | " max_features='auto',\n", 579 | " max_leaf_nodes=None,\n", 580 | " min_impurity_decrease=0.0,\n", 581 | " min_impurity_split=None,\n", 582 | " min_samples_leaf=1,\n", 583 | " min_samples_split=2,\n", 584 | " min_weight_fraction_leaf=0.0,\n", 585 | " n_estimators=10, n_jobs=None,\n", 586 | " oob_score=False, random_state=0,\n", 587 | " verbose=0, warm_start=False),\n", 588 | " iid='warn', n_jobs=-1,\n", 589 | " param_grid={'max_depth': [6, 8, 10, 12],\n", 590 | " 'min_samples_leaf': [3, 5, 7, 10],\n", 591 | " 'min_samples_split': [2, 3, 5, 10],\n", 592 | " 'n_estimators': [100, 200]},\n", 593 | " pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n", 594 | " scoring='accuracy', verbose=1)" 595 | ] 596 | }, 597 | "execution_count": 24, 598 | "metadata": {}, 599 | "output_type": "execute_result" 600 | } 601 | ], 602 | "source": [ 603 | "rf_grid = GridSearchCV(rf, param_grid = rf_param_grid, scoring=\"accuracy\", n_jobs= -1, verbose = 1)\n", 604 | "rf_grid.fit(X_train, y_train)" 605 | ] 606 | }, 607 | { 608 | "cell_type": "code", 609 | "execution_count": 25, 610 | "metadata": {}, 611 | "outputs": [ 612 | { 613 | "name": "stdout", 614 | "output_type": "stream", 615 | "text": [ 616 | "최고 평균 정확도 : 0.8174\n", 617 | "최고의 파라미터 : {'max_depth': 8, 'min_samples_leaf': 3, 'min_samples_split': 2, 'n_estimators': 100}\n" 618 | ] 619 | } 620 | ], 621 | "source": [ 622 | "print(\"최고 평균 정확도 : {0:.4f}\".format(rf_grid.best_score_))\n", 623 | "print(\"최고의 파라미터 : \", rf_grid.best_params_)" 624 | ] 625 | }, 626 | { 627 | "cell_type": "code", 628 | "execution_count": 26, 629 | "metadata": {}, 630 | "outputs": [ 631 | { 632 | "data": { 633 | "text/plain": [ 634 | "Index(['mean_fit_time', 'std_fit_time', 'mean_score_time', 'std_score_time',\n", 635 | " 'param_max_depth', 'param_min_samples_leaf', 'param_min_samples_split',\n", 636 | " 'param_n_estimators', 'params', 'split0_test_score',\n", 637 | " 'split1_test_score', 'split2_test_score', 'mean_test_score',\n", 638 | " 'std_test_score', 'rank_test_score'],\n", 639 | " dtype='object')" 640 | ] 641 | }, 642 | "execution_count": 26, 643 | "metadata": {}, 644 | "output_type": "execute_result" 645 | } 646 | ], 647 | "source": [ 648 | "result = pd.DataFrame(rf_grid.cv_results_)\n", 649 | "result.columns" 650 | ] 651 | }, 652 | { 653 | "cell_type": "code", 654 | "execution_count": 27, 655 | "metadata": {}, 656 | "outputs": [], 657 | "source": [ 658 | "result.sort_values(by=['rank_test_score'], inplace=True)" 659 | ] 660 | }, 661 | { 662 | "cell_type": "code", 663 | "execution_count": 28, 664 | "metadata": {}, 665 | "outputs": [ 666 | { 667 | "data": { 668 | "text/html": [ 669 | "
\n", 670 | "\n", 683 | "\n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | " \n", 723 | " \n", 724 | " \n", 725 | " \n", 726 | " \n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | "
paramsmean_test_scorerank_test_score
32{'max_depth': 8, 'min_samples_leaf': 3, 'min_s...0.8174161
34{'max_depth': 8, 'min_samples_leaf': 3, 'min_s...0.8174161
36{'max_depth': 8, 'min_samples_leaf': 3, 'min_s...0.8174161
56{'max_depth': 8, 'min_samples_leaf': 10, 'min_...0.8146074
105{'max_depth': 12, 'min_samples_leaf': 5, 'min_...0.8146074
107{'max_depth': 12, 'min_samples_leaf': 5, 'min_...0.8146074
68{'max_depth': 10, 'min_samples_leaf': 3, 'min_...0.8146074
66{'max_depth': 10, 'min_samples_leaf': 3, 'min_...0.8146074
111{'max_depth': 12, 'min_samples_leaf': 5, 'min_...0.8146074
109{'max_depth': 12, 'min_samples_leaf': 5, 'min_...0.8146074
\n", 755 | "
" 756 | ], 757 | "text/plain": [ 758 | " params mean_test_score \\\n", 759 | "32 {'max_depth': 8, 'min_samples_leaf': 3, 'min_s... 0.817416 \n", 760 | "34 {'max_depth': 8, 'min_samples_leaf': 3, 'min_s... 0.817416 \n", 761 | "36 {'max_depth': 8, 'min_samples_leaf': 3, 'min_s... 0.817416 \n", 762 | "56 {'max_depth': 8, 'min_samples_leaf': 10, 'min_... 0.814607 \n", 763 | "105 {'max_depth': 12, 'min_samples_leaf': 5, 'min_... 0.814607 \n", 764 | "107 {'max_depth': 12, 'min_samples_leaf': 5, 'min_... 0.814607 \n", 765 | "68 {'max_depth': 10, 'min_samples_leaf': 3, 'min_... 0.814607 \n", 766 | "66 {'max_depth': 10, 'min_samples_leaf': 3, 'min_... 0.814607 \n", 767 | "111 {'max_depth': 12, 'min_samples_leaf': 5, 'min_... 0.814607 \n", 768 | "109 {'max_depth': 12, 'min_samples_leaf': 5, 'min_... 0.814607 \n", 769 | "\n", 770 | " rank_test_score \n", 771 | "32 1 \n", 772 | "34 1 \n", 773 | "36 1 \n", 774 | "56 4 \n", 775 | "105 4 \n", 776 | "107 4 \n", 777 | "68 4 \n", 778 | "66 4 \n", 779 | "111 4 \n", 780 | "109 4 " 781 | ] 782 | }, 783 | "execution_count": 28, 784 | "metadata": {}, 785 | "output_type": "execute_result" 786 | } 787 | ], 788 | "source": [ 789 | "result[['params', 'mean_test_score', 'rank_test_score']].head(10)" 790 | ] 791 | }, 792 | { 793 | "cell_type": "code", 794 | "execution_count": 29, 795 | "metadata": {}, 796 | "outputs": [ 797 | { 798 | "name": "stdout", 799 | "output_type": "stream", 800 | "text": [ 801 | "정확도 : 0.8603\n" 802 | ] 803 | } 804 | ], 805 | "source": [ 806 | "model = rf_grid.best_estimator_\n", 807 | "pred = model.predict(X_test)\n", 808 | "acc = accuracy_score(y_test, pred)\n", 809 | "print(\"정확도 : {0:.4f}\".format(acc))\n" 810 | ] 811 | }, 812 | { 813 | "cell_type": "code", 814 | "execution_count": 30, 815 | "metadata": {}, 816 | "outputs": [], 817 | "source": [ 818 | "feature_importances = model.feature_importances_" 819 | ] 820 | }, 821 | { 822 | "cell_type": "code", 823 | "execution_count": 31, 824 | "metadata": {}, 825 | "outputs": [ 826 | { 827 | "data": { 828 | "image/png": "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\n", 829 | "text/plain": [ 830 | "
" 831 | ] 832 | }, 833 | "metadata": { 834 | "needs_background": "light" 835 | }, 836 | "output_type": "display_data" 837 | } 838 | ], 839 | "source": [ 840 | "ft_importances = pd.Series(feature_importances, index = X_train.columns)\n", 841 | "ft_importances = ft_importances.sort_values(ascending=False)\n", 842 | "\n", 843 | "plt.figure(figsize=(12, 10))\n", 844 | "plt.title(\"feature importances\")\n", 845 | "sns.barplot(x=ft_importances, y = X_train.columns)\n", 846 | "plt.show()\n" 847 | ] 848 | }, 849 | { 850 | "cell_type": "code", 851 | "execution_count": null, 852 | "metadata": {}, 853 | "outputs": [], 854 | "source": [] 855 | } 856 | ], 857 | "metadata": { 858 | "kernelspec": { 859 | "display_name": "Python 3", 860 | "language": "python", 861 | "name": "python3" 862 | }, 863 | "language_info": { 864 | "codemirror_mode": { 865 | "name": "ipython", 866 | "version": 3 867 | }, 868 | "file_extension": ".py", 869 | "mimetype": "text/x-python", 870 | "name": "python", 871 | "nbconvert_exporter": "python", 872 | "pygments_lexer": "ipython3", 873 | "version": "3.6.9" 874 | } 875 | }, 876 | "nbformat": 4, 877 | "nbformat_minor": 2 878 | } 879 | -------------------------------------------------------------------------------- /008. machine learning - ensemble boosting basic.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 출처\n", 8 | "\n", 9 | "- https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python\n", 10 | "- https://www.kaggle.com/lsjsj92/simple-titanic-kernel-82-for-beginner-like-me\n", 11 | "- https://www.kaggle.com/startupsci/titanic-data-science-solutions\n", 12 | "- https://www.kaggle.com/ash316/eda-to-prediction-dietanic\n", 13 | "- https://www.kaggle.com/mjbahmani/a-comprehensive-ml-workflow-with-python" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 3, 19 | "metadata": {}, 20 | "outputs": [], 21 | "source": [ 22 | "import pandas as pd\n", 23 | "import numpy as np\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "import seaborn as sns\n", 26 | "\n", 27 | "from sklearn.tree import DecisionTreeClassifier\n", 28 | "from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n", 29 | "from sklearn.model_selection import train_test_split, GridSearchCV\n", 30 | "from sklearn.metrics import accuracy_score" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 4, 36 | "metadata": {}, 37 | "outputs": [ 38 | { 39 | "data": { 40 | "text/html": [ 41 | "
\n", 42 | "\n", 55 | "\n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", 151 | "
" 152 | ], 153 | "text/plain": [ 154 | " PassengerId Survived Pclass \\\n", 155 | "0 1 0 3 \n", 156 | "1 2 1 1 \n", 157 | "2 3 1 3 \n", 158 | "3 4 1 1 \n", 159 | "4 5 0 3 \n", 160 | "\n", 161 | " Name Sex Age SibSp \\\n", 162 | "0 Braund, Mr. Owen Harris male 22.0 1 \n", 163 | "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", 164 | "2 Heikkinen, Miss. Laina female 26.0 0 \n", 165 | "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", 166 | "4 Allen, Mr. William Henry male 35.0 0 \n", 167 | "\n", 168 | " Parch Ticket Fare Cabin Embarked \n", 169 | "0 0 A/5 21171 7.2500 NaN S \n", 170 | "1 0 PC 17599 71.2833 C85 C \n", 171 | "2 0 STON/O2. 3101282 7.9250 NaN S \n", 172 | "3 0 113803 53.1000 C123 S \n", 173 | "4 0 373450 8.0500 NaN S " 174 | ] 175 | }, 176 | "execution_count": 4, 177 | "metadata": {}, 178 | "output_type": "execute_result" 179 | } 180 | ], 181 | "source": [ 182 | "data = pd.read_csv('../datas/titanic/train.csv')\n", 183 | "data.head()" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 5, 189 | "metadata": {}, 190 | "outputs": [], 191 | "source": [ 192 | "data['Embarked'].fillna('S', inplace = True)\n", 193 | "data['Fare'].fillna(0, inplace=True)\n", 194 | "data['Fare'] = data['Fare'].map(lambda x : np.log(x) if x > 0 else 0)" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 6, 200 | "metadata": {}, 201 | "outputs": [], 202 | "source": [ 203 | "data['Initial'] = data['Name'].str.extract('([A-Za-z]+)\\.')\n", 204 | "data['Initial'].replace(['Mlle','Mme','Ms','Dr','Major','Lady','Countess','Jonkheer','Col','Rev','Capt','Sir','Don', 'Dona'],['Miss','Miss','Miss','Mr','Mr','Mrs','Mrs','Other','Other','Other','Mr','Mr','Mr','Other'],inplace=True)\n", 205 | "mapping = {\n", 206 | " \"Mr\":0,\n", 207 | " \"Miss\":1,\n", 208 | " \"Mrs\" : 1,\n", 209 | " \"Master\":2,\n", 210 | " \"Other\":3\n", 211 | "}\n", 212 | "\n", 213 | "data['Initial'] = data['Initial'].map(mapping)\n" 214 | ] 215 | }, 216 | { 217 | "cell_type": "code", 218 | "execution_count": 7, 219 | "metadata": {}, 220 | "outputs": [], 221 | "source": [ 222 | "mapping_sex = {\n", 223 | " 'male' : 0,\n", 224 | " 'female': 1\n", 225 | "}\n", 226 | "\n", 227 | "mapping_em = {\n", 228 | " 'S' :0,\n", 229 | " 'C' :1,\n", 230 | " 'Q' :2\n", 231 | "}\n", 232 | "\n", 233 | "\n", 234 | "data['Sex'] = data['Sex'].map(mapping_sex)\n", 235 | "data['Embarked'] = data['Embarked'].map(mapping_em)\n", 236 | "\n", 237 | "\n", 238 | "data.drop(['PassengerId', \"Ticket\", \"Cabin\", \"Name\"], axis = 1, inplace = True)\n" 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": 8, 244 | "metadata": {}, 245 | "outputs": [ 246 | { 247 | "data": { 248 | "text/plain": [ 249 | "Initial\n", 250 | "0 32.739609\n", 251 | "1 27.834615\n", 252 | "2 4.574167\n", 253 | "3 45.888889\n", 254 | "Name: Age, dtype: float64" 255 | ] 256 | }, 257 | "execution_count": 8, 258 | "metadata": {}, 259 | "output_type": "execute_result" 260 | } 261 | ], 262 | "source": [ 263 | "data.groupby('Initial')['Age'].mean()" 264 | ] 265 | }, 266 | { 267 | "cell_type": "code", 268 | "execution_count": 9, 269 | "metadata": {}, 270 | "outputs": [], 271 | "source": [ 272 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 0), 'Age' ] = 32\n", 273 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 1), 'Age' ] = 28\n", 274 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 2), 'Age' ] = 5\n", 275 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 3), 'Age' ] = 45" 276 | ] 277 | }, 278 | { 279 | "cell_type": "code", 280 | "execution_count": 10, 281 | "metadata": {}, 282 | "outputs": [ 283 | { 284 | "data": { 285 | "text/html": [ 286 | "
\n", 287 | "\n", 300 | "\n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | "
SurvivedPclassSexAgeSibSpParchFareEmbarkedInitial
003022.0101.98100100
111138.0104.26666211
213126.0002.07002201
311135.0103.97217701
403035.0002.08567200
\n", 378 | "
" 379 | ], 380 | "text/plain": [ 381 | " Survived Pclass Sex Age SibSp Parch Fare Embarked Initial\n", 382 | "0 0 3 0 22.0 1 0 1.981001 0 0\n", 383 | "1 1 1 1 38.0 1 0 4.266662 1 1\n", 384 | "2 1 3 1 26.0 0 0 2.070022 0 1\n", 385 | "3 1 1 1 35.0 1 0 3.972177 0 1\n", 386 | "4 0 3 0 35.0 0 0 2.085672 0 0" 387 | ] 388 | }, 389 | "execution_count": 10, 390 | "metadata": {}, 391 | "output_type": "execute_result" 392 | } 393 | ], 394 | "source": [ 395 | "data.head()" 396 | ] 397 | }, 398 | { 399 | "cell_type": "code", 400 | "execution_count": 11, 401 | "metadata": {}, 402 | "outputs": [], 403 | "source": [ 404 | "y = data['Survived']\n", 405 | "X = data.drop('Survived', axis = 1)" 406 | ] 407 | }, 408 | { 409 | "cell_type": "code", 410 | "execution_count": 12, 411 | "metadata": {}, 412 | "outputs": [], 413 | "source": [ 414 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=0)" 415 | ] 416 | }, 417 | { 418 | "cell_type": "code", 419 | "execution_count": 13, 420 | "metadata": {}, 421 | "outputs": [ 422 | { 423 | "name": "stderr", 424 | "output_type": "stream", 425 | "text": [ 426 | "d:\\anaconda3\\envs\\soojin\\lib\\site-packages\\sklearn\\ensemble\\forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", 427 | " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n" 428 | ] 429 | }, 430 | { 431 | "data": { 432 | "text/plain": [ 433 | "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n", 434 | " max_depth=None, max_features='auto', max_leaf_nodes=None,\n", 435 | " min_impurity_decrease=0.0, min_impurity_split=None,\n", 436 | " min_samples_leaf=1, min_samples_split=2,\n", 437 | " min_weight_fraction_leaf=0.0, n_estimators=10,\n", 438 | " n_jobs=None, oob_score=False, random_state=0, verbose=0,\n", 439 | " warm_start=False)" 440 | ] 441 | }, 442 | "execution_count": 13, 443 | "metadata": {}, 444 | "output_type": "execute_result" 445 | } 446 | ], 447 | "source": [ 448 | "rf = RandomForestClassifier(random_state=0)\n", 449 | "rf.fit(X_train, y_train)" 450 | ] 451 | }, 452 | { 453 | "cell_type": "code", 454 | "execution_count": 14, 455 | "metadata": {}, 456 | "outputs": [ 457 | { 458 | "name": "stdout", 459 | "output_type": "stream", 460 | "text": [ 461 | "정확도 :0.810\n" 462 | ] 463 | } 464 | ], 465 | "source": [ 466 | "pred = rf.predict(X_test)\n", 467 | "print(\"정확도 :{0:.3f}\".format(accuracy_score(y_test, pred)))" 468 | ] 469 | }, 470 | { 471 | "cell_type": "code", 472 | "execution_count": 11, 473 | "metadata": {}, 474 | "outputs": [ 475 | { 476 | "data": { 477 | "text/plain": [ 478 | "GradientBoostingClassifier(criterion='friedman_mse', init=None,\n", 479 | " learning_rate=0.1, loss='deviance', max_depth=3,\n", 480 | " max_features=None, max_leaf_nodes=None,\n", 481 | " min_impurity_decrease=0.0, min_impurity_split=None,\n", 482 | " min_samples_leaf=1, min_samples_split=2,\n", 483 | " min_weight_fraction_leaf=0.0, n_estimators=100,\n", 484 | " n_iter_no_change=None, presort='auto',\n", 485 | " random_state=0, subsample=1.0, tol=0.0001,\n", 486 | " validation_fraction=0.1, verbose=0,\n", 487 | " warm_start=False)" 488 | ] 489 | }, 490 | "execution_count": 11, 491 | "metadata": {}, 492 | "output_type": "execute_result" 493 | } 494 | ], 495 | "source": [ 496 | "gb = GradientBoostingClassifier(random_state=0)\n", 497 | "gb.fit(X_train, y_train)" 498 | ] 499 | }, 500 | { 501 | "cell_type": "code", 502 | "execution_count": 12, 503 | "metadata": {}, 504 | "outputs": [ 505 | { 506 | "name": "stdout", 507 | "output_type": "stream", 508 | "text": [ 509 | "정확도 :0.832\n" 510 | ] 511 | } 512 | ], 513 | "source": [ 514 | "pred = gb.predict(X_test)\n", 515 | "print(\"정확도 :{0:.3f}\".format(accuracy_score(y_test, pred)))" 516 | ] 517 | }, 518 | { 519 | "cell_type": "code", 520 | "execution_count": 13, 521 | "metadata": {}, 522 | "outputs": [], 523 | "source": [ 524 | "gb_param_grid = {\n", 525 | " 'n_estimators' : [100, 200],\n", 526 | " 'max_depth' : [6, 8, 10, 12],\n", 527 | " 'min_samples_leaf' : [3, 5, 7, 10],\n", 528 | " 'min_samples_split' : [2, 3, 5, 10],\n", 529 | " 'learning_rate' : [0.05, 0.1, 0.2]\n", 530 | "}" 531 | ] 532 | }, 533 | { 534 | "cell_type": "code", 535 | "execution_count": 14, 536 | "metadata": {}, 537 | "outputs": [ 538 | { 539 | "name": "stderr", 540 | "output_type": "stream", 541 | "text": [ 542 | "d:\\anaconda3\\envs\\soojin\\lib\\site-packages\\sklearn\\model_selection\\_split.py:1978: FutureWarning: The default value of cv will change from 3 to 5 in version 0.22. Specify it explicitly to silence this warning.\n", 543 | " warnings.warn(CV_WARNING, FutureWarning)\n", 544 | "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 12 concurrent workers.\n" 545 | ] 546 | }, 547 | { 548 | "name": "stdout", 549 | "output_type": "stream", 550 | "text": [ 551 | "Fitting 3 folds for each of 384 candidates, totalling 1152 fits\n" 552 | ] 553 | }, 554 | { 555 | "name": "stderr", 556 | "output_type": "stream", 557 | "text": [ 558 | "[Parallel(n_jobs=-1)]: Done 26 tasks | elapsed: 4.6s\n", 559 | "[Parallel(n_jobs=-1)]: Done 176 tasks | elapsed: 9.4s\n", 560 | "[Parallel(n_jobs=-1)]: Done 426 tasks | elapsed: 20.0s\n", 561 | "[Parallel(n_jobs=-1)]: Done 776 tasks | elapsed: 34.5s\n", 562 | "[Parallel(n_jobs=-1)]: Done 1152 out of 1152 | elapsed: 49.2s finished\n" 563 | ] 564 | }, 565 | { 566 | "data": { 567 | "text/plain": [ 568 | "GridSearchCV(cv='warn', error_score='raise-deprecating',\n", 569 | " estimator=GradientBoostingClassifier(criterion='friedman_mse',\n", 570 | " init=None, learning_rate=0.1,\n", 571 | " loss='deviance', max_depth=3,\n", 572 | " max_features=None,\n", 573 | " max_leaf_nodes=None,\n", 574 | " min_impurity_decrease=0.0,\n", 575 | " min_impurity_split=None,\n", 576 | " min_samples_leaf=1,\n", 577 | " min_samples_split=2,\n", 578 | " min_weight_fraction_leaf=0.0,\n", 579 | " n_estimators=100,\n", 580 | " n_it...\n", 581 | " random_state=0, subsample=1.0,\n", 582 | " tol=0.0001,\n", 583 | " validation_fraction=0.1,\n", 584 | " verbose=0, warm_start=False),\n", 585 | " iid='warn', n_jobs=-1,\n", 586 | " param_grid={'learning_rate': [0.05, 0.1, 0.2],\n", 587 | " 'max_depth': [6, 8, 10, 12],\n", 588 | " 'min_samples_leaf': [3, 5, 7, 10],\n", 589 | " 'min_samples_split': [2, 3, 5, 10],\n", 590 | " 'n_estimators': [100, 200]},\n", 591 | " pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n", 592 | " scoring='accuracy', verbose=1)" 593 | ] 594 | }, 595 | "execution_count": 14, 596 | "metadata": {}, 597 | "output_type": "execute_result" 598 | } 599 | ], 600 | "source": [ 601 | "gb_grid = GridSearchCV(gb, param_grid = gb_param_grid, scoring=\"accuracy\", n_jobs= -1, verbose = 1)\n", 602 | "gb_grid.fit(X_train, y_train)" 603 | ] 604 | }, 605 | { 606 | "cell_type": "code", 607 | "execution_count": 15, 608 | "metadata": {}, 609 | "outputs": [ 610 | { 611 | "name": "stdout", 612 | "output_type": "stream", 613 | "text": [ 614 | "최고 평균 정확도 : 0.8202\n", 615 | "최고의 파라미터 : {'learning_rate': 0.05, 'max_depth': 6, 'min_samples_leaf': 7, 'min_samples_split': 2, 'n_estimators': 100}\n" 616 | ] 617 | } 618 | ], 619 | "source": [ 620 | "print(\"최고 평균 정확도 : {0:.4f}\".format(gb_grid.best_score_))\n", 621 | "print(\"최고의 파라미터 : \", gb_grid.best_params_)" 622 | ] 623 | }, 624 | { 625 | "cell_type": "code", 626 | "execution_count": 16, 627 | "metadata": {}, 628 | "outputs": [ 629 | { 630 | "data": { 631 | "text/plain": [ 632 | "Index(['mean_fit_time', 'std_fit_time', 'mean_score_time', 'std_score_time',\n", 633 | " 'param_learning_rate', 'param_max_depth', 'param_min_samples_leaf',\n", 634 | " 'param_min_samples_split', 'param_n_estimators', 'params',\n", 635 | " 'split0_test_score', 'split1_test_score', 'split2_test_score',\n", 636 | " 'mean_test_score', 'std_test_score', 'rank_test_score'],\n", 637 | " dtype='object')" 638 | ] 639 | }, 640 | "execution_count": 16, 641 | "metadata": {}, 642 | "output_type": "execute_result" 643 | } 644 | ], 645 | "source": [ 646 | "result = pd.DataFrame(gb_grid.cv_results_)\n", 647 | "result.columns" 648 | ] 649 | }, 650 | { 651 | "cell_type": "code", 652 | "execution_count": 17, 653 | "metadata": {}, 654 | "outputs": [], 655 | "source": [ 656 | "result.sort_values(by=['rank_test_score'], inplace=True)" 657 | ] 658 | }, 659 | { 660 | "cell_type": "code", 661 | "execution_count": 18, 662 | "metadata": {}, 663 | "outputs": [ 664 | { 665 | "data": { 666 | "text/html": [ 667 | "
\n", 668 | "\n", 681 | "\n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | " \n", 723 | " \n", 724 | " \n", 725 | " \n", 726 | " \n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | "
paramsmean_test_scorerank_test_score
22{'learning_rate': 0.05, 'max_depth': 6, 'min_s...0.8202251
16{'learning_rate': 0.05, 'max_depth': 6, 'min_s...0.8202251
18{'learning_rate': 0.05, 'max_depth': 6, 'min_s...0.8202251
20{'learning_rate': 0.05, 'max_depth': 6, 'min_s...0.8202251
58{'learning_rate': 0.05, 'max_depth': 8, 'min_s...0.8188205
60{'learning_rate': 0.05, 'max_depth': 8, 'min_s...0.8188205
62{'learning_rate': 0.05, 'max_depth': 8, 'min_s...0.8188205
135{'learning_rate': 0.1, 'max_depth': 6, 'min_sa...0.8188205
56{'learning_rate': 0.05, 'max_depth': 8, 'min_s...0.8188205
120{'learning_rate': 0.05, 'max_depth': 12, 'min_...0.81741610
\n", 753 | "
" 754 | ], 755 | "text/plain": [ 756 | " params mean_test_score \\\n", 757 | "22 {'learning_rate': 0.05, 'max_depth': 6, 'min_s... 0.820225 \n", 758 | "16 {'learning_rate': 0.05, 'max_depth': 6, 'min_s... 0.820225 \n", 759 | "18 {'learning_rate': 0.05, 'max_depth': 6, 'min_s... 0.820225 \n", 760 | "20 {'learning_rate': 0.05, 'max_depth': 6, 'min_s... 0.820225 \n", 761 | "58 {'learning_rate': 0.05, 'max_depth': 8, 'min_s... 0.818820 \n", 762 | "60 {'learning_rate': 0.05, 'max_depth': 8, 'min_s... 0.818820 \n", 763 | "62 {'learning_rate': 0.05, 'max_depth': 8, 'min_s... 0.818820 \n", 764 | "135 {'learning_rate': 0.1, 'max_depth': 6, 'min_sa... 0.818820 \n", 765 | "56 {'learning_rate': 0.05, 'max_depth': 8, 'min_s... 0.818820 \n", 766 | "120 {'learning_rate': 0.05, 'max_depth': 12, 'min_... 0.817416 \n", 767 | "\n", 768 | " rank_test_score \n", 769 | "22 1 \n", 770 | "16 1 \n", 771 | "18 1 \n", 772 | "20 1 \n", 773 | "58 5 \n", 774 | "60 5 \n", 775 | "62 5 \n", 776 | "135 5 \n", 777 | "56 5 \n", 778 | "120 10 " 779 | ] 780 | }, 781 | "execution_count": 18, 782 | "metadata": {}, 783 | "output_type": "execute_result" 784 | } 785 | ], 786 | "source": [ 787 | "result[['params', 'mean_test_score', 'rank_test_score']].head(10)" 788 | ] 789 | }, 790 | { 791 | "cell_type": "code", 792 | "execution_count": 20, 793 | "metadata": {}, 794 | "outputs": [ 795 | { 796 | "name": "stdout", 797 | "output_type": "stream", 798 | "text": [ 799 | "정확도 : 0.8492\n" 800 | ] 801 | } 802 | ], 803 | "source": [ 804 | "model = gb_grid.best_estimator_\n", 805 | "pred = model.predict(X_test)\n", 806 | "acc = accuracy_score(y_test, pred)\n", 807 | "print(\"정확도 : {0:.4f}\".format(acc))\n" 808 | ] 809 | }, 810 | { 811 | "cell_type": "code", 812 | "execution_count": 21, 813 | "metadata": {}, 814 | "outputs": [], 815 | "source": [ 816 | "feature_importances = model.feature_importances_" 817 | ] 818 | }, 819 | { 820 | "cell_type": "code", 821 | "execution_count": 22, 822 | "metadata": {}, 823 | "outputs": [ 824 | { 825 | "data": { 826 | "image/png": "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\n", 827 | "text/plain": [ 828 | "
" 829 | ] 830 | }, 831 | "metadata": { 832 | "needs_background": "light" 833 | }, 834 | "output_type": "display_data" 835 | } 836 | ], 837 | "source": [ 838 | "ft_importances = pd.Series(feature_importances, index = X_train.columns)\n", 839 | "ft_importances = ft_importances.sort_values(ascending=False)\n", 840 | "\n", 841 | "plt.figure(figsize=(12, 10))\n", 842 | "plt.title(\"feature importances\")\n", 843 | "sns.barplot(x=ft_importances, y = X_train.columns)\n", 844 | "plt.show()\n" 845 | ] 846 | }, 847 | { 848 | "cell_type": "code", 849 | "execution_count": null, 850 | "metadata": {}, 851 | "outputs": [], 852 | "source": [] 853 | } 854 | ], 855 | "metadata": { 856 | "kernelspec": { 857 | "display_name": "Python 3", 858 | "language": "python", 859 | "name": "python3" 860 | }, 861 | "language_info": { 862 | "codemirror_mode": { 863 | "name": "ipython", 864 | "version": 3 865 | }, 866 | "file_extension": ".py", 867 | "mimetype": "text/x-python", 868 | "name": "python", 869 | "nbconvert_exporter": "python", 870 | "pygments_lexer": "ipython3", 871 | "version": "3.6.9" 872 | } 873 | }, 874 | "nbformat": 4, 875 | "nbformat_minor": 2 876 | } 877 | -------------------------------------------------------------------------------- /009. XGboost, LightGBM.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 출처 \n", 8 | "\n", 9 | "## xgboost\n", 10 | "\n", 11 | "- https://apple-rbox.tistory.com/6\n", 12 | "- https://brunch.co.kr/@snobberys/137\n" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "metadata": {}, 18 | "source": [ 19 | "## lightgbm\n", 20 | "\n", 21 | "- https://ko.raw3h.net/page/what-is-lightgbm-how-to-implement-it-how-to-fine-tune-the-parameters-5295f7/\n", 22 | "\n", 23 | "\n", 24 | "## 그 외\n", 25 | "\n", 26 | "- https://www.kaggle.com/shep312/applying-lightgbm-to-titanic-dataset\n", 27 | "- https://www.kaggle.com/suniliitb96/titanic-survival-prediction-using-xgboost\n" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 1, 33 | "metadata": {}, 34 | "outputs": [], 35 | "source": [ 36 | "import pandas as pd\n", 37 | "import numpy as np\n", 38 | "import matplotlib.pyplot as plt\n", 39 | "import seaborn as sns\n", 40 | "from xgboost import plot_importance\n", 41 | "from xgboost import XGBClassifier\n", 42 | "from sklearn.datasets import load_breast_cancer\n", 43 | "from sklearn.model_selection import train_test_split, GridSearchCV\n", 44 | "from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, roc_auc_score, confusion_matrix" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 10, 50 | "metadata": {}, 51 | "outputs": [], 52 | "source": [ 53 | "def metrics(y_test, pred):\n", 54 | " accuracy = accuracy_score(y_test, pred)\n", 55 | " precision = precision_score(y_test, pred)\n", 56 | " recall = recall_score(y_test, pred)\n", 57 | " f1 = f1_score(y_test, pred)\n", 58 | " roc_score = roc_auc_score(y_test, pred)\n", 59 | " print('정확도 : {0:.2f}, 정밀도 : {1:.2f}, 재현율 : {2:.2f}'.format(accuracy, precision, recall))\n", 60 | " print('f1-score : {0:.2f}, auc : {1:.2f}'.format(f1, roc_score))" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": 3, 66 | "metadata": {}, 67 | "outputs": [ 68 | { 69 | "data": { 70 | "text/html": [ 71 | "
\n", 72 | "\n", 85 | "\n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimensiontarget
017.9910.38122.801001.00.118400.277600.30010.147100.24190.07871...17.33184.602019.00.16220.66560.71190.26540.46010.118900
120.5717.77132.901326.00.084740.078640.08690.070170.18120.05667...23.41158.801956.00.12380.18660.24160.18600.27500.089020
219.6921.25130.001203.00.109600.159900.19740.127900.20690.05999...25.53152.501709.00.14440.42450.45040.24300.36130.087580
311.4220.3877.58386.10.142500.283900.24140.105200.25970.09744...26.5098.87567.70.20980.86630.68690.25750.66380.173000
420.2914.34135.101297.00.100300.132800.19800.104300.18090.05883...16.67152.201575.00.13740.20500.40000.16250.23640.076780
\n", 235 | "

5 rows × 31 columns

\n", 236 | "
" 237 | ], 238 | "text/plain": [ 239 | " mean radius mean texture mean perimeter mean area mean smoothness \\\n", 240 | "0 17.99 10.38 122.80 1001.0 0.11840 \n", 241 | "1 20.57 17.77 132.90 1326.0 0.08474 \n", 242 | "2 19.69 21.25 130.00 1203.0 0.10960 \n", 243 | "3 11.42 20.38 77.58 386.1 0.14250 \n", 244 | "4 20.29 14.34 135.10 1297.0 0.10030 \n", 245 | "\n", 246 | " mean compactness mean concavity mean concave points mean symmetry \\\n", 247 | "0 0.27760 0.3001 0.14710 0.2419 \n", 248 | "1 0.07864 0.0869 0.07017 0.1812 \n", 249 | "2 0.15990 0.1974 0.12790 0.2069 \n", 250 | "3 0.28390 0.2414 0.10520 0.2597 \n", 251 | "4 0.13280 0.1980 0.10430 0.1809 \n", 252 | "\n", 253 | " mean fractal dimension ... worst texture worst perimeter worst area \\\n", 254 | "0 0.07871 ... 17.33 184.60 2019.0 \n", 255 | "1 0.05667 ... 23.41 158.80 1956.0 \n", 256 | "2 0.05999 ... 25.53 152.50 1709.0 \n", 257 | "3 0.09744 ... 26.50 98.87 567.7 \n", 258 | "4 0.05883 ... 16.67 152.20 1575.0 \n", 259 | "\n", 260 | " worst smoothness worst compactness worst concavity worst concave points \\\n", 261 | "0 0.1622 0.6656 0.7119 0.2654 \n", 262 | "1 0.1238 0.1866 0.2416 0.1860 \n", 263 | "2 0.1444 0.4245 0.4504 0.2430 \n", 264 | "3 0.2098 0.8663 0.6869 0.2575 \n", 265 | "4 0.1374 0.2050 0.4000 0.1625 \n", 266 | "\n", 267 | " worst symmetry worst fractal dimension target \n", 268 | "0 0.4601 0.11890 0 \n", 269 | "1 0.2750 0.08902 0 \n", 270 | "2 0.3613 0.08758 0 \n", 271 | "3 0.6638 0.17300 0 \n", 272 | "4 0.2364 0.07678 0 \n", 273 | "\n", 274 | "[5 rows x 31 columns]" 275 | ] 276 | }, 277 | "execution_count": 3, 278 | "metadata": {}, 279 | "output_type": "execute_result" 280 | } 281 | ], 282 | "source": [ 283 | "data = load_breast_cancer()\n", 284 | "\n", 285 | "cancer = pd.DataFrame(data.data, columns = data.feature_names)\n", 286 | "cancer['target'] = data.target\n", 287 | "cancer.head()" 288 | ] 289 | }, 290 | { 291 | "cell_type": "code", 292 | "execution_count": 5, 293 | "metadata": {}, 294 | "outputs": [ 295 | { 296 | "data": { 297 | "text/plain": [ 298 | "1 357\n", 299 | "0 212\n", 300 | "Name: target, dtype: int64" 301 | ] 302 | }, 303 | "execution_count": 5, 304 | "metadata": {}, 305 | "output_type": "execute_result" 306 | } 307 | ], 308 | "source": [ 309 | "cancer['target'].value_counts()" 310 | ] 311 | }, 312 | { 313 | "cell_type": "code", 314 | "execution_count": 7, 315 | "metadata": {}, 316 | "outputs": [ 317 | { 318 | "name": "stdout", 319 | "output_type": "stream", 320 | "text": [ 321 | "(455, 30) (114, 30)\n" 322 | ] 323 | } 324 | ], 325 | "source": [ 326 | "y = cancer['target']\n", 327 | "X = cancer.drop('target', axis = 1)\n", 328 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 11)\n", 329 | "print(X_train.shape, X_test.shape)" 330 | ] 331 | }, 332 | { 333 | "cell_type": "code", 334 | "execution_count": 8, 335 | "metadata": {}, 336 | "outputs": [], 337 | "source": [ 338 | "xgb = XGBClassifier(n_estimators=500, learning_rate = 0.1, max_depth = 4)\n", 339 | "xgb.fit(X_train, y_train)\n", 340 | "xgb_pred = xgb.predict(X_test)" 341 | ] 342 | }, 343 | { 344 | "cell_type": "code", 345 | "execution_count": 12, 346 | "metadata": {}, 347 | "outputs": [ 348 | { 349 | "name": "stdout", 350 | "output_type": "stream", 351 | "text": [ 352 | "정확도 : 0.99, 정밀도 : 0.99, 재현율 : 1.00\n", 353 | "f1-score : 0.99, auc : 0.99\n" 354 | ] 355 | } 356 | ], 357 | "source": [ 358 | "metrics(y_test, xgb_pred)" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": null, 364 | "metadata": {}, 365 | "outputs": [], 366 | "source": [] 367 | }, 368 | { 369 | "cell_type": "code", 370 | "execution_count": null, 371 | "metadata": {}, 372 | "outputs": [], 373 | "source": [] 374 | }, 375 | { 376 | "cell_type": "code", 377 | "execution_count": null, 378 | "metadata": {}, 379 | "outputs": [], 380 | "source": [] 381 | }, 382 | { 383 | "cell_type": "code", 384 | "execution_count": 2, 385 | "metadata": {}, 386 | "outputs": [ 387 | { 388 | "data": { 389 | "text/html": [ 390 | "
\n", 391 | "\n", 404 | "\n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", 500 | "
" 501 | ], 502 | "text/plain": [ 503 | " PassengerId Survived Pclass \\\n", 504 | "0 1 0 3 \n", 505 | "1 2 1 1 \n", 506 | "2 3 1 3 \n", 507 | "3 4 1 1 \n", 508 | "4 5 0 3 \n", 509 | "\n", 510 | " Name Sex Age SibSp \\\n", 511 | "0 Braund, Mr. Owen Harris male 22.0 1 \n", 512 | "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", 513 | "2 Heikkinen, Miss. Laina female 26.0 0 \n", 514 | "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", 515 | "4 Allen, Mr. William Henry male 35.0 0 \n", 516 | "\n", 517 | " Parch Ticket Fare Cabin Embarked \n", 518 | "0 0 A/5 21171 7.2500 NaN S \n", 519 | "1 0 PC 17599 71.2833 C85 C \n", 520 | "2 0 STON/O2. 3101282 7.9250 NaN S \n", 521 | "3 0 113803 53.1000 C123 S \n", 522 | "4 0 373450 8.0500 NaN S " 523 | ] 524 | }, 525 | "execution_count": 2, 526 | "metadata": {}, 527 | "output_type": "execute_result" 528 | } 529 | ], 530 | "source": [ 531 | "data = pd.read_csv('./datas/titanic/train.csv')\n", 532 | "data.head()" 533 | ] 534 | }, 535 | { 536 | "cell_type": "code", 537 | "execution_count": 3, 538 | "metadata": {}, 539 | "outputs": [], 540 | "source": [ 541 | "data['Embarked'].fillna('S', inplace = True)\n", 542 | "data['Fare'].fillna(0, inplace=True)\n", 543 | "data['Initial'] = data['Name'].str.extract('([A-Za-z]+)\\.')\n", 544 | "data['Initial'].replace(['Mlle','Mme','Ms','Dr','Major','Lady','Countess','Jonkheer','Col','Rev','Capt','Sir','Don', 'Dona'],['Miss','Miss','Miss','Mr','Mr','Mrs','Mrs','Other','Other','Other','Mr','Mr','Mr','Other'],inplace=True)\n" 545 | ] 546 | }, 547 | { 548 | "cell_type": "code", 549 | "execution_count": 3, 550 | "metadata": {}, 551 | "outputs": [], 552 | "source": [ 553 | "\n", 554 | "mapping = {\n", 555 | " \"Mr\":0,\n", 556 | " \"Miss\":1,\n", 557 | " \"Mrs\" : 1,\n", 558 | " \"Master\":2,\n", 559 | " \"Other\":3\n", 560 | "}\n", 561 | "\n", 562 | "\n", 563 | "\n", 564 | "mapping_sex = {\n", 565 | " 'male' : 0,\n", 566 | " 'female': 1\n", 567 | "}\n", 568 | "\n", 569 | "mapping_em = {\n", 570 | " 'S' :0,\n", 571 | " 'C' :1,\n", 572 | " 'Q' :2\n", 573 | "}\n" 574 | ] 575 | }, 576 | { 577 | "cell_type": "code", 578 | "execution_count": 3, 579 | "metadata": {}, 580 | "outputs": [], 581 | "source": [ 582 | "\n", 583 | "data['Initial'] = data['Initial'].map(mapping)\n", 584 | "data['Fare'] = data['Fare'].map(lambda x : np.log(x) if x > 0 else 0)\n", 585 | "data['Sex'] = data['Sex'].map(mapping_sex)\n", 586 | "data['Embarked'] = data['Embarked'].map(mapping_em)\n" 587 | ] 588 | }, 589 | { 590 | "cell_type": "code", 591 | "execution_count": 3, 592 | "metadata": {}, 593 | "outputs": [], 594 | "source": [ 595 | "data.drop(['PassengerId', \"Ticket\", \"Cabin\", \"Name\"], axis = 1, inplace = True)\n", 596 | "\n", 597 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 0), 'Age' ] = 32\n", 598 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 1), 'Age' ] = 28\n", 599 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 2), 'Age' ] = 5\n", 600 | "data.loc[ (data['Age'].isnull()) & (data['Initial'] == 3), 'Age' ] = 45" 601 | ] 602 | }, 603 | { 604 | "cell_type": "code", 605 | "execution_count": 4, 606 | "metadata": {}, 607 | "outputs": [], 608 | "source": [ 609 | "y = data['Survived']\n", 610 | "X = data.drop('Survived', axis = 1)\n", 611 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=10)" 612 | ] 613 | }, 614 | { 615 | "cell_type": "code", 616 | "execution_count": 13, 617 | "metadata": {}, 618 | "outputs": [ 619 | { 620 | "name": "stderr", 621 | "output_type": "stream", 622 | "text": [ 623 | "d:\\anaconda3\\envs\\soojin\\lib\\site-packages\\sklearn\\model_selection\\_split.py:1978: FutureWarning: The default value of cv will change from 3 to 5 in version 0.22. Specify it explicitly to silence this warning.\n", 624 | " warnings.warn(CV_WARNING, FutureWarning)\n", 625 | "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 12 concurrent workers.\n" 626 | ] 627 | }, 628 | { 629 | "name": "stdout", 630 | "output_type": "stream", 631 | "text": [ 632 | "Fitting 3 folds for each of 100 candidates, totalling 300 fits\n" 633 | ] 634 | }, 635 | { 636 | "name": "stderr", 637 | "output_type": "stream", 638 | "text": [ 639 | "[Parallel(n_jobs=-1)]: Done 26 tasks | elapsed: 3.5s\n", 640 | "[Parallel(n_jobs=-1)]: Done 176 tasks | elapsed: 8.8s\n", 641 | "[Parallel(n_jobs=-1)]: Done 300 out of 300 | elapsed: 12.8s finished\n" 642 | ] 643 | }, 644 | { 645 | "data": { 646 | "text/plain": [ 647 | "GridSearchCV(cv='warn', error_score='raise-deprecating',\n", 648 | " estimator=XGBClassifier(base_score=0.5, booster='gbtree',\n", 649 | " colsample_bylevel=1, colsample_bynode=1,\n", 650 | " colsample_bytree=1, gamma=0,\n", 651 | " learning_rate=0.1, max_delta_step=0,\n", 652 | " max_depth=3, min_child_weight=1,\n", 653 | " missing=None, n_estimators=100, n_jobs=1,\n", 654 | " nthread=None, objective='binary:logistic',\n", 655 | " random_state=0, reg_alpha=0, reg_lambda=1,\n", 656 | " scale_pos_weight=1, seed=None, silent=None,\n", 657 | " subsample=1, verbosity=1),\n", 658 | " iid='warn', n_jobs=-1,\n", 659 | " param_grid={'learning_rate': [0.01, 0.05, 0.1, 0.15, 0.2],\n", 660 | " 'max_depth': [4, 6, 8, 10, 12],\n", 661 | " 'n_estimators': [100, 200, 400, 600]},\n", 662 | " pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n", 663 | " scoring='accuracy', verbose=1)" 664 | ] 665 | }, 666 | "execution_count": 13, 667 | "metadata": {}, 668 | "output_type": "execute_result" 669 | } 670 | ], 671 | "source": [ 672 | "xgb = XGBClassifier()\n", 673 | "\n", 674 | "xgb_param_grid = {\n", 675 | " 'n_estimators' : [100, 200, 400, 600],\n", 676 | " 'learning_rate' : [0.01, 0.05, 0.1, 0.15, 0.2],\n", 677 | " 'max_depth' : [4, 6, 8, 10, 12],\n", 678 | "}\n", 679 | "\n", 680 | "xgb_grid = GridSearchCV(xgb, param_grid = xgb_param_grid, scoring=\"accuracy\", n_jobs= -1, verbose = 1)\n", 681 | "xgb_grid.fit(X_train, y_train)\n" 682 | ] 683 | }, 684 | { 685 | "cell_type": "code", 686 | "execution_count": 14, 687 | "metadata": {}, 688 | "outputs": [ 689 | { 690 | "name": "stdout", 691 | "output_type": "stream", 692 | "text": [ 693 | "최고 평균 정확도 : 0.8244\n", 694 | "최고의 파라미터 : {'learning_rate': 0.01, 'max_depth': 10, 'n_estimators': 100}\n" 695 | ] 696 | } 697 | ], 698 | "source": [ 699 | "print(\"최고 평균 정확도 : {0:.4f}\".format(xgb_grid.best_score_))\n", 700 | "print(\"최고의 파라미터 : \", xgb_grid.best_params_)" 701 | ] 702 | }, 703 | { 704 | "cell_type": "code", 705 | "execution_count": 15, 706 | "metadata": {}, 707 | "outputs": [], 708 | "source": [ 709 | "result = pd.DataFrame(xgb_grid.cv_results_)\n", 710 | "result.sort_values(by=['rank_test_score'], inplace=True)" 711 | ] 712 | }, 713 | { 714 | "cell_type": "code", 715 | "execution_count": 16, 716 | "metadata": {}, 717 | "outputs": [ 718 | { 719 | "data": { 720 | "text/html": [ 721 | "
\n", 722 | "\n", 735 | "\n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | "
paramsmean_test_scorerank_test_score
16{'learning_rate': 0.01, 'max_depth': 12, 'n_es...0.8244381
12{'learning_rate': 0.01, 'max_depth': 10, 'n_es...0.8244381
10{'learning_rate': 0.01, 'max_depth': 8, 'n_est...0.8230343
6{'learning_rate': 0.01, 'max_depth': 6, 'n_est...0.8230343
11{'learning_rate': 0.01, 'max_depth': 8, 'n_est...0.8216295
14{'learning_rate': 0.01, 'max_depth': 10, 'n_es...0.8202256
7{'learning_rate': 0.01, 'max_depth': 6, 'n_est...0.8202256
8{'learning_rate': 0.01, 'max_depth': 8, 'n_est...0.8202256
15{'learning_rate': 0.01, 'max_depth': 10, 'n_es...0.8188209
20{'learning_rate': 0.05, 'max_depth': 4, 'n_est...0.8188209
\n", 807 | "
" 808 | ], 809 | "text/plain": [ 810 | " params mean_test_score \\\n", 811 | "16 {'learning_rate': 0.01, 'max_depth': 12, 'n_es... 0.824438 \n", 812 | "12 {'learning_rate': 0.01, 'max_depth': 10, 'n_es... 0.824438 \n", 813 | "10 {'learning_rate': 0.01, 'max_depth': 8, 'n_est... 0.823034 \n", 814 | "6 {'learning_rate': 0.01, 'max_depth': 6, 'n_est... 0.823034 \n", 815 | "11 {'learning_rate': 0.01, 'max_depth': 8, 'n_est... 0.821629 \n", 816 | "14 {'learning_rate': 0.01, 'max_depth': 10, 'n_es... 0.820225 \n", 817 | "7 {'learning_rate': 0.01, 'max_depth': 6, 'n_est... 0.820225 \n", 818 | "8 {'learning_rate': 0.01, 'max_depth': 8, 'n_est... 0.820225 \n", 819 | "15 {'learning_rate': 0.01, 'max_depth': 10, 'n_es... 0.818820 \n", 820 | "20 {'learning_rate': 0.05, 'max_depth': 4, 'n_est... 0.818820 \n", 821 | "\n", 822 | " rank_test_score \n", 823 | "16 1 \n", 824 | "12 1 \n", 825 | "10 3 \n", 826 | "6 3 \n", 827 | "11 5 \n", 828 | "14 6 \n", 829 | "7 6 \n", 830 | "8 6 \n", 831 | "15 9 \n", 832 | "20 9 " 833 | ] 834 | }, 835 | "execution_count": 16, 836 | "metadata": {}, 837 | "output_type": "execute_result" 838 | } 839 | ], 840 | "source": [ 841 | "result[['params', 'mean_test_score', 'rank_test_score']].head(10)" 842 | ] 843 | }, 844 | { 845 | "cell_type": "code", 846 | "execution_count": 5, 847 | "metadata": {}, 848 | "outputs": [], 849 | "source": [] 850 | }, 851 | { 852 | "cell_type": "code", 853 | "execution_count": 5, 854 | "metadata": {}, 855 | "outputs": [], 856 | "source": [] 857 | }, 858 | { 859 | "cell_type": "code", 860 | "execution_count": 7, 861 | "metadata": {}, 862 | "outputs": [ 863 | { 864 | "name": "stdout", 865 | "output_type": "stream", 866 | "text": [ 867 | "[0]\tvalidation_0-logloss:0.643237\n", 868 | "Will train until validation_0-logloss hasn't improved in 100 rounds.\n", 869 | "[1]\tvalidation_0-logloss:0.600544\n", 870 | "[2]\tvalidation_0-logloss:0.567278\n", 871 | "[3]\tvalidation_0-logloss:0.539616\n", 872 | "[4]\tvalidation_0-logloss:0.515783\n", 873 | "[5]\tvalidation_0-logloss:0.493083\n", 874 | "[6]\tvalidation_0-logloss:0.475519\n", 875 | "[7]\tvalidation_0-logloss:0.460413\n", 876 | "[8]\tvalidation_0-logloss:0.447876\n", 877 | "[9]\tvalidation_0-logloss:0.434248\n", 878 | "[10]\tvalidation_0-logloss:0.424888\n", 879 | "[11]\tvalidation_0-logloss:0.417043\n", 880 | "[12]\tvalidation_0-logloss:0.410522\n", 881 | "[13]\tvalidation_0-logloss:0.40404\n", 882 | "[14]\tvalidation_0-logloss:0.399429\n", 883 | "[15]\tvalidation_0-logloss:0.393991\n", 884 | "[16]\tvalidation_0-logloss:0.390694\n", 885 | "[17]\tvalidation_0-logloss:0.386906\n", 886 | "[18]\tvalidation_0-logloss:0.383186\n", 887 | "[19]\tvalidation_0-logloss:0.379069\n", 888 | "[20]\tvalidation_0-logloss:0.375775\n", 889 | "[21]\tvalidation_0-logloss:0.374222\n", 890 | "[22]\tvalidation_0-logloss:0.372794\n", 891 | "[23]\tvalidation_0-logloss:0.373341\n", 892 | "[24]\tvalidation_0-logloss:0.370527\n", 893 | "[25]\tvalidation_0-logloss:0.369523\n", 894 | "[26]\tvalidation_0-logloss:0.369086\n", 895 | "[27]\tvalidation_0-logloss:0.369067\n", 896 | "[28]\tvalidation_0-logloss:0.367292\n", 897 | "[29]\tvalidation_0-logloss:0.366029\n", 898 | "[30]\tvalidation_0-logloss:0.365949\n", 899 | "[31]\tvalidation_0-logloss:0.364792\n", 900 | "[32]\tvalidation_0-logloss:0.365043\n", 901 | "[33]\tvalidation_0-logloss:0.365255\n", 902 | "[34]\tvalidation_0-logloss:0.364502\n", 903 | "[35]\tvalidation_0-logloss:0.36495\n", 904 | "[36]\tvalidation_0-logloss:0.3653\n", 905 | "[37]\tvalidation_0-logloss:0.365692\n", 906 | "[38]\tvalidation_0-logloss:0.364633\n", 907 | "[39]\tvalidation_0-logloss:0.365394\n", 908 | "[40]\tvalidation_0-logloss:0.366006\n", 909 | "[41]\tvalidation_0-logloss:0.364511\n", 910 | "[42]\tvalidation_0-logloss:0.362128\n", 911 | "[43]\tvalidation_0-logloss:0.363265\n", 912 | "[44]\tvalidation_0-logloss:0.362809\n", 913 | "[45]\tvalidation_0-logloss:0.361418\n", 914 | "[46]\tvalidation_0-logloss:0.361081\n", 915 | "[47]\tvalidation_0-logloss:0.362271\n", 916 | "[48]\tvalidation_0-logloss:0.360343\n", 917 | "[49]\tvalidation_0-logloss:0.360147\n", 918 | "[50]\tvalidation_0-logloss:0.359536\n", 919 | "[51]\tvalidation_0-logloss:0.360105\n", 920 | "[52]\tvalidation_0-logloss:0.359863\n", 921 | "[53]\tvalidation_0-logloss:0.360054\n", 922 | "[54]\tvalidation_0-logloss:0.360457\n", 923 | "[55]\tvalidation_0-logloss:0.359963\n", 924 | "[56]\tvalidation_0-logloss:0.359591\n", 925 | "[57]\tvalidation_0-logloss:0.360042\n", 926 | "[58]\tvalidation_0-logloss:0.358606\n", 927 | "[59]\tvalidation_0-logloss:0.35847\n", 928 | "[60]\tvalidation_0-logloss:0.358429\n", 929 | "[61]\tvalidation_0-logloss:0.358046\n", 930 | "[62]\tvalidation_0-logloss:0.357865\n", 931 | "[63]\tvalidation_0-logloss:0.356589\n", 932 | "[64]\tvalidation_0-logloss:0.356376\n", 933 | "[65]\tvalidation_0-logloss:0.357027\n", 934 | "[66]\tvalidation_0-logloss:0.356924\n", 935 | "[67]\tvalidation_0-logloss:0.357237\n", 936 | "[68]\tvalidation_0-logloss:0.358427\n", 937 | "[69]\tvalidation_0-logloss:0.358904\n", 938 | "[70]\tvalidation_0-logloss:0.356838\n", 939 | "[71]\tvalidation_0-logloss:0.355709\n", 940 | "[72]\tvalidation_0-logloss:0.356185\n", 941 | "[73]\tvalidation_0-logloss:0.357439\n", 942 | "[74]\tvalidation_0-logloss:0.356952\n", 943 | "[75]\tvalidation_0-logloss:0.356894\n", 944 | "[76]\tvalidation_0-logloss:0.357164\n", 945 | "[77]\tvalidation_0-logloss:0.35748\n", 946 | "[78]\tvalidation_0-logloss:0.357296\n", 947 | "[79]\tvalidation_0-logloss:0.357984\n", 948 | "[80]\tvalidation_0-logloss:0.357816\n", 949 | "[81]\tvalidation_0-logloss:0.358238\n", 950 | "[82]\tvalidation_0-logloss:0.358398\n", 951 | "[83]\tvalidation_0-logloss:0.358424\n", 952 | "[84]\tvalidation_0-logloss:0.358912\n", 953 | "[85]\tvalidation_0-logloss:0.360025\n", 954 | "[86]\tvalidation_0-logloss:0.359234\n", 955 | "[87]\tvalidation_0-logloss:0.359403\n", 956 | "[88]\tvalidation_0-logloss:0.358514\n", 957 | "[89]\tvalidation_0-logloss:0.359621\n", 958 | "[90]\tvalidation_0-logloss:0.359716\n", 959 | "[91]\tvalidation_0-logloss:0.360305\n", 960 | "[92]\tvalidation_0-logloss:0.359297\n", 961 | "[93]\tvalidation_0-logloss:0.35923\n", 962 | "[94]\tvalidation_0-logloss:0.35925\n", 963 | "[95]\tvalidation_0-logloss:0.359636\n", 964 | "[96]\tvalidation_0-logloss:0.358746\n", 965 | "[97]\tvalidation_0-logloss:0.359995\n", 966 | "[98]\tvalidation_0-logloss:0.358856\n", 967 | "[99]\tvalidation_0-logloss:0.359269\n", 968 | "[100]\tvalidation_0-logloss:0.359495\n", 969 | "[101]\tvalidation_0-logloss:0.359534\n", 970 | "[102]\tvalidation_0-logloss:0.359903\n", 971 | "[103]\tvalidation_0-logloss:0.360073\n", 972 | "[104]\tvalidation_0-logloss:0.360139\n", 973 | "[105]\tvalidation_0-logloss:0.360796\n", 974 | "[106]\tvalidation_0-logloss:0.359293\n", 975 | "[107]\tvalidation_0-logloss:0.359956\n", 976 | "[108]\tvalidation_0-logloss:0.360043\n", 977 | "[109]\tvalidation_0-logloss:0.359125\n", 978 | "[110]\tvalidation_0-logloss:0.359315\n", 979 | "[111]\tvalidation_0-logloss:0.3594\n", 980 | "[112]\tvalidation_0-logloss:0.359811\n", 981 | "[113]\tvalidation_0-logloss:0.359921\n", 982 | "[114]\tvalidation_0-logloss:0.360095\n", 983 | "[115]\tvalidation_0-logloss:0.35926\n", 984 | "[116]\tvalidation_0-logloss:0.359522\n", 985 | "[117]\tvalidation_0-logloss:0.35992\n", 986 | "[118]\tvalidation_0-logloss:0.359175\n", 987 | "[119]\tvalidation_0-logloss:0.358587\n", 988 | "[120]\tvalidation_0-logloss:0.358692\n", 989 | "[121]\tvalidation_0-logloss:0.359066\n", 990 | "[122]\tvalidation_0-logloss:0.359215\n", 991 | "[123]\tvalidation_0-logloss:0.358593\n", 992 | "[124]\tvalidation_0-logloss:0.35855\n", 993 | "[125]\tvalidation_0-logloss:0.35841\n", 994 | "[126]\tvalidation_0-logloss:0.358248\n", 995 | "[127]\tvalidation_0-logloss:0.358388\n", 996 | "[128]\tvalidation_0-logloss:0.358489\n", 997 | "[129]\tvalidation_0-logloss:0.358913\n", 998 | "[130]\tvalidation_0-logloss:0.359169\n", 999 | "[131]\tvalidation_0-logloss:0.358706\n", 1000 | "[132]\tvalidation_0-logloss:0.358846\n", 1001 | "[133]\tvalidation_0-logloss:0.35899\n", 1002 | "[134]\tvalidation_0-logloss:0.358574\n", 1003 | "[135]\tvalidation_0-logloss:0.358431\n", 1004 | "[136]\tvalidation_0-logloss:0.358572\n", 1005 | "[137]\tvalidation_0-logloss:0.357526\n", 1006 | "[138]\tvalidation_0-logloss:0.3576\n", 1007 | "[139]\tvalidation_0-logloss:0.358176\n", 1008 | "[140]\tvalidation_0-logloss:0.357707\n", 1009 | "[141]\tvalidation_0-logloss:0.357483\n", 1010 | "[142]\tvalidation_0-logloss:0.357542\n", 1011 | "[143]\tvalidation_0-logloss:0.357489\n", 1012 | "[144]\tvalidation_0-logloss:0.357366\n", 1013 | "[145]\tvalidation_0-logloss:0.358119\n", 1014 | "[146]\tvalidation_0-logloss:0.358145\n", 1015 | "[147]\tvalidation_0-logloss:0.35822\n", 1016 | "[148]\tvalidation_0-logloss:0.35805\n", 1017 | "[149]\tvalidation_0-logloss:0.35899\n", 1018 | "[150]\tvalidation_0-logloss:0.35882\n", 1019 | "[151]\tvalidation_0-logloss:0.357895\n", 1020 | "[152]\tvalidation_0-logloss:0.358154\n", 1021 | "[153]\tvalidation_0-logloss:0.357417\n", 1022 | "[154]\tvalidation_0-logloss:0.359365\n", 1023 | "[155]\tvalidation_0-logloss:0.358782\n", 1024 | "[156]\tvalidation_0-logloss:0.358195\n", 1025 | "[157]\tvalidation_0-logloss:0.357697\n", 1026 | "[158]\tvalidation_0-logloss:0.358491\n", 1027 | "[159]\tvalidation_0-logloss:0.358627\n", 1028 | "[160]\tvalidation_0-logloss:0.358216\n", 1029 | "[161]\tvalidation_0-logloss:0.358591\n", 1030 | "[162]\tvalidation_0-logloss:0.358682\n", 1031 | "[163]\tvalidation_0-logloss:0.358732\n", 1032 | "[164]\tvalidation_0-logloss:0.358995\n", 1033 | "[165]\tvalidation_0-logloss:0.359204\n", 1034 | "[166]\tvalidation_0-logloss:0.358358\n", 1035 | "[167]\tvalidation_0-logloss:0.359008\n", 1036 | "[168]\tvalidation_0-logloss:0.358891\n", 1037 | "[169]\tvalidation_0-logloss:0.357869\n", 1038 | "[170]\tvalidation_0-logloss:0.357907\n", 1039 | "[171]\tvalidation_0-logloss:0.3576\n", 1040 | "Stopping. Best iteration:\n", 1041 | "[71]\tvalidation_0-logloss:0.355709\n", 1042 | "\n" 1043 | ] 1044 | }, 1045 | { 1046 | "data": { 1047 | "text/plain": [ 1048 | "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n", 1049 | " colsample_bynode=1, colsample_bytree=1, gamma=0,\n", 1050 | " learning_rate=0.1, max_delta_step=0, max_depth=3,\n", 1051 | " min_child_weight=1, missing=None, n_estimators=400, n_jobs=1,\n", 1052 | " nthread=None, objective='binary:logistic', random_state=0,\n", 1053 | " reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,\n", 1054 | " silent=None, subsample=1, verbosity=1)" 1055 | ] 1056 | }, 1057 | "execution_count": 7, 1058 | "metadata": {}, 1059 | "output_type": "execute_result" 1060 | } 1061 | ], 1062 | "source": [ 1063 | "xgb = XGBClassifier(n_estimators=400, learning_rate = 0.1, max_depth = 3)\n", 1064 | "evals = [(X_test, y_test)]\n", 1065 | "xgb.fit(X_train, y_train, early_stopping_rounds = 100, eval_metric = \"logloss\", eval_set = evals, verbose = 1)" 1066 | ] 1067 | }, 1068 | { 1069 | "cell_type": "code", 1070 | "execution_count": 17, 1071 | "metadata": {}, 1072 | "outputs": [ 1073 | { 1074 | "name": "stdout", 1075 | "output_type": "stream", 1076 | "text": [ 1077 | "[0]\tvalidation_0-logloss:0.643237\n", 1078 | "Will train until validation_0-logloss hasn't improved in 3 rounds.\n", 1079 | "[1]\tvalidation_0-logloss:0.600544\n", 1080 | "[2]\tvalidation_0-logloss:0.567278\n", 1081 | "[3]\tvalidation_0-logloss:0.539616\n", 1082 | "[4]\tvalidation_0-logloss:0.515783\n", 1083 | "[5]\tvalidation_0-logloss:0.493083\n", 1084 | "[6]\tvalidation_0-logloss:0.475519\n", 1085 | "[7]\tvalidation_0-logloss:0.460413\n", 1086 | "[8]\tvalidation_0-logloss:0.447876\n", 1087 | "[9]\tvalidation_0-logloss:0.434248\n", 1088 | "[10]\tvalidation_0-logloss:0.424888\n", 1089 | "[11]\tvalidation_0-logloss:0.417043\n", 1090 | "[12]\tvalidation_0-logloss:0.410522\n", 1091 | "[13]\tvalidation_0-logloss:0.40404\n", 1092 | "[14]\tvalidation_0-logloss:0.399429\n", 1093 | "[15]\tvalidation_0-logloss:0.393991\n", 1094 | "[16]\tvalidation_0-logloss:0.390694\n", 1095 | "[17]\tvalidation_0-logloss:0.386906\n", 1096 | "[18]\tvalidation_0-logloss:0.383186\n", 1097 | "[19]\tvalidation_0-logloss:0.379069\n", 1098 | "[20]\tvalidation_0-logloss:0.375775\n", 1099 | "[21]\tvalidation_0-logloss:0.374222\n", 1100 | "[22]\tvalidation_0-logloss:0.372794\n", 1101 | "[23]\tvalidation_0-logloss:0.373341\n", 1102 | "[24]\tvalidation_0-logloss:0.370527\n", 1103 | "[25]\tvalidation_0-logloss:0.369523\n", 1104 | "[26]\tvalidation_0-logloss:0.369086\n", 1105 | "[27]\tvalidation_0-logloss:0.369067\n", 1106 | "[28]\tvalidation_0-logloss:0.367292\n", 1107 | "[29]\tvalidation_0-logloss:0.366029\n", 1108 | "[30]\tvalidation_0-logloss:0.365949\n", 1109 | "[31]\tvalidation_0-logloss:0.364792\n", 1110 | "[32]\tvalidation_0-logloss:0.365043\n", 1111 | "[33]\tvalidation_0-logloss:0.365255\n", 1112 | "[34]\tvalidation_0-logloss:0.364502\n", 1113 | "[35]\tvalidation_0-logloss:0.36495\n", 1114 | "[36]\tvalidation_0-logloss:0.3653\n", 1115 | "[37]\tvalidation_0-logloss:0.365692\n", 1116 | "Stopping. Best iteration:\n", 1117 | "[34]\tvalidation_0-logloss:0.364502\n", 1118 | "\n" 1119 | ] 1120 | }, 1121 | { 1122 | "data": { 1123 | "text/plain": [ 1124 | "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n", 1125 | " colsample_bynode=1, colsample_bytree=1, gamma=0,\n", 1126 | " learning_rate=0.1, max_delta_step=0, max_depth=3,\n", 1127 | " min_child_weight=1, missing=None, n_estimators=400, n_jobs=1,\n", 1128 | " nthread=None, objective='binary:logistic', random_state=0,\n", 1129 | " reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,\n", 1130 | " silent=None, subsample=1, verbosity=1)" 1131 | ] 1132 | }, 1133 | "execution_count": 17, 1134 | "metadata": {}, 1135 | "output_type": "execute_result" 1136 | } 1137 | ], 1138 | "source": [ 1139 | "xgb = XGBClassifier(n_estimators=400, learning_rate = 0.1, max_depth = 3)\n", 1140 | "evals = [(X_test, y_test)]\n", 1141 | "xgb.fit(X_train, y_train, early_stopping_rounds = 3, eval_metric = \"logloss\", eval_set = evals, verbose = 1)" 1142 | ] 1143 | }, 1144 | { 1145 | "cell_type": "code", 1146 | "execution_count": 9, 1147 | "metadata": {}, 1148 | "outputs": [ 1149 | { 1150 | "data": { 1151 | "text/plain": [ 1152 | "" 1153 | ] 1154 | }, 1155 | "execution_count": 9, 1156 | "metadata": {}, 1157 | "output_type": "execute_result" 1158 | }, 1159 | { 1160 | "data": { 1161 | "image/png": "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fl/PtAwN9HwiYuy61puMl+UMX5QzaTqwez3LP0D2XJKZmRWA79RgZmap4IJkZmap4IJkZmap4IJkZmap4IJkZmap4IJkZmap4IJkZmap4IJkZmap4IJkZmap4IJkZmap4IJkZmap4IJkZmap4IJkZmap4IJkZmap4ILUhsybN48RI0YwePBghgwZwqRJkwC44447GDJkCB06dOCFF14ocEozs/q1yoIkqbIR89wkaadk+Md1pj2dj22kTadOnZg4cSKvv/46zz77LL/4xS+oqKiguLiYu+66i+HDhxc6oplZg9L8CPMmiYiTckZ/DDVLa1IAAAxUSURBVFyeM+2/8rGNquoa+o+/Px+rapKK5DHq/fr1o1+/fgBssskmDB48mMWLFzN48OBCxjMza5RW2UOqJalMUkbSXyS9IelWSUqmZSTtJmkCyePUJd2aTKtMfhZJekTSi5JmSzq0gG8nryoqKpg1a5aLkZm1GoqIQmdYb5IqI6JIUhlwDzAEeB94CvhRRDwpKQOcExEv1M5fz/KdgI0j4lNJvYFnge0iIuouk7PsOGAcQO/efYZdeN2U5n6761SyZY/Vxquqqjj99NM59thj2XXXXSkqyr6NM844gx/84AfssMMOhYhZr8rKylX50soZmy7t+cAZ86Gx+UaMGDEzInar294WDtnNiIj3ACSVA/2BJxu5rIDLJQ0HVgJbApsDHzS0QERMBiYDbDNwUEycXfhdWHFM2arh6upqRo0axcknn8xZZ51FJpOhrCw7vWfPngwbNozddlvjc1AwufnSyhmbLu35wBnzoan5Cv9t2nTLc4ZrWL/3dAzQBxgWEdWSKoCN8pitRUUEJ554IoMHD+ass84qdBwzs/XSFgpSY1RL6hwR1XXaewALk2I0Ath2fVbarXNH5iQXFKTBU089xc0330xJSQmlpaUAHH300Xz00UeceuqpLFq0iEMOOYTS0lIefPDBAqc1M1tdeylIk4GXJb0YEcfktN8K3CfpBaAceKMg6fJk3333pe45wdou9OGHH16gVGZmjdMqC1LtxQYRkQEyOe2n5AyX5QyfB5xXz/KLgb3Xtg0zM2sZrfqybzMzaztckMzMLBVckMzMLBVckMzMLBVckMzMLBVckMzMLBVckMzMLBVckMzMLBVckMzMLBVckMzMLBVckMzMLBVckMzMLBVckMzMLBVc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\n", 1162 | "text/plain": [ 1163 | "
" 1164 | ] 1165 | }, 1166 | "metadata": { 1167 | "needs_background": "light" 1168 | }, 1169 | "output_type": "display_data" 1170 | } 1171 | ], 1172 | "source": [ 1173 | "fig, ax = plt.subplots()\n", 1174 | "plot_importance(xgb, ax=ax)" 1175 | ] 1176 | }, 1177 | { 1178 | "cell_type": "code", 1179 | "execution_count": null, 1180 | "metadata": {}, 1181 | "outputs": [], 1182 | "source": [] 1183 | }, 1184 | { 1185 | "cell_type": "code", 1186 | "execution_count": 6, 1187 | "metadata": {}, 1188 | "outputs": [], 1189 | "source": [ 1190 | "from lightgbm import LGBMClassifier, plot_importance" 1191 | ] 1192 | }, 1193 | { 1194 | "cell_type": "code", 1195 | "execution_count": 11, 1196 | "metadata": {}, 1197 | "outputs": [ 1198 | { 1199 | "data": { 1200 | "text/plain": [ 1201 | "LGBMClassifier(boosting_type='gbdt', class_weight=None, colsample_bytree=1.0,\n", 1202 | " importance_type='split', learning_rate=0.1, max_depth=-1,\n", 1203 | " min_child_samples=20, min_child_weight=0.001, min_split_gain=0.0,\n", 1204 | " n_estimaotrs=400, n_estimators=100, n_jobs=-1, num_leaves=31,\n", 1205 | " objective=None, random_state=None, reg_alpha=0.0, reg_lambda=0.0,\n", 1206 | " silent=True, subsample=1.0, subsample_for_bin=200000,\n", 1207 | " subsample_freq=0)" 1208 | ] 1209 | }, 1210 | "execution_count": 11, 1211 | "metadata": {}, 1212 | "output_type": "execute_result" 1213 | } 1214 | ], 1215 | "source": [ 1216 | "lgb = LGBMClassifier(n_estimaotrs = 400)\n", 1217 | "lgb.fit(X_train, y_train)" 1218 | ] 1219 | }, 1220 | { 1221 | "cell_type": "code", 1222 | "execution_count": 12, 1223 | "metadata": {}, 1224 | "outputs": [ 1225 | { 1226 | "name": "stdout", 1227 | "output_type": "stream", 1228 | "text": [ 1229 | "정확도 : 0.84, 정밀도 : 0.79, 재현율 : 0.73\n", 1230 | "f1-score : 0.76, auc : 0.81\n" 1231 | ] 1232 | } 1233 | ], 1234 | "source": [ 1235 | "lgb_pred = lgb.predict(X_test)\n", 1236 | "metrics(y_test, lgb_pred)" 1237 | ] 1238 | }, 1239 | { 1240 | "cell_type": "code", 1241 | "execution_count": 13, 1242 | "metadata": {}, 1243 | "outputs": [ 1244 | { 1245 | "name": "stdout", 1246 | "output_type": "stream", 1247 | "text": [ 1248 | "[1]\tvalid_0's binary_logloss: 0.605701\n", 1249 | "Training until validation scores don't improve for 100 rounds\n", 1250 | "[2]\tvalid_0's binary_logloss: 0.569461\n", 1251 | "[3]\tvalid_0's binary_logloss: 0.540251\n", 1252 | "[4]\tvalid_0's binary_logloss: 0.5147\n", 1253 | "[5]\tvalid_0's binary_logloss: 0.493662\n", 1254 | "[6]\tvalid_0's binary_logloss: 0.47569\n", 1255 | "[7]\tvalid_0's binary_logloss: 0.45573\n", 1256 | "[8]\tvalid_0's binary_logloss: 0.442288\n", 1257 | "[9]\tvalid_0's binary_logloss: 0.427343\n", 1258 | "[10]\tvalid_0's binary_logloss: 0.41478\n", 1259 | "[11]\tvalid_0's binary_logloss: 0.404568\n", 1260 | "[12]\tvalid_0's binary_logloss: 0.394087\n", 1261 | "[13]\tvalid_0's binary_logloss: 0.384579\n", 1262 | "[14]\tvalid_0's binary_logloss: 0.377022\n", 1263 | "[15]\tvalid_0's binary_logloss: 0.372698\n", 1264 | "[16]\tvalid_0's binary_logloss: 0.367266\n", 1265 | "[17]\tvalid_0's binary_logloss: 0.364566\n", 1266 | "[18]\tvalid_0's binary_logloss: 0.362322\n", 1267 | "[19]\tvalid_0's binary_logloss: 0.35638\n", 1268 | "[20]\tvalid_0's binary_logloss: 0.352956\n", 1269 | "[21]\tvalid_0's binary_logloss: 0.351149\n", 1270 | "[22]\tvalid_0's binary_logloss: 0.350341\n", 1271 | "[23]\tvalid_0's binary_logloss: 0.348923\n", 1272 | "[24]\tvalid_0's binary_logloss: 0.348176\n", 1273 | "[25]\tvalid_0's binary_logloss: 0.34714\n", 1274 | "[26]\tvalid_0's binary_logloss: 0.346754\n", 1275 | "[27]\tvalid_0's binary_logloss: 0.347015\n", 1276 | "[28]\tvalid_0's binary_logloss: 0.347799\n", 1277 | "[29]\tvalid_0's binary_logloss: 0.348623\n", 1278 | "[30]\tvalid_0's binary_logloss: 0.349346\n", 1279 | "[31]\tvalid_0's binary_logloss: 0.350961\n", 1280 | "[32]\tvalid_0's binary_logloss: 0.352158\n", 1281 | "[33]\tvalid_0's binary_logloss: 0.352746\n", 1282 | "[34]\tvalid_0's binary_logloss: 0.353988\n", 1283 | "[35]\tvalid_0's binary_logloss: 0.35563\n", 1284 | "[36]\tvalid_0's binary_logloss: 0.357587\n", 1285 | "[37]\tvalid_0's binary_logloss: 0.357775\n", 1286 | "[38]\tvalid_0's binary_logloss: 0.359317\n", 1287 | "[39]\tvalid_0's binary_logloss: 0.360177\n", 1288 | "[40]\tvalid_0's binary_logloss: 0.359158\n", 1289 | "[41]\tvalid_0's binary_logloss: 0.360159\n", 1290 | "[42]\tvalid_0's binary_logloss: 0.359884\n", 1291 | "[43]\tvalid_0's binary_logloss: 0.360693\n", 1292 | "[44]\tvalid_0's binary_logloss: 0.361518\n", 1293 | "[45]\tvalid_0's binary_logloss: 0.361417\n", 1294 | "[46]\tvalid_0's binary_logloss: 0.36477\n", 1295 | "[47]\tvalid_0's binary_logloss: 0.366563\n", 1296 | "[48]\tvalid_0's binary_logloss: 0.367413\n", 1297 | "[49]\tvalid_0's binary_logloss: 0.370403\n", 1298 | "[50]\tvalid_0's binary_logloss: 0.370454\n", 1299 | "[51]\tvalid_0's binary_logloss: 0.3713\n", 1300 | "[52]\tvalid_0's binary_logloss: 0.373395\n", 1301 | "[53]\tvalid_0's binary_logloss: 0.371452\n", 1302 | "[54]\tvalid_0's binary_logloss: 0.370792\n", 1303 | "[55]\tvalid_0's binary_logloss: 0.369311\n", 1304 | "[56]\tvalid_0's binary_logloss: 0.368987\n", 1305 | "[57]\tvalid_0's binary_logloss: 0.372909\n", 1306 | "[58]\tvalid_0's binary_logloss: 0.371587\n", 1307 | "[59]\tvalid_0's binary_logloss: 0.371235\n", 1308 | "[60]\tvalid_0's binary_logloss: 0.371714\n", 1309 | "[61]\tvalid_0's binary_logloss: 0.372394\n", 1310 | "[62]\tvalid_0's binary_logloss: 0.371164\n", 1311 | "[63]\tvalid_0's binary_logloss: 0.371928\n", 1312 | "[64]\tvalid_0's binary_logloss: 0.372314\n", 1313 | "[65]\tvalid_0's binary_logloss: 0.372502\n", 1314 | "[66]\tvalid_0's binary_logloss: 0.376302\n", 1315 | "[67]\tvalid_0's binary_logloss: 0.378364\n", 1316 | "[68]\tvalid_0's binary_logloss: 0.378404\n", 1317 | "[69]\tvalid_0's binary_logloss: 0.381327\n", 1318 | "[70]\tvalid_0's binary_logloss: 0.380973\n", 1319 | "[71]\tvalid_0's binary_logloss: 0.382481\n", 1320 | "[72]\tvalid_0's binary_logloss: 0.38136\n", 1321 | "[73]\tvalid_0's binary_logloss: 0.383008\n", 1322 | "[74]\tvalid_0's binary_logloss: 0.381861\n", 1323 | "[75]\tvalid_0's binary_logloss: 0.382796\n", 1324 | "[76]\tvalid_0's binary_logloss: 0.38258\n", 1325 | "[77]\tvalid_0's binary_logloss: 0.384473\n", 1326 | "[78]\tvalid_0's binary_logloss: 0.383581\n", 1327 | "[79]\tvalid_0's binary_logloss: 0.385198\n", 1328 | "[80]\tvalid_0's binary_logloss: 0.383797\n", 1329 | "[81]\tvalid_0's binary_logloss: 0.383937\n", 1330 | "[82]\tvalid_0's binary_logloss: 0.383372\n", 1331 | "[83]\tvalid_0's binary_logloss: 0.384661\n", 1332 | "[84]\tvalid_0's binary_logloss: 0.383799\n", 1333 | "[85]\tvalid_0's binary_logloss: 0.384108\n", 1334 | "[86]\tvalid_0's binary_logloss: 0.383364\n", 1335 | "[87]\tvalid_0's binary_logloss: 0.384795\n", 1336 | "[88]\tvalid_0's binary_logloss: 0.384702\n", 1337 | "[89]\tvalid_0's binary_logloss: 0.386003\n", 1338 | "[90]\tvalid_0's binary_logloss: 0.386621\n", 1339 | "[91]\tvalid_0's binary_logloss: 0.387986\n", 1340 | "[92]\tvalid_0's binary_logloss: 0.390496\n", 1341 | "[93]\tvalid_0's binary_logloss: 0.389984\n", 1342 | "[94]\tvalid_0's binary_logloss: 0.391477\n", 1343 | "[95]\tvalid_0's binary_logloss: 0.391917\n", 1344 | "[96]\tvalid_0's binary_logloss: 0.392326\n", 1345 | "[97]\tvalid_0's binary_logloss: 0.392731\n", 1346 | "[98]\tvalid_0's binary_logloss: 0.392586\n", 1347 | "[99]\tvalid_0's binary_logloss: 0.394479\n", 1348 | "[100]\tvalid_0's binary_logloss: 0.397251\n", 1349 | "Did not meet early stopping. Best iteration is:\n", 1350 | "[26]\tvalid_0's binary_logloss: 0.346754\n" 1351 | ] 1352 | }, 1353 | { 1354 | "data": { 1355 | "text/plain": [ 1356 | "LGBMClassifier(boosting_type='gbdt', class_weight=None, colsample_bytree=1.0,\n", 1357 | " importance_type='split', learning_rate=0.1, max_depth=-1,\n", 1358 | " min_child_samples=20, min_child_weight=0.001, min_split_gain=0.0,\n", 1359 | " n_estimaotrs=400, n_estimators=100, n_jobs=-1, num_leaves=31,\n", 1360 | " objective=None, random_state=None, reg_alpha=0.0, reg_lambda=0.0,\n", 1361 | " silent=True, subsample=1.0, subsample_for_bin=200000,\n", 1362 | " subsample_freq=0)" 1363 | ] 1364 | }, 1365 | "execution_count": 13, 1366 | "metadata": {}, 1367 | "output_type": "execute_result" 1368 | } 1369 | ], 1370 | "source": [ 1371 | "lgb = LGBMClassifier(n_estimaotrs = 400)\n", 1372 | "evals = [(X_test, y_test)]\n", 1373 | "lgb.fit(X_train, y_train, early_stopping_rounds = 100, eval_metric = \"logloss\", eval_set = evals, verbose = True)" 1374 | ] 1375 | }, 1376 | { 1377 | "cell_type": "code", 1378 | "execution_count": 15, 1379 | "metadata": {}, 1380 | "outputs": [ 1381 | { 1382 | "data": { 1383 | "text/plain": [ 1384 | "" 1385 | ] 1386 | }, 1387 | "execution_count": 15, 1388 | "metadata": {}, 1389 | "output_type": "execute_result" 1390 | }, 1391 | { 1392 | "data": { 1393 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoQAAAGDCAYAAACyWgFqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deZyWdb3/8deHJUEHIUUNV0RIUcHJ3ZPpkKGZpFnmkuYShXay41JumUueMltc82RhlsuhtOxodvTX8lPHU1ohCkpqpCX+ADcwNwhlGD6/P+4Lzi3OwAD3zM3M9Xo+HvOY6/5e2+f6eINvruW+IzORJElSefWqdwGSJEmqLwOhJElSyRkIJUmSSs5AKEmSVHIGQkmSpJIzEEqSJJWcgVCSulBEfC8izqt3HZJULfwcQkndQUTMBDYBWquG352Zz67BNpuA/8zMzdesuu4pIq4HZmfml+tdi6T68gyhpO7kw5nZUPWz2mGwFiKiTz33vyYione9a5C09jAQSur2ImLPiHggIl6JiEeKM39L550QEU9ExOsR8feIOLEYXw/4P8CmETG/+Nk0Iq6PiK9Wrd8UEbOrXs+MiLMi4lFgQUT0Kdb7eUTMjYinI+LfVlDrsu0v3XZEnBkRL0bEcxHxkYj4UET8NSL+ERFfqlr3woi4NSJuKY7n4YjYqWr+yIhoLvrwWEQcvNx+r4mIuyJiATAeOBo4szj2XxbLnR0Rfyu2/3hEHFq1jeMj4vcR8e2IeLk41gOr5m8QET+KiGeL+bdXzRsXEdOK2h6IiNEd/g8sqdMZCCV1axGxGXAn8FVgA+CLwM8jYqNikReBccD6wAnA5RGxc2YuAA4Enl2NM45HAQcBg4AlwC+BR4DNgP2AUyPigA5u611Av2Ld84FrgWOAXYD3AedHxLCq5Q8BflYc64+B2yOib0T0Ler4DbAx8HlgUkRsW7XuJ4CvAQOAG4FJwDeLY/9wsczfiv0OBL4C/GdEDKnaxh7ADGAw8E3guoiIYt5NwLrADkUNlwNExM7AD4ETgQ2B7wN3RMQ6HeyRpE5mIJTUndxenGF6pers0zHAXZl5V2YuyczfAlOADwFk5p2Z+besuI9KYHrfGtZxVWbOysyFwG7ARpl5UWYuysy/Uwl1R3ZwWy3A1zKzBbiZStC6MjNfz8zHgMeA6rNpD2XmrcXyl1EJk3sWPw3AJUUd9wD/TSW8LvWLzLy/6NMbbRWTmT/LzGeLZW4BngR2r1rkmcy8NjNbgRuAIcAmRWg8EDgpM1/OzJai3wCfAb6fmX/KzNbMvAF4s6hZ0lqg297/IqmUPpKZ/3e5sa2Aj0fEh6vG+gL3AhSXNC8A3k3lH8HrAtPXsI5Zy+1/04h4pWqsN/C7Dm7rpSJcASwsfr9QNX8hlaD3tn1n5pLicvamS+dl5pKqZZ+hcuaxrbrbFBHHAqcDQ4uhBiohdannq/b/z+LkYAOVM5b/yMyX29jsVsBxEfH5qrF3VNUtqc4MhJK6u1nATZn5meVnFJckfw4cS+XsWEtxZnHpJc62PmZhAZXQuNS72limer1ZwNOZOWJ1il8NWyydiIhewObA0kvdW0REr6pQuCXw16p1lz/et7yOiK2onN3cD/hDZrZGxDT+t18rMgvYICIGZeYrbcz7WmZ+rQPbkVQHXjKW1N39J/DhiDggInpHRL/iYY3NqZyFWgeYCywuzhbuX7XuC8CGETGwamwa8KHiAYl3AaeuZP+TgdeKB036FzXsGBG71ewI32qXiPho8YTzqVQuvf4R+BOVMHtmcU9hE/BhKpeh2/MCUH1/4npUQuJcqDyQA+zYkaIy8zkqD+l8NyLeWdSwTzH7WuCkiNgjKtaLiIMiYkAHj1lSJzMQSurWMnMWlQctvkQlyMwCzgB6ZebrwL8BPwVepvJQxR1V6/4F+Anw9+K+xE2pPBjxCDCTyv2Gt6xk/61Uglcj8DQwD/gBlYcyOsMvgCOoHM8ngY8W9+stAg6mch/fPOC7wLHFMbbnOmD7pfdkZubjwKXAH6iExVHA/atQ2yep3BP5FyoP85wKkJlTqNxHeHVR91PA8auwXUmdzA+mlqRuIiIuBIZn5jH1rkVSz+IZQkmSpJIzEEqSJJWcl4wlSZJKzjOEkiRJJWcglCRJKjk/mHoNDBo0KIcPH17vMnqEBQsWsN5669W7jB7DftaOvawt+1k79rJ2ytLLhx56aF5mbtTWPAPhGthkk02YMmVKvcvoEZqbm2lqaqp3GT2G/awde1lb9rN27GXtlKWXEfFMe/O8ZCxJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJ6oA33niD3XffnZ122okddtiBCy64AICnn36aPfbYgxEjRnDEEUewaNGit6x36623EhFMmTKlHmV3SGRmvWuomYhoBaZXDX0kM2d21v62HDY8ex1+ZWdtvlS+MGoxl07vU+8yegz7WTv2srbsZ+3Yy9pZUS9nXnLQsunMZMGCBTQ0NNDS0sLee+/NlVdeyWWXXcZHP/pRjjzySE466SR22mknPvvZzwLw+uuvc9BBB7Fo0SKuvvpqdt111y45prZExEOZ2WYBPe0M4cLMbKz6mdmRlSKidyfXJUmSurmIoKGhAYCWlhZaWlqICO655x4OO+wwAI477jhuv/32Zeucd955nHnmmfTr168uNXdUTwuEbxMRQyPidxHxcPHzL8V4U0TcGxE/pjirGBHHRMTkiJgWEd83KEqSpGqtra00Njay8cYbM3bsWLbZZhsGDRpEnz6VM4ybb745c+bMAWDq1KnMmjWLcePG1bPkDulp55r7R8S0YvrpzDwUeBEYm5lvRMQI4CfA0tOluwM7ZubTETESOAJ4b2a2RMR3gaOBG7v4GCRJ0lqqd+/eTJs2jVdeeYVDDz2UJ5544m3LRARLlizhtNNO4/rrr+/6IldDTwuECzOzcbmxvsDVEdEItALvrpo3OTOfLqb3A3YBHowIgP5UwuRbRMQEYALA4MEbcf6oxbU9gpLapH/lHg7Vhv2sHXtZW/azduxl7ayol83Nze2uN3ToUCZNmsTcuXO5++676d27N4899hj9+vXjrrvuYurUqey5554A/OMf/+CDH/wgX/va19h222074zDWSE8LhG05DXgB2InKJfI3quYtqJoO4IbMPGdFG8vMicBEqDxU4g29teHN0bVlP2vHXtaW/awde1k7K3yo5OimZdNz586lb9++DBo0iIULF3Leeedx1lln8dJLLzF37lyOPPJIbr75Zk444QTGjRvHq6++umzdpqYmvv3tb9f1oZIV6fH3EAIDgecycwnwSaC9+wLvBg6LiI0BImKDiNiqi2qUJElrueeee44xY8YwevRo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\n", 1394 | "text/plain": [ 1395 | "
" 1396 | ] 1397 | }, 1398 | "metadata": { 1399 | "needs_background": "light" 1400 | }, 1401 | "output_type": "display_data" 1402 | } 1403 | ], 1404 | "source": [ 1405 | "fig, ax = plt.subplots(figsize=(10, 6))\n", 1406 | "plot_importance(lgb, ax = ax)" 1407 | ] 1408 | }, 1409 | { 1410 | "cell_type": "code", 1411 | "execution_count": null, 1412 | "metadata": {}, 1413 | "outputs": [], 1414 | "source": [] 1415 | }, 1416 | { 1417 | "cell_type": "code", 1418 | "execution_count": null, 1419 | "metadata": {}, 1420 | "outputs": [], 1421 | "source": [] 1422 | } 1423 | ], 1424 | "metadata": { 1425 | "kernelspec": { 1426 | "display_name": "Python 3", 1427 | "language": "python", 1428 | "name": "python3" 1429 | }, 1430 | "language_info": { 1431 | "codemirror_mode": { 1432 | "name": "ipython", 1433 | "version": 3 1434 | }, 1435 | "file_extension": ".py", 1436 | "mimetype": "text/x-python", 1437 | "name": "python", 1438 | "nbconvert_exporter": "python", 1439 | "pygments_lexer": "ipython3", 1440 | "version": "3.6.9" 1441 | } 1442 | }, 1443 | "nbformat": 4, 1444 | "nbformat_minor": 2 1445 | } 1446 | -------------------------------------------------------------------------------- /010. credit_card_fraud_basic.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pandas as pd\n", 10 | "import numpy as np\n", 11 | "import matplotlib.pyplot as plt\n", 12 | "import seaborn as sns\n", 13 | "from xgboost import XGBClassifier, plot_importance as xg_importance\n", 14 | "from lightgbm import LGBMClassifier, plot_importance as lgb_importance\n", 15 | "from sklearn.datasets import load_breast_cancer\n", 16 | "from sklearn.model_selection import train_test_split, GridSearchCV\n", 17 | "from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, roc_auc_score, confusion_matrix\n", 18 | "\n", 19 | "import warnings\n", 20 | "warnings.filterwarnings('ignore')\n" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 1, 26 | "metadata": {}, 27 | "outputs": [], 28 | "source": [ 29 | "def metrics(y_test, pred):\n", 30 | " accuracy = accuracy_score(y_test, pred)\n", 31 | " precision = precision_score(y_test, pred)\n", 32 | " recall = recall_score(y_test, pred)\n", 33 | " f1 = f1_score(y_test, pred)\n", 34 | " roc_score = roc_auc_score(y_test, pred, average='macro')\n", 35 | " print('정확도 : {0:.2f}, 정밀도 : {1:.2f}, 재현율 : {2:.2f}'.format(accuracy, precision, recall))\n", 36 | " print('f1-score : {0:.2f}, auc : {1:.2f}'.format(f1, roc_score))" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 4, 42 | "metadata": {}, 43 | "outputs": [], 44 | "source": [ 45 | "data = pd.read_csv('../datas/credit card fraud/creditcard.csv')" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 5, 51 | "metadata": {}, 52 | "outputs": [ 53 | { 54 | "data": { 55 | "text/plain": [ 56 | "(284807, 31)" 57 | ] 58 | }, 59 | "execution_count": 5, 60 | "metadata": {}, 61 | "output_type": "execute_result" 62 | } 63 | ], 64 | "source": [ 65 | "data.shape" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 6, 71 | "metadata": {}, 72 | "outputs": [ 73 | { 74 | "name": "stdout", 75 | "output_type": "stream", 76 | "text": [ 77 | "\n", 78 | "RangeIndex: 284807 entries, 0 to 284806\n", 79 | "Data columns (total 31 columns):\n", 80 | "Time 284807 non-null float64\n", 81 | "V1 284807 non-null float64\n", 82 | "V2 284807 non-null float64\n", 83 | "V3 284807 non-null float64\n", 84 | "V4 284807 non-null float64\n", 85 | "V5 284807 non-null float64\n", 86 | "V6 284807 non-null float64\n", 87 | "V7 284807 non-null float64\n", 88 | "V8 284807 non-null float64\n", 89 | "V9 284807 non-null float64\n", 90 | "V10 284807 non-null float64\n", 91 | "V11 284807 non-null float64\n", 92 | "V12 284807 non-null float64\n", 93 | "V13 284807 non-null float64\n", 94 | "V14 284807 non-null float64\n", 95 | "V15 284807 non-null float64\n", 96 | "V16 284807 non-null float64\n", 97 | "V17 284807 non-null float64\n", 98 | "V18 284807 non-null float64\n", 99 | "V19 284807 non-null float64\n", 100 | "V20 284807 non-null float64\n", 101 | "V21 284807 non-null float64\n", 102 | "V22 284807 non-null float64\n", 103 | "V23 284807 non-null float64\n", 104 | "V24 284807 non-null float64\n", 105 | "V25 284807 non-null float64\n", 106 | "V26 284807 non-null float64\n", 107 | "V27 284807 non-null float64\n", 108 | "V28 284807 non-null float64\n", 109 | "Amount 284807 non-null float64\n", 110 | "Class 284807 non-null int64\n", 111 | "dtypes: float64(30), int64(1)\n", 112 | "memory usage: 67.4 MB\n" 113 | ] 114 | } 115 | ], 116 | "source": [ 117 | "data.info()" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 7, 123 | "metadata": {}, 124 | "outputs": [ 125 | { 126 | "data": { 127 | "text/plain": [ 128 | "Time 0\n", 129 | "V1 0\n", 130 | "V2 0\n", 131 | "V3 0\n", 132 | "V4 0\n", 133 | "V5 0\n", 134 | "V6 0\n", 135 | "V7 0\n", 136 | "V8 0\n", 137 | "V9 0\n", 138 | "V10 0\n", 139 | "V11 0\n", 140 | "V12 0\n", 141 | "V13 0\n", 142 | "V14 0\n", 143 | "V15 0\n", 144 | "V16 0\n", 145 | "V17 0\n", 146 | "V18 0\n", 147 | "V19 0\n", 148 | "V20 0\n", 149 | "V21 0\n", 150 | "V22 0\n", 151 | "V23 0\n", 152 | "V24 0\n", 153 | "V25 0\n", 154 | "V26 0\n", 155 | "V27 0\n", 156 | "V28 0\n", 157 | "Amount 0\n", 158 | "Class 0\n", 159 | "dtype: int64" 160 | ] 161 | }, 162 | "execution_count": 7, 163 | "metadata": {}, 164 | "output_type": "execute_result" 165 | } 166 | ], 167 | "source": [ 168 | "data.isna().sum()" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": 8, 174 | "metadata": {}, 175 | "outputs": [ 176 | { 177 | "data": { 178 | "text/plain": [ 179 | "0 284315\n", 180 | "1 492\n", 181 | "Name: Class, dtype: int64" 182 | ] 183 | }, 184 | "execution_count": 8, 185 | "metadata": {}, 186 | "output_type": "execute_result" 187 | } 188 | ], 189 | "source": [ 190 | "data.iloc[:, -1].value_counts()" 191 | ] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": 9, 196 | "metadata": {}, 197 | "outputs": [ 198 | { 199 | "data": { 200 | "text/plain": [ 201 | "" 202 | ] 203 | }, 204 | "execution_count": 9, 205 | "metadata": {}, 206 | "output_type": "execute_result" 207 | }, 208 | { 209 | "data": { 210 | "image/png": "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\n", 211 | "text/plain": [ 212 | "
" 213 | ] 214 | }, 215 | "metadata": { 216 | "needs_background": "light" 217 | }, 218 | "output_type": "display_data" 219 | } 220 | ], 221 | "source": [ 222 | "data.iloc[:, -1].value_counts().plot(kind='bar')" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 10, 228 | "metadata": {}, 229 | "outputs": [ 230 | { 231 | "data": { 232 | "text/plain": [ 233 | "0 99.827251\n", 234 | "1 0.172749\n", 235 | "Name: Class, dtype: float64" 236 | ] 237 | }, 238 | "execution_count": 10, 239 | "metadata": {}, 240 | "output_type": "execute_result" 241 | } 242 | ], 243 | "source": [ 244 | "data.iloc[:, -1].value_counts() / data.iloc[:, -1].count() * 100" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": 11, 250 | "metadata": {}, 251 | "outputs": [], 252 | "source": [ 253 | "X = data.iloc[:, :-1]\n", 254 | "y = data.iloc[:, -1]" 255 | ] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "execution_count": 13, 260 | "metadata": {}, 261 | "outputs": [], 262 | "source": [ 263 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 10)" 264 | ] 265 | }, 266 | { 267 | "cell_type": "code", 268 | "execution_count": 14, 269 | "metadata": {}, 270 | "outputs": [ 271 | { 272 | "name": "stdout", 273 | "output_type": "stream", 274 | "text": [ 275 | "0 99.826315\n", 276 | "1 0.173685\n", 277 | "Name: Class, dtype: float64\n", 278 | "0 99.830061\n", 279 | "1 0.169939\n", 280 | "Name: Class, dtype: float64\n" 281 | ] 282 | } 283 | ], 284 | "source": [ 285 | "print(y_train.value_counts() / y_train.count() * 100)\n", 286 | "print(y_test.value_counts() / y_test.count() * 100)" 287 | ] 288 | }, 289 | { 290 | "cell_type": "code", 291 | "execution_count": 16, 292 | "metadata": {}, 293 | "outputs": [], 294 | "source": [ 295 | "def modeling(model, x_train, x_test, y_train, y_test):\n", 296 | " model.fit(x_train, y_train)\n", 297 | " pred = model.predict(x_test)\n", 298 | " metrics(y_test, pred)" 299 | ] 300 | }, 301 | { 302 | "cell_type": "code", 303 | "execution_count": 20, 304 | "metadata": {}, 305 | "outputs": [ 306 | { 307 | "name": "stdout", 308 | "output_type": "stream", 309 | "text": [ 310 | "정확도 : 1.00, 정밀도 : 0.77, 재현율 : 0.53\n", 311 | "f1-score : 0.63, auc : 0.76\n" 312 | ] 313 | } 314 | ], 315 | "source": [ 316 | "from sklearn.linear_model import LogisticRegression\n", 317 | "lr = LogisticRegression()\n", 318 | "modeling(lr, X_train, X_test, y_train, y_test)" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": 21, 324 | "metadata": {}, 325 | "outputs": [ 326 | { 327 | "name": "stdout", 328 | "output_type": "stream", 329 | "text": [ 330 | "정확도 : 1.00, 정밀도 : 0.95, 재현율 : 0.83\n", 331 | "f1-score : 0.88, auc : 0.91\n" 332 | ] 333 | } 334 | ], 335 | "source": [ 336 | "lgb = LGBMClassifier(n_estimators = 1000, num_leaves = 64, n_jobs = -1, boost_from_average = False)\n", 337 | "modeling(lgb, x_train = X_train, x_test = X_test, y_train = y_train, y_test = y_test)" 338 | ] 339 | }, 340 | { 341 | "cell_type": "code", 342 | "execution_count": null, 343 | "metadata": {}, 344 | "outputs": [], 345 | "source": [] 346 | }, 347 | { 348 | "cell_type": "code", 349 | "execution_count": null, 350 | "metadata": {}, 351 | "outputs": [], 352 | "source": [] 353 | } 354 | ], 355 | "metadata": { 356 | "kernelspec": { 357 | "display_name": "Python 3", 358 | "language": "python", 359 | "name": "python3" 360 | }, 361 | "language_info": { 362 | "codemirror_mode": { 363 | "name": "ipython", 364 | "version": 3 365 | }, 366 | "file_extension": ".py", 367 | "mimetype": "text/x-python", 368 | "name": "python", 369 | "nbconvert_exporter": "python", 370 | "pygments_lexer": "ipython3", 371 | "version": "3.6.9" 372 | } 373 | }, 374 | "nbformat": 4, 375 | "nbformat_minor": 2 376 | } 377 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # machine_learning_basic 2 | Repo for everyone who wants a machine learning basic 3 | --------------------------------------------------------------------------------