├── .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 | " PassengerId | \n",
60 | " Survived | \n",
61 | " Pclass | \n",
62 | " Name | \n",
63 | " Sex | \n",
64 | " Age | \n",
65 | " SibSp | \n",
66 | " Parch | \n",
67 | " Ticket | \n",
68 | " Fare | \n",
69 | " Cabin | \n",
70 | " Embarked | \n",
71 | "
\n",
72 | " \n",
73 | " \n",
74 | " \n",
75 | " 0 | \n",
76 | " 1 | \n",
77 | " 0 | \n",
78 | " 3 | \n",
79 | " Braund, Mr. Owen Harris | \n",
80 | " male | \n",
81 | " 22.0 | \n",
82 | " 1 | \n",
83 | " 0 | \n",
84 | " A/5 21171 | \n",
85 | " 7.2500 | \n",
86 | " NaN | \n",
87 | " S | \n",
88 | "
\n",
89 | " \n",
90 | " 1 | \n",
91 | " 2 | \n",
92 | " 1 | \n",
93 | " 1 | \n",
94 | " Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
95 | " female | \n",
96 | " 38.0 | \n",
97 | " 1 | \n",
98 | " 0 | \n",
99 | " PC 17599 | \n",
100 | " 71.2833 | \n",
101 | " C85 | \n",
102 | " C | \n",
103 | "
\n",
104 | " \n",
105 | " 2 | \n",
106 | " 3 | \n",
107 | " 1 | \n",
108 | " 3 | \n",
109 | " Heikkinen, Miss. Laina | \n",
110 | " female | \n",
111 | " 26.0 | \n",
112 | " 0 | \n",
113 | " 0 | \n",
114 | " STON/O2. 3101282 | \n",
115 | " 7.9250 | \n",
116 | " NaN | \n",
117 | " S | \n",
118 | "
\n",
119 | " \n",
120 | " 3 | \n",
121 | " 4 | \n",
122 | " 1 | \n",
123 | " 1 | \n",
124 | " Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
125 | " female | \n",
126 | " 35.0 | \n",
127 | " 1 | \n",
128 | " 0 | \n",
129 | " 113803 | \n",
130 | " 53.1000 | \n",
131 | " C123 | \n",
132 | " S | \n",
133 | "
\n",
134 | " \n",
135 | " 4 | \n",
136 | " 5 | \n",
137 | " 0 | \n",
138 | " 3 | \n",
139 | " Allen, Mr. William Henry | \n",
140 | " male | \n",
141 | " 35.0 | \n",
142 | " 0 | \n",
143 | " 0 | \n",
144 | " 373450 | \n",
145 | " 8.0500 | \n",
146 | " NaN | \n",
147 | " S | \n",
148 | "
\n",
149 | " \n",
150 | "
\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 | " Survived | \n",
363 | " Pclass | \n",
364 | " Sex | \n",
365 | " Age | \n",
366 | " SibSp | \n",
367 | " Parch | \n",
368 | " Fare | \n",
369 | " Embarked | \n",
370 | " Initial | \n",
371 | "
\n",
372 | " \n",
373 | " \n",
374 | " \n",
375 | " 0 | \n",
376 | " 0 | \n",
377 | " 3 | \n",
378 | " 0 | \n",
379 | " 22.0 | \n",
380 | " 1 | \n",
381 | " 0 | \n",
382 | " 1.981001 | \n",
383 | " 0 | \n",
384 | " 0 | \n",
385 | "
\n",
386 | " \n",
387 | " 1 | \n",
388 | " 1 | \n",
389 | " 1 | \n",
390 | " 1 | \n",
391 | " 38.0 | \n",
392 | " 1 | \n",
393 | " 0 | \n",
394 | " 4.266662 | \n",
395 | " 1 | \n",
396 | " 1 | \n",
397 | "
\n",
398 | " \n",
399 | " 2 | \n",
400 | " 1 | \n",
401 | " 3 | \n",
402 | " 1 | \n",
403 | " 26.0 | \n",
404 | " 0 | \n",
405 | " 0 | \n",
406 | " 2.070022 | \n",
407 | " 0 | \n",
408 | " 1 | \n",
409 | "
\n",
410 | " \n",
411 | " 3 | \n",
412 | " 1 | \n",
413 | " 1 | \n",
414 | " 1 | \n",
415 | " 35.0 | \n",
416 | " 1 | \n",
417 | " 0 | \n",
418 | " 3.972177 | \n",
419 | " 0 | \n",
420 | " 1 | \n",
421 | "
\n",
422 | " \n",
423 | " 4 | \n",
424 | " 0 | \n",
425 | " 3 | \n",
426 | " 0 | \n",
427 | " 35.0 | \n",
428 | " 0 | \n",
429 | " 0 | \n",
430 | " 2.085672 | \n",
431 | " 0 | \n",
432 | " 0 | \n",
433 | "
\n",
434 | " \n",
435 | "
\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 | " params | \n",
688 | " mean_test_score | \n",
689 | " rank_test_score | \n",
690 | "
\n",
691 | " \n",
692 | " \n",
693 | " \n",
694 | " 32 | \n",
695 | " {'max_depth': 8, 'min_samples_leaf': 3, 'min_s... | \n",
696 | " 0.817416 | \n",
697 | " 1 | \n",
698 | "
\n",
699 | " \n",
700 | " 34 | \n",
701 | " {'max_depth': 8, 'min_samples_leaf': 3, 'min_s... | \n",
702 | " 0.817416 | \n",
703 | " 1 | \n",
704 | "
\n",
705 | " \n",
706 | " 36 | \n",
707 | " {'max_depth': 8, 'min_samples_leaf': 3, 'min_s... | \n",
708 | " 0.817416 | \n",
709 | " 1 | \n",
710 | "
\n",
711 | " \n",
712 | " 56 | \n",
713 | " {'max_depth': 8, 'min_samples_leaf': 10, 'min_... | \n",
714 | " 0.814607 | \n",
715 | " 4 | \n",
716 | "
\n",
717 | " \n",
718 | " 105 | \n",
719 | " {'max_depth': 12, 'min_samples_leaf': 5, 'min_... | \n",
720 | " 0.814607 | \n",
721 | " 4 | \n",
722 | "
\n",
723 | " \n",
724 | " 107 | \n",
725 | " {'max_depth': 12, 'min_samples_leaf': 5, 'min_... | \n",
726 | " 0.814607 | \n",
727 | " 4 | \n",
728 | "
\n",
729 | " \n",
730 | " 68 | \n",
731 | " {'max_depth': 10, 'min_samples_leaf': 3, 'min_... | \n",
732 | " 0.814607 | \n",
733 | " 4 | \n",
734 | "
\n",
735 | " \n",
736 | " 66 | \n",
737 | " {'max_depth': 10, 'min_samples_leaf': 3, 'min_... | \n",
738 | " 0.814607 | \n",
739 | " 4 | \n",
740 | "
\n",
741 | " \n",
742 | " 111 | \n",
743 | " {'max_depth': 12, 'min_samples_leaf': 5, 'min_... | \n",
744 | " 0.814607 | \n",
745 | " 4 | \n",
746 | "
\n",
747 | " \n",
748 | " 109 | \n",
749 | " {'max_depth': 12, 'min_samples_leaf': 5, 'min_... | \n",
750 | " 0.814607 | \n",
751 | " 4 | \n",
752 | "
\n",
753 | " \n",
754 | "
\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 | " PassengerId | \n",
60 | " Survived | \n",
61 | " Pclass | \n",
62 | " Name | \n",
63 | " Sex | \n",
64 | " Age | \n",
65 | " SibSp | \n",
66 | " Parch | \n",
67 | " Ticket | \n",
68 | " Fare | \n",
69 | " Cabin | \n",
70 | " Embarked | \n",
71 | "
\n",
72 | " \n",
73 | " \n",
74 | " \n",
75 | " 0 | \n",
76 | " 1 | \n",
77 | " 0 | \n",
78 | " 3 | \n",
79 | " Braund, Mr. Owen Harris | \n",
80 | " male | \n",
81 | " 22.0 | \n",
82 | " 1 | \n",
83 | " 0 | \n",
84 | " A/5 21171 | \n",
85 | " 7.2500 | \n",
86 | " NaN | \n",
87 | " S | \n",
88 | "
\n",
89 | " \n",
90 | " 1 | \n",
91 | " 2 | \n",
92 | " 1 | \n",
93 | " 1 | \n",
94 | " Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
95 | " female | \n",
96 | " 38.0 | \n",
97 | " 1 | \n",
98 | " 0 | \n",
99 | " PC 17599 | \n",
100 | " 71.2833 | \n",
101 | " C85 | \n",
102 | " C | \n",
103 | "
\n",
104 | " \n",
105 | " 2 | \n",
106 | " 3 | \n",
107 | " 1 | \n",
108 | " 3 | \n",
109 | " Heikkinen, Miss. Laina | \n",
110 | " female | \n",
111 | " 26.0 | \n",
112 | " 0 | \n",
113 | " 0 | \n",
114 | " STON/O2. 3101282 | \n",
115 | " 7.9250 | \n",
116 | " NaN | \n",
117 | " S | \n",
118 | "
\n",
119 | " \n",
120 | " 3 | \n",
121 | " 4 | \n",
122 | " 1 | \n",
123 | " 1 | \n",
124 | " Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
125 | " female | \n",
126 | " 35.0 | \n",
127 | " 1 | \n",
128 | " 0 | \n",
129 | " 113803 | \n",
130 | " 53.1000 | \n",
131 | " C123 | \n",
132 | " S | \n",
133 | "
\n",
134 | " \n",
135 | " 4 | \n",
136 | " 5 | \n",
137 | " 0 | \n",
138 | " 3 | \n",
139 | " Allen, Mr. William Henry | \n",
140 | " male | \n",
141 | " 35.0 | \n",
142 | " 0 | \n",
143 | " 0 | \n",
144 | " 373450 | \n",
145 | " 8.0500 | \n",
146 | " NaN | \n",
147 | " S | \n",
148 | "
\n",
149 | " \n",
150 | "
\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 | " Survived | \n",
305 | " Pclass | \n",
306 | " Sex | \n",
307 | " Age | \n",
308 | " SibSp | \n",
309 | " Parch | \n",
310 | " Fare | \n",
311 | " Embarked | \n",
312 | " Initial | \n",
313 | "
\n",
314 | " \n",
315 | " \n",
316 | " \n",
317 | " 0 | \n",
318 | " 0 | \n",
319 | " 3 | \n",
320 | " 0 | \n",
321 | " 22.0 | \n",
322 | " 1 | \n",
323 | " 0 | \n",
324 | " 1.981001 | \n",
325 | " 0 | \n",
326 | " 0 | \n",
327 | "
\n",
328 | " \n",
329 | " 1 | \n",
330 | " 1 | \n",
331 | " 1 | \n",
332 | " 1 | \n",
333 | " 38.0 | \n",
334 | " 1 | \n",
335 | " 0 | \n",
336 | " 4.266662 | \n",
337 | " 1 | \n",
338 | " 1 | \n",
339 | "
\n",
340 | " \n",
341 | " 2 | \n",
342 | " 1 | \n",
343 | " 3 | \n",
344 | " 1 | \n",
345 | " 26.0 | \n",
346 | " 0 | \n",
347 | " 0 | \n",
348 | " 2.070022 | \n",
349 | " 0 | \n",
350 | " 1 | \n",
351 | "
\n",
352 | " \n",
353 | " 3 | \n",
354 | " 1 | \n",
355 | " 1 | \n",
356 | " 1 | \n",
357 | " 35.0 | \n",
358 | " 1 | \n",
359 | " 0 | \n",
360 | " 3.972177 | \n",
361 | " 0 | \n",
362 | " 1 | \n",
363 | "
\n",
364 | " \n",
365 | " 4 | \n",
366 | " 0 | \n",
367 | " 3 | \n",
368 | " 0 | \n",
369 | " 35.0 | \n",
370 | " 0 | \n",
371 | " 0 | \n",
372 | " 2.085672 | \n",
373 | " 0 | \n",
374 | " 0 | \n",
375 | "
\n",
376 | " \n",
377 | "
\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 | " params | \n",
686 | " mean_test_score | \n",
687 | " rank_test_score | \n",
688 | "
\n",
689 | " \n",
690 | " \n",
691 | " \n",
692 | " 22 | \n",
693 | " {'learning_rate': 0.05, 'max_depth': 6, 'min_s... | \n",
694 | " 0.820225 | \n",
695 | " 1 | \n",
696 | "
\n",
697 | " \n",
698 | " 16 | \n",
699 | " {'learning_rate': 0.05, 'max_depth': 6, 'min_s... | \n",
700 | " 0.820225 | \n",
701 | " 1 | \n",
702 | "
\n",
703 | " \n",
704 | " 18 | \n",
705 | " {'learning_rate': 0.05, 'max_depth': 6, 'min_s... | \n",
706 | " 0.820225 | \n",
707 | " 1 | \n",
708 | "
\n",
709 | " \n",
710 | " 20 | \n",
711 | " {'learning_rate': 0.05, 'max_depth': 6, 'min_s... | \n",
712 | " 0.820225 | \n",
713 | " 1 | \n",
714 | "
\n",
715 | " \n",
716 | " 58 | \n",
717 | " {'learning_rate': 0.05, 'max_depth': 8, 'min_s... | \n",
718 | " 0.818820 | \n",
719 | " 5 | \n",
720 | "
\n",
721 | " \n",
722 | " 60 | \n",
723 | " {'learning_rate': 0.05, 'max_depth': 8, 'min_s... | \n",
724 | " 0.818820 | \n",
725 | " 5 | \n",
726 | "
\n",
727 | " \n",
728 | " 62 | \n",
729 | " {'learning_rate': 0.05, 'max_depth': 8, 'min_s... | \n",
730 | " 0.818820 | \n",
731 | " 5 | \n",
732 | "
\n",
733 | " \n",
734 | " 135 | \n",
735 | " {'learning_rate': 0.1, 'max_depth': 6, 'min_sa... | \n",
736 | " 0.818820 | \n",
737 | " 5 | \n",
738 | "
\n",
739 | " \n",
740 | " 56 | \n",
741 | " {'learning_rate': 0.05, 'max_depth': 8, 'min_s... | \n",
742 | " 0.818820 | \n",
743 | " 5 | \n",
744 | "
\n",
745 | " \n",
746 | " 120 | \n",
747 | " {'learning_rate': 0.05, 'max_depth': 12, 'min_... | \n",
748 | " 0.817416 | \n",
749 | " 10 | \n",
750 | "
\n",
751 | " \n",
752 | "
\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": "iVBORw0KGgoAAAANSUhEUgAAAuUAAAJOCAYAAAAQ4XnTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3de7zuZUHn/e9XNiYEgoqaIoJ5QIV8UHcmWonWjPZUYzWUmZaWSj6TNU9TPR1wHLLsMD1lHsaKsjHTSUYdZ6xmLFPxmOLGEETFA3gKUpFEUUDFa/5YP8bldm322nvtva+1936/X6/12vf6He77+l3cuD77x3UvO8YIAAAwz81mDwAAAA52ohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ6wB7Q9se0/tP1s25+ZPZ5d0fbOba9pe8jssQAcrOr3lANsXNvnJ/nMGONn98BznZvkRWOMP9nwwPYzbU9IclmSQ8cYX5o7GoB9x51ygD3j+CQXzx5EkrTdMnsMu2N/HTfAniDKATao7WuTPDTJc5dlIPdo+3Vt//+2H2n78bZ/2Paw5fhbtf2rtp9s+8/L4zst+56R5NtWPddz257QdqyO1rbntn3i8vjxbd/c9pltr0py1rL9J9q+Z3mNv2l7/A7G/1XPvzz3r7d9yzKGv2x7m7YvbvuZtm9f7mjfeP5o+zNtL217ZdvfaXuzZd/N2j617YfbfqLtC9setd3rPqHtR5K8Nskblqf99PLap7a9a9vXtv3U8vwvbnv0qtf/UNufb3th26vbntP2Fqv2P7LtBcvYP9j2Ecv2o9o+v+0Vbf9xueZDln13a/v65fmubHvObr49ANZFlANs0BjjYUnemOQpY4wjxhjvS/LbSe6R5JQkd0tybJKnLafcLMl/zsrd9TsnuTbJc5fnOnO753rKOofxLUkuTXK7JM9o+31JfiXJDyS57fKcf7ELl/XDSX50Gfddk/z9MuZbJ3lPkv+w3fHfn2RrkvsleWSSn1i2P375emiSb0xyxI3XuspDktwrycOTfPuy7ejl+v8+SZP8ZpI7Lscdl+UvHqv8UJJHJLlLkvssr5m2D0jywiS/kOTo5fk/tJzzZ0m+lJV/PvdN8i+TPHHZ92tJ/jbJrZLcKclz1pokgD1FlAPsYW2b5ElJfnaMcdUY47NJfiMroZsxxqfGGC8fY3x+2feMrITpRlw+xnjOGONLY4xrk/xkkt8cY7xnWZv9G0lO2dHd8jX85zHGB8cYVyf5X0k+OMb4u+W5XpqViF3tt5dr/UiS30/y6GX7Y5L83hjj0jHGNUl+OckPb7dU5awxxueWcX+NMcYHxhivHmNcP8b4ZJLfy9fO17PHGJePMa5K8pdZ+ctQkjwhyZ8u5395jPGPY4z3tr19ku9K8v8ur/2JJM/M8s8oyRez8pemO44xrhtjvGmd8wawW0Q5wJ532ySHJzm/7afbfjrJq5btaXt42z9alnR8JitLNo7e4G8/+eh23x+f5FmrXv+qrNxxPnadz/fxVY+vXeP7I27i9T+clbvaWf788Hb7tiS5/U2M/au0vV3blyxLTD6T5EVJjtnusH9a9fjzq8Z3XJIPrvG0xyc5NMkVq+boj7LyXxqS5P/Lynyd1/bitj+xxnMA7DGiHGDPuzIr4XrSGOPo5euoMcaNofhzSU5M8i1jjFvmK0s2uvy5/a/F+tzy5+Grtn3Ddsdsf85Hk/zkqtc/eoxx2BjjLbt7UTtx3KrHd05y+fL48qwE8Op9X8pXR/7YweMb/eay/T7LfD02X5mrnfloVpbfrLX9+iTHrJqfW44xTkqSMcY/jTGeNMa4Y1b+q8Pz2t5tna8JsMtEOcAeNsb4cpI/TvLMtrdLkrbHtn34csiRWYn2T7e9db52ffbHs7L++sbn+2SSf0zy2LaHLHdt1wrN1f4wyS+3PWl5/aPa/uAGL+2m/MLyAdbjkvzbJDd+MPIvkvxs27u0PSIry2jOuYlfd/jJJF/OquvPynxdk5X5OjYr68PX6/lJfrztdywfOj227T3HGFdkZc3477a95bLvrm0fkiRtf7DLh2+T/HNW/lJwwy68LsAuEeUAe8cvJvlAkrcuSy7+Lit3x5OVNdeHZeWO+luzsrRltWclOX35rSnPXrY9KSsx+qkkJyW5yTveY4xXZOXDpi9ZXv9dWVlDvbf8jyTnJ7kgyV9nJYaT5E+T/HlWluhcluS6JD+9oycZY3w+K2vs37wsK3lgkl/NygdIr16e+7+td1BjjPOS/HhW1otfneT1+cqd+x9LcvMk785KeL8syR2Wfd+c5G1tr0nyyiT/doxx2XpfF2BX+T8PAmBD2o4kdx9jfGD2WAD2V+6UAwDAZKIcAAAms3wFAAAmc6ccAAAm27LzQw58xxxzzDjhhBNmDwMAgAPY+eeff+UY47Zr7RPlSU444YRs27Zt9jAAADiAtf3wjvZZvgIAAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZ376S5D0f+1Tu/wsvnD0MAAD2svN/58dmD2FN7pQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJRDkAAEwmygEAYDJRDgAAk+3zKG97Q9sL2r6r7UvbHn4Tx57V9uf35fgAAGBfm3Gn/NoxxiljjJOTfCHJkyeMAQAANo3Zy1femORuSdL2x9pe2Padbf98+wPbPqnt25f9L7/xDnvbH1zuur+z7RuWbSe1PW+5I39h27vv06sCAIBdsGXWC7fdkuS7kryq7UlJzkzy4DHGlW1vvcYp/22M8cfLub+e5AlJnpPkaUkePsb4x7ZHL8c+OcmzxhgvbnvzJIes8fpnJDkjSW5+5G328NUBAMD6zbhTfljbC5JsS/KRJM9P8rAkLxtjXJkkY4yr1jjv5LZvbHtRksckOWnZ/uYkL2j7pHwlvv8+ya+0/cUkx48xrt3+ycYYZ48xto4xtm45/Mg9eX0AALBLZtwpv3aMccrqDW2bZOzkvBck+b4xxjvbPj7JaUkyxnhy229J8t1JLmh7yhjjv7R927Ltb9o+cYzx2j18HQAAsEfMXlN+o9ck+aG2t0mSHSxfOTLJFW0Pzcqd8izH3nWM8bYxxtOSXJnkuLbfmOTSMcazk7wyyX32+hUAAMBumramfLUxxsVtn5Hk9W1vSPIPSR6/3WH/Psnbknw4yUVZifQk+Z3lg5zNSty/M8kvJXls2y8m+ackT9/rFwEAALupY+xs1ciB7+u/4S7jnj/6q7OHAQDAXnb+7/zYtNdue/4YY+ta+zbL8hUAADhoiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJRDkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADDZltkD2AzudafbZNvv/NjsYQAAcJBypxwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgsi2zB7AZfOGKi/ORp3/T7GEAHFDu/LSLZg8BYL/hTjkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAw2X4R5W3PbHtx2wvbXtD2W2aPCQAA9pQtswewM21PTfI9Se43xri+7TFJbj55WAAAsMfsD3fK75DkyjHG9UkyxrhyjHF52/u3fX3b89v+Tds7tN3S9u1tT0uStr/Z9hkzBw8AADuzP0T53yY5ru372j6v7UPaHprkOUlOH2PcP8mfJnnGGONLSR6f5A/a/oskj0jyq2s9adsz2m5ru+2qz92wb64EAADWsOmXr4wxrml7/yTfluShSc5J8utJTk7y6rZJckiSK5bjL27750n+MsmpY4wv7OB5z05ydpLc59jDxt6+DgAA2JFNH+VJMsa4Icm5Sc5te1GSn0py8Rjj1B2c8k1JPp3k9vtmhAAAsPs2/fKVtie2vfuqTackeU+S2y4fAk3bQ9uetDz+gSS3SfLtSZ7d9uh9PWYAANgV+8Od8iOSPGeJ6y8l+UCSM7Ky9OTZbY/KynX8ftuPJ/mtJN8xxvho2+cmeVaSx80ZOgAA7Nymj/IxxvlJHrTGriuzcjd8e/dYde6z99a4AABgT9n0y1cAAOBAJ8oBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJRDkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkW2YPYDO4+R1Oyp2ftm32MAAAOEi5Uw4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAw2ZbZA9gM3vuJ9+bBz3nw7GEAO/Hmn37z7CEAwF7hTjkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAw2X4R5W2/v+1oe8/ZYwEAgD1tv4jyJI9O8qYkPzx7IAAAsKdt+ihve0SSByd5QpYob3uzts9re3Hbv2r7P9uevuy7f9vXtz2/7d+0vcPE4QMAwE5t+ihP8n1JXjXGeF+Sq9reL8kPJDkhyTcleWKSU5Ok7aFJnpPk9DHG/ZP8aZJnrPWkbc9ou63tti9e88W9fxUAALADW2YPYB0eneT3l8cvWb4/NMlLxxhfTvJPbV+37D8xyclJXt02SQ5JcsVaTzrGODvJ2UlyxJ2PGHtt9AAAsBObOsrb3ibJw5Kc3HZkJbJHklfs6JQkF48xTt1HQwQAgA3b7MtXTk/ywjHG8WOME8YYxyW5LMmVSf71srb89klOW46/JMlt2/6f5SxtT5oxcAAAWK/NHuWPztfeFX95kjsm+ViSdyX5oyRvS3L1GOMLWQn53277ziQXJHnQvhsuAADsuk29fGWMcdoa256drPxWljHGNcsSl/OSXLTsvyDJt+/LcQIAwEZs6ijfib9qe3SSmyf5tTHGP80eEAAA7I79NsrXuosOAAD7o82+phwAAA54ohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAw2ZbZA9gM7nm7e+bNP/3m2cMAAOAg5U45AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGRbZg9gM/jsJZfk9d/+kNnDgAPWQ97w+tlDAIBNzZ1yAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJRDkAAEwmygEAYLLpUd72zLYXt72w7QVtv6Xtn7S997L/mh2c98C2b1vOeU/bs/bpwAEAYA/ZMvPF256a5HuS3G+McX3bY5LcfIzxxHWc/mdJfmiM8c62hyQ5cW+OFQAA9pbZd8rvkOTKMcb1STLGuHKMcXnbc9tuvfGgtr/b9h1tX9P2tsvm2yW5YjnvhjHGu5djz2r7521f2/b9bZ+0j68JAAB2yewo/9skx7V9X9vntX3IGsd8fZJ3jDHul+T1Sf7Dsv2ZSS5p+4q2P9n2FqvOuU+S705yapKntb3j9k/a9oy229puu/qLX9yjFwUAALtiapSPMa5Jcv8kZyT5ZJJz2j5+u8O+nOSc5fGLknzrcu7Tk2zNStj/SJJXrTrnf4wxrh1jXJnkdUkesMZrnz3G2DrG2HrUoYfuuYsCAIBdNHVNebKy9CTJuUnObXtRksft7JRV534wyR+0/eMkn2x7m+2P2cH3AACwaUy9U972xLZ3X7XplCQf3u6wmyU5fXn8I0netJz73W27bL97khuSfHr5/pFtb7FE+mlJ3r4Xhg8AAHvE7DvlRyR5Ttujk3wpyQeyspTlZauO+VySk9qen+TqJI9atv9okme2/fxy7mPGGDcsnX5ekr9OcuckvzbGuHxfXAwAAOyOqVE+xjg/yYPW2HXaqmOOWB7+++3O/eGbeOr3jTHO2PAAAQBgH5j921cAAOCgN3v5yh43xjhr9hgAAGBXuFMOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJRDkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZFtmD2AzOPLEE/OQN7x+9jAAADhIuVMOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJRDkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMNmW2QPYDD7xsavz3J/7y9nDYAOe8rvfO3sIAAC7zZ1yAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJRDkAAEwmygEAYLKpUd72hrYXtH1X25e2PXwPPOfj2z53T4wPAAD2hdl3yq8dY5wyxjg5yReSPHm9J7Y9ZO8NCwAA9p3ZUb7aG5PcLUna/ve257e9uO0ZNx7Q9pq2T2/7tiSntv3mtm9p+86257U9cjn0jm1f1fb9bf/jhGsBAIB12zJ7AEnSdkuS70ryqmXTT4wxrmp7WJK3t335GONTSb4+ybvGGE9re/Mk703yqDHG29veMsm1y/mnJLlvkuuTXNL2OWOMj273mmckOSNJbnXkbff2JQIAwA7NvlN+WNsLkmxL8pEkz1+2/0zbdyZ5a5Ljktx92X5Dkpcvj09McsUY4+1JMsb4zBjjS8u+14wxrh5jXJfk3UmO3/6FxxhnjzG2jjG2HnH4UXvj2gAAYF1m3ym/doxxyuoNbU9L8p1JTh1jfL7tuUlusey+boxxw42HJhk7eN7rVz2+IfOvEwAAdmj2nfK1HJXkn5cgv2eSB+7guPdmZe34NydJ2yOXZTAAALBf2YwR+6okT257YZJLsrKE5WuMMb7Q9lFJnrOsPb82K3fYAQBgvzI1yscYR6yx7fqsfOhzp8cv68m3v5P+guXrxmO+Z6PjBACAvWkzLl8BAICDiigHAIDJRDkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTbZk9gM3gdnc6Kk/53e+dPQwAAA5S7pQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATLZl9gA2gysu+2Ce8djTZw/j/zjzRS+bPQQAAPYhd8oBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJRDkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAybbMHsBa2t6Q5KJVm75vjPGhScMBAIC9alNGeZJrxxin7OpJbQ8ZY9ywNwYEAAB7y36zfKXtCW3f2PYdy9eDlu2ntX1d2/+S5e5628e2Pa/tBW3/qO0hUwcPAAA3YbPeKT+s7QXL48vGGN+f5BNJ/sUY47q2d0/yF0m2Lsc8IMnJY4zL2t4ryaOSPHiM8cW2z0vymCQvXP0Cbc9IckaSHHX4YXv/igAAYAc2a5SvtXzl0CTPbXtKkhuS3GPVvvPGGJctj78jyf2TvL1tkhyWlaD/KmOMs5OcnSTH3uZWY88OHwAA1m+zRvlafjbJx5P8X1lZdnPdqn2fW/W4Sf5sjPHL+3BsAACw2/abNeVJjkpyxRjjy0l+NMmO1om/JsnpbW+XJG1v3fb4fTRGAADYZftTlD8vyePavjUrS1c+t9ZBY4x3J3lqkr9te2GSVye5wz4bJQAA7KJNuXxljHHEGtven+Q+qzb98rL93CTnbnfsOUnO2XsjBACAPWd/ulMOAAAHJFEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJRDkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAm2zJ7AJvBHe5y15z5opfNHgYAAAcpd8oBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJtsyewCbwXVXfDbvecZr13Xsvc582F4eDQAABxt3ygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJdhrlbW9oe8Gqr19a75O3Pa3tX21kgG3Pbbt1N8/d8OsDAMDetmUdx1w7xjhlr49kDW0PmfG6AACwL+328pW2H2r7G23/vu22tvdr+zdtP9j2yasOvWXbV7R9d9s/bHuz5fw/WM67uO2vbve8T2v7piQ/uGr7zdr+WdtfX77/l8trv6PtS9sesWx/RNv3Luf/wO5eHwAA7CvrifLDtlu+8qhV+z46xjg1yRuTvCDJ6UkemOTpq455QJKfS/JNSe6ar4TymWOMrUnuk+Qhbe+z6pzrxhjfOsZ4yfL9liQvTvK+McZT2x6T5KlJvnOMcb8k25L8u7a3SPLHSb43ybcl+YYdXVTbM5a/FGy76nOfXsc0AADA3rHR5SuvXP68KMkRY4zPJvls2+vaHr3sO2+McWmStP2LJN+a5GVJfqjtGcsY7pDk3kkuXM45Z7vX+aMk/3WM8Yzl+wcux7+5bZLcPMnfJ7lnksvGGO9fXu9FSc5Ya+BjjLOTnJ0kJx974tjpLAAAwF6ynii/Kdcvf3551eMbv7/xubcP3tH2Lkl+Psk3jzH+ue0Lktxi1TGf2+6ctyR5aNvfHWNcl6RJXj3GePTqg9qessbrAQDAprYvfiXiA9reZVlL/qgkb0pyy6yE99Vtb5/ku3byHM9P8j+TvLTtliRvTfLgtndLkraHt71HkvcmuUvbuy7nPXrNZwMAgE1kPXfKD2t7warvXzXGWPevRczKspLfysqa8jckecUY48tt/yHJxUkuTfLmnT3JGOP32h6V5M+TPCbJ45P8RduvWw556hjjfcuSmL9ue2VW/gJw8i6MFQAA9rmOYbXHyceeOF76b/5gXcfe68yH7eXRAABwIGp7/vKLTr6G/0dPAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJtswewGZwizscmXud+bDZwwAA4CDlTjkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKI8yeWXX56zzjorZ5111uyhAABwEBLlAAAwmSgHAIDJRDkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATCbKAQBgMlEOAACTiXIAAJhMlAMAwGRTo7ztNes45k/a3nt5/Cvb7XvLnngNAACYadPfKR9jPHGM8e7l21/Zbt+DJgwJAAD2qE0R5W1Pa3tu25e1fW/bF7ftsu/ctlvb/laSw9pe0PbFy75rlj+PaPuatu9oe1HbR068HAAA2CVbZg9glfsmOSnJ5UnenOTBSd50484xxi+1fcoY45Q1zr0uyfePMT7T9pgkb237yjHG2NGLtT0jyRlJctRRR+3BywAAgF2zKe6UL84bY3xsjPHlJBckOWEXzm2S32h7YZK/S3Jsktvf1AljjLPHGFvHGFsPP/zw3R0zAABs2Ga6U379qsc3ZNfG9pgkt01y/zHGF9t+KMkt9uDYAABgr9lMd8rX44ttD11j+1FJPrEE+UOTHL+PxwUAALttf4vys5NceOMHPVd5cZKtbbdl5a75e/f5yAAAYDdNXb4yxjhi+fPcJOeu2v6UVY9PW/X4F5P84hrnX5nk1Jt6DQAA2Kz2tzvlAABwwBHlAAAwmSgHAIDJRDkAAEwmygEAYDJRDgAAk4lyAACYTJQDAMBkohwAACYT5QAAMJkoBwCAyUQ5AABMJsoBAGAyUQ4AAJOJcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgBxwAK0AAAW0SURBVMlEOQAATCbKAQBgso4xZo9huq1bt45t27bNHgYAAAewtuePMbautc+dcgAAmEyUAwDAZKIcAAAmE+UAADCZKAcAgMlEOQAATOZXIiZp+9kkl8wex37smCRXzh7EfsrcbYz52xjztzHmb2PM3+4zdxszc/6OH2Pcdq0dW/b1SDapS3b0OyPZubbbzN/uMXcbY/42xvxtjPnbGPO3+8zdxmzW+bN8BQAAJhPlAAAwmShfcfbsAeznzN/uM3cbY/42xvxtjPnbGPO3+8zdxmzK+fNBTwAAmMydcgAAmEyUAwDAZAd0lLd9RNtL2n6g7S+tsf/r2p6z7H9b2xNW7fvlZfslbR++L8e9Wezu/LU9oe21bS9Yvv5wX499M1jH/H1723e0/VLb07fb97i271++HrfvRr15bHD+blj1/nvlvhv15rGO+ft3bd/d9sK2r2l7/Kp9B/X7b4Nz57238/l7ctuLljl6U9t7r9rnZ+9uzp+fvSt2Nn+rjju97Wi7ddW2ue+/McYB+ZXkkCQfTPKNSW6e5J1J7r3dMf8myR8uj384yTnL43svx39dkrssz3PI7Gvaj+bvhCTvmn0N+8H8nZDkPklemOT0VdtvneTS5c9bLY9vNfua9pf5W/ZdM/sa9oP5e2iSw5fH/8+qf38P6vffRuZu+d57b+fzd8tVj/9Vklctj/3s3dj8+dm7jvlbjjsyyRuSvDXJ1mXb9PffgXyn/AFJPjDGuHSM8YUkL0nyyO2OeWSSP1sevyzJd7Ttsv0lY4zrxxiXJfnA8nwHk43MH+uYvzHGh8YYFyb58nbnPjzJq8cYV40x/jnJq5M8Yl8MehPZyPyxvvl73Rjj88u3b01yp+Xxwf7+28jcsb75+8yqb78+yY2/ccLP3o3NH+trlyT5tST/Mcl1q7ZNf/8dyFF+bJKPrvr+Y8u2NY8ZY3wpydVJbrPOcw90G5m/JLlL239o+/q237a3B7sJbeQ95P238Tm4Rdttbd/a9vv27ND2C7s6f09I8r9289wDzUbmLvHeW9f8tf2pth/MShj9zK6ce4DbyPwlfvbudP7a3jfJcWOMv9rVc/e2Lfvyxfaxte7Ybv+3yR0ds55zD3Qbmb8rktx5jPGptvdP8t/bnrTd3+4PdBt5D3n/bXwO7jzGuLztNyZ5bduLxhgf3ENj2x+se/7aPjbJ1iQP2dVzD1AbmbvEe29d8zfG+E9J/lPbH0ny1CSPW++5B7iNzJ+fvTuZv7Y3S/LMJI/f1XP3hQP5TvnHkhy36vs7Jbl8R8e03ZLkqCRXrfPcA91uz9/yn34+lSRjjPOzsi7rHnt9xJvLRt5D3n8bnIMxxuXLn5cmOTfJfffk4PYD65q/tt+Z5Mwk/2qMcf2unHsA28jcee/t+vvnJUlu/C8KB/t7L9nA/PnZm2Tn83dkkpOTnNv2Q0kemOSVy4c957//Zi7I35tfWfmvAJdmZbH+jYv9T9rumJ/KV39Q8b8uj0/KVy/2vzQH34dNNjJ/t71xvrLyYYt/THLr2de02eZv1bEvyNd+0POyrHzI7lbLY/O3/vm7VZKvWx4fk+T9WeODPgfy1zr//b1vVn5o33277Qf1+2+Dc+e9t775u/uqx9+bZNvy2M/ejc2fn7278LNjOf7cfOWDntPff9MncC//w/m/k7xv+R/PM5dtT8/KnY0kuUWSl2ZlMf95Sb5x1blnLuddkuS7Zl/L/jR/Sf51kouXN/c7knzv7GvZpPP3zVn5m/nnknwqycWrzv2JZV4/kOTHZ1/L/jR/SR6U5KLl/XdRkifMvpZNOn9/l+TjSS5Yvl656tyD+v23u3Pnvbfu+XvW8jPigiSvy6po8rN39+fPz971zd92x56bJcqX76e+/7oMAgAAmORAXlMOAAD7BVEOAACTiXIAAJhMlAMAwGSiHAAAJhPlAAAwmSgHAIDJ/je4s5/SpXymPQAAAABJRU5ErkJggg==\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 | " mean radius | \n",
90 | " mean texture | \n",
91 | " mean perimeter | \n",
92 | " mean area | \n",
93 | " mean smoothness | \n",
94 | " mean compactness | \n",
95 | " mean concavity | \n",
96 | " mean concave points | \n",
97 | " mean symmetry | \n",
98 | " mean fractal dimension | \n",
99 | " ... | \n",
100 | " worst texture | \n",
101 | " worst perimeter | \n",
102 | " worst area | \n",
103 | " worst smoothness | \n",
104 | " worst compactness | \n",
105 | " worst concavity | \n",
106 | " worst concave points | \n",
107 | " worst symmetry | \n",
108 | " worst fractal dimension | \n",
109 | " target | \n",
110 | "
\n",
111 | " \n",
112 | " \n",
113 | " \n",
114 | " 0 | \n",
115 | " 17.99 | \n",
116 | " 10.38 | \n",
117 | " 122.80 | \n",
118 | " 1001.0 | \n",
119 | " 0.11840 | \n",
120 | " 0.27760 | \n",
121 | " 0.3001 | \n",
122 | " 0.14710 | \n",
123 | " 0.2419 | \n",
124 | " 0.07871 | \n",
125 | " ... | \n",
126 | " 17.33 | \n",
127 | " 184.60 | \n",
128 | " 2019.0 | \n",
129 | " 0.1622 | \n",
130 | " 0.6656 | \n",
131 | " 0.7119 | \n",
132 | " 0.2654 | \n",
133 | " 0.4601 | \n",
134 | " 0.11890 | \n",
135 | " 0 | \n",
136 | "
\n",
137 | " \n",
138 | " 1 | \n",
139 | " 20.57 | \n",
140 | " 17.77 | \n",
141 | " 132.90 | \n",
142 | " 1326.0 | \n",
143 | " 0.08474 | \n",
144 | " 0.07864 | \n",
145 | " 0.0869 | \n",
146 | " 0.07017 | \n",
147 | " 0.1812 | \n",
148 | " 0.05667 | \n",
149 | " ... | \n",
150 | " 23.41 | \n",
151 | " 158.80 | \n",
152 | " 1956.0 | \n",
153 | " 0.1238 | \n",
154 | " 0.1866 | \n",
155 | " 0.2416 | \n",
156 | " 0.1860 | \n",
157 | " 0.2750 | \n",
158 | " 0.08902 | \n",
159 | " 0 | \n",
160 | "
\n",
161 | " \n",
162 | " 2 | \n",
163 | " 19.69 | \n",
164 | " 21.25 | \n",
165 | " 130.00 | \n",
166 | " 1203.0 | \n",
167 | " 0.10960 | \n",
168 | " 0.15990 | \n",
169 | " 0.1974 | \n",
170 | " 0.12790 | \n",
171 | " 0.2069 | \n",
172 | " 0.05999 | \n",
173 | " ... | \n",
174 | " 25.53 | \n",
175 | " 152.50 | \n",
176 | " 1709.0 | \n",
177 | " 0.1444 | \n",
178 | " 0.4245 | \n",
179 | " 0.4504 | \n",
180 | " 0.2430 | \n",
181 | " 0.3613 | \n",
182 | " 0.08758 | \n",
183 | " 0 | \n",
184 | "
\n",
185 | " \n",
186 | " 3 | \n",
187 | " 11.42 | \n",
188 | " 20.38 | \n",
189 | " 77.58 | \n",
190 | " 386.1 | \n",
191 | " 0.14250 | \n",
192 | " 0.28390 | \n",
193 | " 0.2414 | \n",
194 | " 0.10520 | \n",
195 | " 0.2597 | \n",
196 | " 0.09744 | \n",
197 | " ... | \n",
198 | " 26.50 | \n",
199 | " 98.87 | \n",
200 | " 567.7 | \n",
201 | " 0.2098 | \n",
202 | " 0.8663 | \n",
203 | " 0.6869 | \n",
204 | " 0.2575 | \n",
205 | " 0.6638 | \n",
206 | " 0.17300 | \n",
207 | " 0 | \n",
208 | "
\n",
209 | " \n",
210 | " 4 | \n",
211 | " 20.29 | \n",
212 | " 14.34 | \n",
213 | " 135.10 | \n",
214 | " 1297.0 | \n",
215 | " 0.10030 | \n",
216 | " 0.13280 | \n",
217 | " 0.1980 | \n",
218 | " 0.10430 | \n",
219 | " 0.1809 | \n",
220 | " 0.05883 | \n",
221 | " ... | \n",
222 | " 16.67 | \n",
223 | " 152.20 | \n",
224 | " 1575.0 | \n",
225 | " 0.1374 | \n",
226 | " 0.2050 | \n",
227 | " 0.4000 | \n",
228 | " 0.1625 | \n",
229 | " 0.2364 | \n",
230 | " 0.07678 | \n",
231 | " 0 | \n",
232 | "
\n",
233 | " \n",
234 | "
\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 | " PassengerId | \n",
409 | " Survived | \n",
410 | " Pclass | \n",
411 | " Name | \n",
412 | " Sex | \n",
413 | " Age | \n",
414 | " SibSp | \n",
415 | " Parch | \n",
416 | " Ticket | \n",
417 | " Fare | \n",
418 | " Cabin | \n",
419 | " Embarked | \n",
420 | "
\n",
421 | " \n",
422 | " \n",
423 | " \n",
424 | " 0 | \n",
425 | " 1 | \n",
426 | " 0 | \n",
427 | " 3 | \n",
428 | " Braund, Mr. Owen Harris | \n",
429 | " male | \n",
430 | " 22.0 | \n",
431 | " 1 | \n",
432 | " 0 | \n",
433 | " A/5 21171 | \n",
434 | " 7.2500 | \n",
435 | " NaN | \n",
436 | " S | \n",
437 | "
\n",
438 | " \n",
439 | " 1 | \n",
440 | " 2 | \n",
441 | " 1 | \n",
442 | " 1 | \n",
443 | " Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
444 | " female | \n",
445 | " 38.0 | \n",
446 | " 1 | \n",
447 | " 0 | \n",
448 | " PC 17599 | \n",
449 | " 71.2833 | \n",
450 | " C85 | \n",
451 | " C | \n",
452 | "
\n",
453 | " \n",
454 | " 2 | \n",
455 | " 3 | \n",
456 | " 1 | \n",
457 | " 3 | \n",
458 | " Heikkinen, Miss. Laina | \n",
459 | " female | \n",
460 | " 26.0 | \n",
461 | " 0 | \n",
462 | " 0 | \n",
463 | " STON/O2. 3101282 | \n",
464 | " 7.9250 | \n",
465 | " NaN | \n",
466 | " S | \n",
467 | "
\n",
468 | " \n",
469 | " 3 | \n",
470 | " 4 | \n",
471 | " 1 | \n",
472 | " 1 | \n",
473 | " Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
474 | " female | \n",
475 | " 35.0 | \n",
476 | " 1 | \n",
477 | " 0 | \n",
478 | " 113803 | \n",
479 | " 53.1000 | \n",
480 | " C123 | \n",
481 | " S | \n",
482 | "
\n",
483 | " \n",
484 | " 4 | \n",
485 | " 5 | \n",
486 | " 0 | \n",
487 | " 3 | \n",
488 | " Allen, Mr. William Henry | \n",
489 | " male | \n",
490 | " 35.0 | \n",
491 | " 0 | \n",
492 | " 0 | \n",
493 | " 373450 | \n",
494 | " 8.0500 | \n",
495 | " NaN | \n",
496 | " S | \n",
497 | "
\n",
498 | " \n",
499 | "
\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 | " params | \n",
740 | " mean_test_score | \n",
741 | " rank_test_score | \n",
742 | "
\n",
743 | " \n",
744 | " \n",
745 | " \n",
746 | " 16 | \n",
747 | " {'learning_rate': 0.01, 'max_depth': 12, 'n_es... | \n",
748 | " 0.824438 | \n",
749 | " 1 | \n",
750 | "
\n",
751 | " \n",
752 | " 12 | \n",
753 | " {'learning_rate': 0.01, 'max_depth': 10, 'n_es... | \n",
754 | " 0.824438 | \n",
755 | " 1 | \n",
756 | "
\n",
757 | " \n",
758 | " 10 | \n",
759 | " {'learning_rate': 0.01, 'max_depth': 8, 'n_est... | \n",
760 | " 0.823034 | \n",
761 | " 3 | \n",
762 | "
\n",
763 | " \n",
764 | " 6 | \n",
765 | " {'learning_rate': 0.01, 'max_depth': 6, 'n_est... | \n",
766 | " 0.823034 | \n",
767 | " 3 | \n",
768 | "
\n",
769 | " \n",
770 | " 11 | \n",
771 | " {'learning_rate': 0.01, 'max_depth': 8, 'n_est... | \n",
772 | " 0.821629 | \n",
773 | " 5 | \n",
774 | "
\n",
775 | " \n",
776 | " 14 | \n",
777 | " {'learning_rate': 0.01, 'max_depth': 10, 'n_es... | \n",
778 | " 0.820225 | \n",
779 | " 6 | \n",
780 | "
\n",
781 | " \n",
782 | " 7 | \n",
783 | " {'learning_rate': 0.01, 'max_depth': 6, 'n_est... | \n",
784 | " 0.820225 | \n",
785 | " 6 | \n",
786 | "
\n",
787 | " \n",
788 | " 8 | \n",
789 | " {'learning_rate': 0.01, 'max_depth': 8, 'n_est... | \n",
790 | " 0.820225 | \n",
791 | " 6 | \n",
792 | "
\n",
793 | " \n",
794 | " 15 | \n",
795 | " {'learning_rate': 0.01, 'max_depth': 10, 'n_es... | \n",
796 | " 0.818820 | \n",
797 | " 9 | \n",
798 | "
\n",
799 | " \n",
800 | " 20 | \n",
801 | " {'learning_rate': 0.05, 'max_depth': 4, 'n_est... | \n",
802 | " 0.818820 | \n",
803 | " 9 | \n",
804 | "
\n",
805 | " \n",
806 | "
\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": "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kiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJ6oA33niD3XffnZ122okddtiBCy64AICnn36aPfbYgxEjRnDEEUewaNGit6x36623EhFMmTKlHmV3SGRmvWuomYhoBaZXDX0kM2d21v62HDY8ex1+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+wLvBg6LiI0BImKDiNiqi2qUJElrueeee44xY8YwevRodtttN8aOHcu4ceP4xje+wWWXXcbw4cN56aWXGD9+fL1LXWVl+KfFd4GfR8THgXt561nBZTLz8Yj4MvCbiOgFtACfA57pskolSdJaa/To0UydOvVt48OGDWPy5MkrXHdFl57XBj3qcwi72rbbbpszZsyodxk9QnNzM01NTfUuo8ewn7VjL2vLftaOvaydsvSyTJ9DKEmSpFVkIJQkSSo5A6EkSVLJGQglSZJKzkAoSZJUcgZCSZKkkjMQSpIklZyBUJIkqeQMhJIkSSVnIJQkSSo5A6EkSVLJGQglSZJKzkAoSZJUcgZCSZKkkjMQSpIklZyBUJIkqeQMhJIkSSVnIJQkSSo5A6EkSVLJGQglSZJKzkAoSZJUcgZCSZKkkjMQSpIklZyBUJIkqeQMhJIkSSVnIJQkSSo5A6EkSVLJ9al3Ad3ZwpZWhp59Z73L6BG+MGoxx9vLmrGftWMva6un93PmJQctm541axbHHnsszz//PL169WLChAmccsopnHfeefziF7+gV69ebLzxxlx//fVsuummy9Z78MEH2XPPPbnllls47LDD6nEYKqEefYYwIg6NiIyI7epdiySpXPr06cOll17KE088wR//+Ef+4z/+g8cff5wzzjiDRx99lGnTpjFu3DguuuiiZeu0trZy1llnccABB9SxcpVRjw6EwFHA74Ej612IJKlchgwZws477wzAgAEDGDlyJHPmzGH99ddftsyCBQuIiGWvv/Od7/Cxj32MjTfeuMvrVbn12EvGEdEAvBcYA9wBXBgRvYCrgX2Bp6kE4h9m5q0RsQtwGdAAzAOOz8zn6lK8JKlHmTlzJlOnTmWPPfYA4Nxzz+XGG29k4MCB3HvvvQDMmTOH2267jXvuuYcHH3ywnuWqhCIz611Dp4iIY4AxmTk+Ih4ATgaGAZ8CxgEbA08AnwF+AdwHHJKZcyPiCOCAzPxUG9udAEwAGDx4o13Ov+LaLjmenm6T/vDCwnpX0XPYz9qxl7XV0/s5arOBbxtbuHAhp5xyCscccwz77LPPW+ZNmjSJRYsWccIJJ3DhhRdy+OGHs/3223PJJZew1157se+++7a7r/nz59PQ0FDzYyijsvRyzJgxD2Xmrm3N68mB8E7gisz8bUT8G7AF0Bd4JDN/VCzzX8CPgb8ADwB/L1bvDTyXmfuvaB9bDhuevQ6/srMOoVS+MGoxl07vsSesu5z9rB17WVs9vZ/VD5UAtLS0MG7cOA444ABOP/30ty3/zDPPcNBBB/HnP/+ZrbfemqX/T543bx7rrrsuEydO5CMf+Uib+2pubqapqanmx1BGZellRLQbCHvkn8qI2BB4P7BjRCSVgJfAbe2tAjyWmXt1UYmSpB4uMxk/fjwjR458Sxh88sknGTFiBAB33HEH221Xee7x6aefXrbM8ccfz7hx49oNg1Kt9chACBwG3JiZJy4diIj7qNwb+LGIuAHYCGiicoZwBrBRROyVmX+IiL7AuzPzsa4vXZLUE9x///3cdNNNjBo1isbGRgAuvvhirrvuOmbMmEGvXr3Yaqut+N73vlfnSqWeGwiPAi5ZbuznwEhgNvBn4K/An4BXM3NRRBwGXBURA6n05QpghYGwf9/ezFju8oBWT3NzMzOPbqp3GT2G/awde1lbZern3nvvTVu3ZX3oQx9a6brXX399J1Qkta9HBsLMbGpj7CqoPH2cmfOLy8qTgenF/GnAPsuvJ0mS1NP1yEC4Ev8dEYOAdwD/npnP17sgSZKkeipdIGzr7KEkSVKZ9fRvKpEkSdJKGAglSZJKzkAoSZJUcgZCSZKkkjMQSpIklZyBUJIkqeQMhJIkSSVnIJQkSSo5A6EkSVLJGQglSZJKzkAoSZJUcgZCSZKkkjMQSpIklZyBUJIkqeQMhJIkSSVnIJQkSSo5A6EkSVLJGQglSZJKzkAoSZJUcgZCSZKkkjMQSpIklZyBUJIkqeQMhJIkSSVnIJQkSSo5A6G6VGtrK+95z3sYN27cW8avuuoqGhoa6lSVJEnl1qfeBXRURLQC06nU/ARwXGb+s51lLwTmZ+a3O7OmhS2tDD37zs7cRbc385KD3vL6yiuvZOTIkbz22mvLxqZMmcL8+fO7ujRJklToTmcIF2ZmY2buCCwCTqp3QVo1s2fP5s477+TTn/70srHW1lbOOOMMTjzxxDpWJklSuXWnQFjtd8BwgIg4NiIejYhHIuKm5ReMiM9ExIPF/J9HxLrF+Mcj4s/F+P8UYztExOSImFZsc0SXHlUPd+qpp/LNb36TXr3+92139dVXc/DBB7PhhhvWsTJJksqt21wyXioi+gAHAr+KiB2Ac4H3Zua8iNigjVX+KzOvLdb9KjAe+A5wPnBAZs6JiEHFsicBV2bmpIh4B9C7jf1PACYADB68EeePWlzjI+xZmpubAfjDH/5AS0sLr7/+OtOmTeOll17i1ltv5Qc/+AFXXHEF8+fPp7W1ddnyWjPz58+3lzViL2vLftaOvawdewmRmfWuoUOq7iGEyhnCLwAnAu/KzHOXW/ZCinsII2Jf4KvAIKAB+HVmnhQR3wO2AX5KJTS+FBGfoBIwbyzGnlxRTVsOG569Dr+yZsfYEy29h/Ccc87hpptuok+fPrzxxhu89tprrLPOOqyzzjr069ePN954gxdffJFhw4bx1FNP1bnq7q+5uZmmpqZ6l9Ej2Mvasp+1Yy9rpyy9jIiHMnPXtuZ1p0vGS+8hbMzMz2fmIiCAlSXa64GTM3MU8BWgH0BmngR8GdgCmBYRG2bmj4GDgYXAryPi/Z10LKXz9a9/ndmzZzNz5kxuvvlm3v/+9/Pyyy/z/PPPLxtbd911DYOSJNVBdwqEbbkbODwiNgRo55LxAOC5iOgLHL10MCK2ycw/Zeb5wDxgi4gYBvw9M68C7gBGd/oRSJIk1Vm3u4ewWmY+FhFfA+4rLilPBY5fbrHzgD8Bz1C55DygGP9W8dBIUAmWjwBnA8dERAvwPHDRivbfv29vZiz3sSpauaampjZPzfvRM5Ik1Ue3CYSZ2eanFmfmDcANy41dWDV9DXBNG+t9tI3Nfb34kSRJKo3ufslYkiRJa8hAKEmSVHIGQkmSpJIzEEqSJJWcgVCSJKnkDISSJEklZyCUJEkqOQOhJElSyRkIJUmSSs5AKEmSVHIGQkmSpJIzEEqSJJWcgVCSJKnkDISSJEklZyCUJEkqOQOhJElSyRkIJUmSSs5AKEmSVHIGQkmSpJIzEEqSJJWcgVCSJKnkDISSJEklZyCUJEkqOQOhJElSyRkIJUmSSs5AKEmSVHIGQi3zxhtvsPvuu7PTTjuxww47cMEFFwDw9NNPs8ceezBixAiOOOIIFi1aVOdKJUlSLfWpdwGrKyLOBT4BtAJLgBOBzwCXZebjETE/MxvaWG9P4EpgneLnlsy8cHVqWNjSytCz71zNI1h7zLzkIADWWWcd7rnnHhoaGmhpaWHvvffmwAMP5LLLLuO0007jyCOP5KSTTuK6667js5/9bJ2rliRJtdItzxBGxF7AOGDnzBwNfACYlZmfzszHV7L6DcCEzGwEdgR+2rnVdh8RQUNDJUO3tLTQ0tJCRHDPPfdw2GGHAXDcccdx++2317NMSZJUY6scCCPinRExujOKWQVDgHmZ+SZAZs7LzGcjojkidl26UERcGhEPR8TdEbFRMbwx8FyxXuvSABkRF0bETRFxT0Q8GRGf6eJjWiu0trbS2NjIxhtvzNixY9lmm20YNGgQffpUTiZvvvnmzJkzp85VSpKkWupQICyC1voRsQHwCPCjiLisc0tbod8AW0TEXyPiuxGxbxvLrAc8nJk7A/cBFxTjlwMzIuK2iDgxIvpVrTMaOAjYCzg/IjbtxGNYK/Xu3Ztp06Yxe/ZsJk+ezBNPPPG2ZSKiDpVJkqTO0tF7CAdm5msR8WngR5l5QUQ82pmFrUhmzo+IXYD3AWOAWyLi7OUWWwLcUkz/J/BfxboXRcQkYH8q9yAeBTQVy/0iMxcCCyPiXmB34C3XRyNiAjABYPDgjTh/1OIaH13Xa25ubnN86NChTJo0iblz53L33XfTu3dvHnvsMfr169fuOqtr/vz5Nd9mmdnP2rGXtWU/a8de1o697Hgg7BMRQ4DDgXM7sZ4Oy8xWoBlojojpwHErW6Vq3b8B10TEtcDciNhw+WXaeU1mTgQmAmw5bHheOr3bPpezzMyjmwCYO3cuffv2ZdCgQSxcuJDzzjuPs846i5deeom5c+dy5JFHcvPNN3PCCSfQ1NRU0xqam5trvs0ys5+1Yy9ry37Wjr2sHXvZ8XsILwJ+DfwtMx+MiGHAk51X1opFxLYRMaJqqBF4ZrnFegGHFdOfAH5frHtQ/O81zxFUnlJ+pXh9SET0KwJiE/BgJ5S/1nruuecYM2YMo0ePZrfddmPs2LGMGzeOb3zjG1x22WUMHz6cl156ifHjx9e7VEmSVEMdOr2VmT8Dflb1+u/AxzqrqA5oAL4TEYOAxcBTVC7j3lq1zAJgh4h4CHgVOKIY/yRweUT8s1j36MxsLTLiZOBOYEvg3zPz2RUV0b9vb2YUH9nSE4wePZqpU6e+bXzYsGFMnjy5DhVJkqSu0KFAGBHvBq4BNsnMHYunjA/OzK92anXtyMyHgH9pY1ZT1TJLP4PwvOXWPXIFm/5rZk5Y4wIlSZK6kY5eMr4WOAdoAcjMR4EVBStJkiR1Ex19ImLdzJy83MeNdP/Ha6us7reVSJIkdXcdPUM4LyK2oXjqNiIOo/hwZ0mSJHVvHT1D+DkqH7WyXUTMAZ4Gju60qiRJktRlVhoII6IXsGtmfiAi1gN6ZebrnV+aJEmSusJKLxln5hLg5GJ6gWFQkiSpZ+noPYS/jYgvRsQWEbHB0p9OrUySJEldoqP3EH6q+P25qrEEhtW2HEmSJHW1jn5TydadXYgkSZLqo6PfVHJsW+OZeWNty5EkSVJX6+gl492qpvsB+wEPAwZCSZKkbq6jl4w/X/06IgYCN3VKRZIkSepSHX3KeHn/BEbUshBJkiTVR0fvIfwlxdfWUQmR2wM/66yiJEmS1HU6eg/ht6umFwPPZObsTqhHkiRJXayjl4w/lJn3FT/3Z+bsiPhGp1YmSZKkLtHRQDi2jbEDa1mIJEmS6mOFl4wj4rPAvwLDIuLRqlkDgPs7szBJkiR1jZXdQ/hj4P8AXwfOrhp/PTP/0WlVSZIkqcusMBBm5qvAq8BRABGxMZUPpm6IiIbM/H+dX6IkSZI6U4fuIYyID0fEk8DTwH3ATCpnDiVJktTNdfShkq8CewJ/zcytqXx1nfcQSpIk9QAdDYQtmfkS0CsiemXmvUBjJ9YlSZKkLtLRD6Z+JSIagN8BkyLiRSofUC1JkqRurqNnCA+h8v3FpwK/Av4GfLizipIkSVLX6dAZwsxcEBFbASMy84aIWBfo3bmlSZIkqSt09CnjzwC3At8vhjYDbu+sotR1Zs2axZgxYxg5ciQ77LADV155JQDTpk1jzz33pLGxkV133ZXJkyfXuVJJktRZOnoP4eeA3YE/AWTmk8VnErYrIlqB6VVDN2fmJR3ZWUQ0AV/MzHEdrK+tbTQX25iyGut2aP8LW1oZevadq1dgnc285CAA+vTpw6WXXsrOO+/M66+/zi677MLYsWM588wzueCCCzjwwAO56667OPPMM2lubq5v0ZIkqVN0NBC+mZmLIgKAiOgD5ErWWZiZdXkSOSK8nN1BQ4YMYciQIQAMGDCAkSNHMmfOHCKC1157DYBXX32VTTfdtJ5lSpKkTtTRQHhfRHwJ6B8RY6l8v/EvV2eHETGTylfijQH6AhOofDXecOBbmfm9YtH1I+I2YFvgf4B/zcwlEXENsBvQH7g1My+o2u4Pgf2Bq6v21wv4ETArM78cEfsDXwHWofJwzAmZOT8iPghcAcwDHl6dY+vuZs6cydSpU9ljjz244oorOOCAA/jiF7/IkiVLeOCBB+pdniRJ6iQdfcr4bGAulUvAJwJ3AV9eyTr9I2Ja1c8RVfNmZeZeVD7G5nrgMCoffH1R1TK7A18ARgHbAB8txs/NzF2B0cC+ETG6ap03MnPvzLy5eN0HmETlA7W/HBGDi7o/kJk7A1OA0yOiH3AtlSen3we8q0Nd6UHmz5/Pxz72Ma644grWX399rrnmGi6//HJmzZrF5Zdfzvjx4+tdoiRJ6iSR2f6V34jYcnW/rzgi5mdmQxvjM4H3ZuaciPgUsFdmfqaY9/+oBL1G4KLM3KcY/xQwOjNPjYiTqJxV7AMMAT6fmTcX2903M58p1mkG3gn8NDO/VoyNoxJAZxflvAP4A/Ad4Kqq/R0MTGjrHsKImFDsn8GDN9rl/CuuXZ321N2ozQYum168eDHnnHMOu+22G4cffjgA48aN45e//CURQWYybtw47ryz8+6XnD9/Pg0Nb3u7aDXZz9qxl7VlP2vHXtZOWXo5ZsyYh4qTam+zskvGtwM7A0TEzzPzYzWq6c3i95Kq6aWvl9a0fFLNiNga+CKwW2a+HBHXA/2qllmw3DoPAGMi4tLMfAMI4LeZeVT1QhHR2Mb+2pSZE4GJAFsOG56XTu/oVfe1y8yjmwDITI477jje+973csUVVyybv8UWWxARNDU1cffdd7PddtvR1NTUafU0Nzd36vbLxn7Wjr2sLftZO/ayduzlygNhVE0P68xC2rB7EQCfAY6gEsLWpxL6Xo2ITYADgeYVbOM6YB/gZxFxKPBH4D8iYnhmPlV8nuLmwF+ArSNim8z8G3BU+5vsWe6//35uuukmRo0aRWNj5Rmgiy++mGuvvZZTTjmFxYsX069fPyZOnFjnSiVJUmdZWSDMdqY7on9ETKt6/avMPHsV1v8DcAmVewj/B7iteKhkKvAY8Hfg/pVtJDMvi4iBwE3A0cDxwE8iYp1ikS9n5l+LS8F3RsQ84PfAjivbdv++vZlRfHxLd7X33nvT3m0DDz30UBdXI0mS6mFlgXCniHiNypnC/sU0xevMzPXbWzEz2/zol8wcWjV9PZV7+paf10w7Z/4y8/iVbbd43VQ1fUHVrHuoPKW8/Pq/ArZra9uSJEk92QoDYXuhTpIkST1HRz92RpIkST2UgVCSJKnkDISSJEklZyCUJEkqOQOhJElSyRkIJUmSSs5AKEmSVHIGQkmSpJIzEEqSJJWcgVCSJKnkDISSJEklZyCUJEkqOQOhJElSyRkIJUmSSs5AKEmSVHIGQkmSpJIzEEqSJJWcgVCSJKnkDISSJEklZyCUJEkqOQOhJElSyRkIJUmSSs5AKEmSVHIGQkmSpJIzEEqSJJWcgVCSJKnk+tS7gO5sYUsrQ8++s95ltGvmJQcBMGvWLI499lief/55evXqxYQJEzjllFOWLfftb3+bM844g7lz5zJ48OB6lStJkuqkRwfCiDgX+ATQCiwBTszMP9W3qq7Xp08fLr30UnbeeWdef/11dtllF8aOHcv222/PrFmz+O1vf8uWW25Z7zIlSVKd9NhLxhGxFzAO2DkzRwMfAGbVt6r6GDJkCCkSDA8AABK1SURBVDvvvDMAAwYMYOTIkcyZMweA0047jW9+85tERD1LlCRJddRjAyEwBJiXmW8CZOa8zHw2InaJiPsi4qGI+HVEDImIPhHxYEQ0AUTE1yPia/UsvrPMnDmTqVOnsscee3DHHXew2WabsdNOO9W7LEmSVEeRmfWuoVNERAPwe2Bd4P8CtwAPAPcBh2Tm3Ig4AjggMz8VETsAtwL/BnwT2CMzF7Wx3QnABIDBgzfa5fwrru2S41kdozYb+JbXCxcu5JRTTuGYY45h991357TTTuNb3/oWDQ0NHHnkkXz/+99n4MCB7Wytc82fP5+Ghoa67Lsnsp+1Yy9ry37Wjr2snbL0csyYMQ9l5q5tzeuxgRAgInoD7wPGACcCXwUuBv5eLNIbeC4z9y+W/xJwPrBXZk5d2fa3HDY8ex1+ZWeUXhNLHyoBaGlpYdy4cRxwwAGcfvrpTJ8+nf322491110XgNmzZ7PpppsyefJk3vWud3V5rc3NzTQ1NXX5fnsq+1k79rK27Gft2MvaKUsvI6LdQNijHyrJzFagGWiOiOnA54DHMnOvdlYZBbwCbNI1FXaNzGT8+PGMHDmS008/HYBRo0bx4osvLltm6NChTJkyxaeMJUkqoR57D2FEbBsRI6qGGoEngI2KB06IiL7FpWIi4qPAhsA+wFURMaira+4s999/PzfddBP33HMPjY2NNDY2ctddd9W7LEmStJboyWcIG4DvFMFuMfAUlXv/JlIJfAOpHP8VEfECcAmwX2bOioirgSuB41a0g/59ezOj6rLs2mrvvfdmZbcGzJw5s2uKkSRJa50eGwgz8yHgX9qYNY/KWcDlvbtq3as6qy5JkqS1TY+9ZCxJkqSOMRBKkiSVnIFQkiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFwLfapT32KjTfemB133HHZ2Hnnncfo0aNpbGxk//3359lnn61jhZIkqSfoU+8CVkdEtALTqdT/BHBcZv5zDbd5PLBrZp7c0XUWtrQy9Ow712S3bZp5yUEAHH/88Zx88skce+yxy+adccYZ/Pu//zsAV111FRdddBHf+973al6DJEkqj+56hnBhZjZm5o7AIuCkjq4YEb07r6za2meffdhggw3eMrb++usvm16wYAER0dVlSZKkHqZbniFczu+A0QARcTuwBdAPuDIzJxbj84HLgAOAL0TEm8CVwHrAm8B+xbY2jYhfAdsAt2XmmV15IB117rnncuONNzJw4EDuvffeepcjSZK6ucjMetewyiJifmY2REQf4OfArzLzmojYIDP/ERH9gQeBfTPzpYhI4IjM/GlEvAP4S/H6wYhYH/gncAxwPvAeKiFxBrB3Zs5abt8TgAkAgwdvtMv5V1xb8+MbtdnAZdPPP/8855xzDj/60Y/ettykSZNYtGgRJ5xwQs1r6Grz58+noaGh3mX0GPazduxlbdnP2rGXtVOWXo4ZM+ahzNy1rXnd9Qxh/4iYVkz/DriumP63iDi0mN4CGAG8BLRSCY4A2wLPZeaDAJn5GrD00uvdmflq8fpxYCvgLYGwOOs4EWDLYcPz0um1b+HMo5v+d3rmTNZbbz2amprettzWW2/NQQcdxA033FDzGrpac3Nzm8eo1WM/a8de1pb9rB17WTv2svsGwoWZ2Vg9EBFNwAeAvTLznxHRTOXSMcAbmdm6dFGgvdOib1ZNt7IW9ufJJ59kxIgRANxxxx1st912da5IkiR1d2td4FkDA4GXizC4HbBnO8v9hcq9grsVl4wHAAu7rMpVcNRRR9Hc3My8efPYfPPN+cpXvsJdd93FjBkz6NWrF1tttZVPGEuSpDXWkwLhr4CTIuJRKvf//bGthTJzUUQcAXynuNdwIZUzi6usf9/ezCg+IqYz/OQnP3nb2Pjx4zttf5IkqZy6ZSDMzLfd+ZmZbwIHdmT54v7B5c8gXl/8LF1m3JrWKUmS1B10188hlCRJUo0YCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJWcglCRJKjkDoSRJUskZCCVJkkquT70LKJOhQ4cyYMAAevfuTZ8+fZgyZUq9S5IkSeqegTAi5mdmw0qW+QFwWWY+HhFfysyLq+Y9kJn/sqb7WNjSytCz72x3/sxLDnrb2L333svgwYNXtFlJkqQu1WMvGWfmpzPz8eLll5abt8IwKEmSVCbdOhBGRFNENEfErRHxl4iYFBFRzGuOiF0j4hKgf0RMi4hJxbz5xe+GiLg7Ih6OiOkRcUgn18v+++/PLrvswsSJEztzV5IkSR3WLS8ZL+c9wA7As8D9wHuB3y+dmZlnR8TJmdnYxrpvAIdm5msRMRj4Y0TckZnZGYXef//9bLrpprz44ouMHTuW7bbbjn322aczdiVJktRhPSEQTs7M2QARMQ0YSlUgXIkALo6IfYAlwGbAJsDz7a4QMQGYADB48EacP2pxuxtvbm5+29hf//pXAN7znvfwk5/8hCVLlnSw1J5t/vz5bfZLq8d+1o69rC37WTv2snbsZc8IhG9WTbeyasd0NLARsEtmtkTETKDfilbIzInARIAthw3PS6e3v7uZRzctm16wYAFLlixhwIABLFiwgC996Uucf/75NDU1tbt+mTQ3N9uLGrKftWMva8t+1o69rB172TMCYUe0RETfzGxZbnwg8GIRBscAW3VWAS+88AKHHnooAIsXL+YTn/gEH/zgBztrd5IkSR1WlkA4EXg0Ih7OzKOrxicBv4yIKcA04C+rstH+fXszo42PlmnLsGHDeOSRR1Zl85IkSV2iWwbCpZ8PmJnNQHPV+MlV001V02cBZ7Wx/jxgrxXtQ5Ikqafr1h87I0mSpDVnIJQkSSo5A6EkSVLJGQglSZJKzkAoSZJUcgZCSZKkkjMQSpIklZyBUJIkqeQMhJIkSSVnIJQkSSo5A6EkSVLJGQglSZJKzkAoSZJUcgZCSZKkkjMQSpIklZyBUJIkqeQMhJIkSSVnIJQkSSo5A6EkSVLJGQglSZJKzkAoSZJUcgZCSZKkkjMQSpIklZyBUJIkqeQMhJIkSSVnIJQkSSo5A6EkSVLJGQglSZJKzkAoSZJUcgZCSZKkkjMQSpIklVxkZr1r6LYi4nVgRr3r6CEGA/PqXUQPYj9rx17Wlv2sHXtZO2Xp5VaZuVFbM/p0dSU9zIzM3LXeRfQEETHFXtaO/awde1lb9rN27GXt2EsvGUuSJJWegVCSJKnkDIRrZmK9C+hB7GVt2c/asZe1ZT9rx17WTul76UMlkiRJJecZQkmSpJIzEK6GiPhgRMyIiKci4ux619MdRcTMiJgeEdMiYkoxtkFE/DYinix+v7Peda6NIuKHEfFiRPy5aqzN3kXFVcV79dGI2Ll+la+d2unnhRExp3h/TouID1XNO6fo54yIOKA+Va+dImKLiLg3Ip6IiMci4pRi3PfnKlpBL31vroaI6BcRkyPikaKfXynGt46IPxXvzVsi4h3F+DrF66eK+UPrWX9XMBCuoojoDfwHcCCwPXBURGxf36q6rTGZ2Vj1qP/ZwN2ZOQK4u3itt7se+OByY+317kBgRPEzAbimi2rsTq7n7f0EuLx4fzZm5l0AxZ/1I4EdinW+W/ydoIrFwBcycySwJ/C5ome+P1dde70E35ur403g/Zm5E9AIfDAi9gS+QaWfI4CXgfHF8uOBlzNzOHB5sVyPZiBcdbsDT2Xm3zNzEXAzcEida+opDgFuKKZvAD5Sx1rWWpn5P8A/lhtur3eHADdmxR+BQRExpGsq7R7a6Wd7DgFuzsw3M/Np4CkqfycIyMznMvPhYvp14AlgM3x/rrIV9LI9vjdXoHiPzS9e9i1+Eng/cGsxvvx7c+l79lZgv4iILiq3LgyEq24zYFbV69ms+A+p2pbAbyLioYiYUIxtkpnPQeUvQ2DjulXX/bTXO9+vq+/k4jLmD6tuX7CfHVRcYnsP8Cd8f66R5XoJvjdXS0T0johpwIvAb4G/Aa9k5uJikeqeLetnMf9VYMOurbhrGQhXXVv/QvBR7VX33szcmcolo89FxD71LqiH8v26eq4BtqFyaek54NJi3H52QEQ0AD8HTs3M11a0aBtj9rNKG730vbmaMrM1MxuBzamcPR3Z1mLF79L100C46mYDW1S93hx4tk61dFuZ+Wzx+0XgNip/OF9Yermo+P1i/Srsdtrrne/X1ZCZLxT/81gCXMv/XnqznysREX2pBJhJmflfxbDvz9XQVi99b665zHwFaKZyb+agiFj6Nb7VPVvWz2L+QDp+a0m3ZCBcdQ8CI4onk95B5SbeO+pcU7cSEetFxICl08D+wJ+p9PG4YrHjgF/Up8Juqb3e3QEcWzzNuSfw6tJLd2rfcvexHUrl/QmVfh5ZPIG4NZWHISZ3dX1rq+Ieq+uAJzLzsqpZvj9XUXu99L25eiJio4gYVEz3Bz5A5b7Me4HDisWWf28ufc8eBtyTPfyDm/usfBFVy8zFEXEy8GugN/DDzHyszmV1N5sAtxX35/YBfpyZv4qIB4GfRsR44P8BH69jjWutiPgJ0AQMjojZwAXAJbTdu7uAD1G5wfyfwAldXvBarp1+NkVEI5VLRDOBEwEy87GI+CnwOJWnQD+Xma31qHst9V7gk8D04l4tgC/h+3N1tNfLo3xvrpYhwA3Fk9e9gJ9m5n9HxOPAzRHxVWAqlRBO8fumiHiKypnBI+tRdFfym0okSZJKzkvGkiRJJWcglCRJKjkDoSRJUskZCCVJkkrOQChJklRyBkJJPU5EtEbEtKqfoauxjUER8a+1r27Z9g+OiLM7a/vt7PMjEbF9V+5TUvfgx85I6nEiYn5mNqzhNoYC/52ZO67ier3Xxs9/K75t4QdUjunWetcjae3iGUJJpVB8sf23IuLBiHg0Ik4sxhsi4u6IeDgipkfEIcUqlwDbFGcYvxURTRHx31Xbuzoiji+mZ0bE+RHxe+DjEbFNRPwqIh6KiN9FxHZt1HN8RFxdTF8fEddExL0R8feI2DcifhgRT0TE9VXrzI+IS4ta746IjYrxxoj4Y3Fct0XEO4vx5oi4OCLuA84CDga+VRzTNhHxmaIfj0TEzyNi3ap6roqIB4p6Dquq4cyiT49ExCXF2EqPV9LazW8qkdQT9a/6doenM/NQYDyVr0bbLSLWAe6PiN8As4BDM/O1iBgM/DEi7gDOBnbMzEaAiGhayT7fyMy9i2XvBk7KzCcjYg/gu8D7V7L+O4tlDgZ+SeWbKj4NPBgRjZk5DVgPeDgzvxAR51P5VpWTgRuBz2fmfRFxUTF+arHdQZm5b1HXCKrOEEbEK5l5bTH91aJH3ynWGwLsDWxH5Wu8bo2IA4GPAHtk5j8jYoNi2YmrcbyS1iIGQkk90cKlQa7K/sDoqrNdA6l83+ts4OKI2AdYAmxG5esVV9UtUDnjCPwL8LPi6xkB1unA+r/MzIyI6cALmTm92N5jwFBgWlHfLcXy/wn8V0QMpBL67ivGbwB+tnxd7dixCIKDgAYqX8m51O2ZuQR4PCKW9uMDwI8y858AmfmPNTheSWsRA6GksggqZ9F+/ZbBymXfjYBdMrMlImYC/dpYfzFvvc1m+WUWFL97Aa+0EUhX5s3i95Kq6aWv2/u7uiM3gS9YwbzrgY9k5iNFH5raqAcqvVv6e/l9ru7xSlqLeA+hpLL4NfDZiOgLEBHvjoj1qJwpfLEIg2OArYrlXwcGVK3/DLB9RKxTnJXbr62dZOZrwNMR8fFiPxERO9XoGHoBS89wfgL4fWa+CrwcEe8rxj8J3NfWyrz9mAYAzxU9OboD+/8N8Kmqew036OTjldRFDISSyuIHwOPAwxHxZ+D7VM68TQJ2jYgpVELRXwAy8yUq9xn+OSK+lZmzgJ8CjxbrTF3Bvo4GxkfEI8BjwCErWHZVLAB2iIiHqNyjd1ExfhyVh0UeBRqrxpd3M3BGREyNiG2A84A/Ab+lOO4VycxfUbmfcEpxj+YXi1mddbySuogfOyNJ3UTU4ON0JKktniGUJEkqOc8QSpIklZxnCCVJkkrOQChJklRyBkJJkqSSMxBKkiSVnIFQkiSp5AyEkiRJJff/AUAUbSFztI++AAAAAElFTkSuQmCC\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 |
--------------------------------------------------------------------------------