From a08481e1d73a032f5ec1ce66f7662c60d2b4a67c Mon Sep 17 00:00:00 2001 From: GregaVrbancic Date: Tue, 29 May 2018 10:27:08 +0200 Subject: [PATCH] add example on how to optimize KNN parameters using NiaPy --- .gitignore | 112 ++++++++++ optimize_KNN_parameters/Pipfile | 24 +++ optimize_KNN_parameters/Pipfile.lock | 311 +++++++++++++++++++++++++++ optimize_KNN_parameters/chart.png | Bin 0 -> 17308 bytes optimize_KNN_parameters/run.py | 117 ++++++++++ 5 files changed, 564 insertions(+) create mode 100644 .gitignore create mode 100644 optimize_KNN_parameters/Pipfile create mode 100644 optimize_KNN_parameters/Pipfile.lock create mode 100644 optimize_KNN_parameters/chart.png create mode 100644 optimize_KNN_parameters/run.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..987df74 --- /dev/null +++ b/.gitignore @@ -0,0 +1,112 @@ + +# Created by https://www.gitignore.io/api/python + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +bin/ +include/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule.* + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +.vscode/ + + +# End of https://www.gitignore.io/api/python diff --git a/optimize_KNN_parameters/Pipfile b/optimize_KNN_parameters/Pipfile new file mode 100644 index 0000000..b506259 --- /dev/null +++ b/optimize_KNN_parameters/Pipfile @@ -0,0 +1,24 @@ +[[source]] + +url = "https://pypi.python.org/simple" +verify_ssl = true +name = "pypi" + + +[packages] + +niapy = "*" +numpy = "*" +scikit-learn = "*" +pygal = "*" +lxml = "*" +cairosvg = "*" + + +[dev-packages] + + + +[requires] + +python_version = "3.6" diff --git a/optimize_KNN_parameters/Pipfile.lock b/optimize_KNN_parameters/Pipfile.lock new file mode 100644 index 0000000..8d335a4 --- /dev/null +++ b/optimize_KNN_parameters/Pipfile.lock @@ -0,0 +1,311 @@ +{ + "_meta": { + "hash": { + "sha256": "8f01253971192bc37b9ca7cd16de2ea4550617ace50360fc29ed08565a8b9636" + }, + "host-environment-markers": { + "implementation_name": "cpython", + "implementation_version": "3.6.3", + "os_name": "posix", + "platform_machine": "x86_64", + "platform_python_implementation": "CPython", + "platform_release": "4.13.0-41-generic", + "platform_system": "Linux", + "platform_version": "#46~16.04.1-Ubuntu SMP Thu May 3 10:06:43 UTC 2018", + "python_full_version": "3.6.3", + "python_version": "3.6", + "sys_platform": "linux" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.6" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "cairocffi": { + "hashes": [ + "sha256:65f21e6786e2b255ab1d3fda53a365a3565bb1808cabbbe59d99a797c61d3545" + ], + "version": "==0.8.0" + }, + "cairosvg": { + "hashes": [ + "sha256:0b334f4ec436d78ecbc934c652f961a73a27d770f1133082cac265afab3dd64a", + "sha256:0a29e694d7de5973433222dec08ee785a8d753459ddb9a1d8e0e1456927e8e4c", + "sha256:e512f555f576b6462b04b585c4ba4c09a43f3a8fec907b60ead21d7d00c550e9" + ], + "version": "==2.1.3" + }, + "cffi": { + "hashes": [ + "sha256:1b0493c091a1898f1136e3f4f991a784437fac3673780ff9de3bcf46c80b6b50", + "sha256:87f37fe5130574ff76c17cab61e7d2538a16f843bb7bca8ebbc4b12de3078596", + "sha256:1553d1e99f035ace1c0544050622b7bc963374a00c467edafac50ad7bd276aef", + "sha256:151b7eefd035c56b2b2e1eb9963c90c6302dc15fbd8c1c0a83a163ff2c7d7743", + "sha256:edabd457cd23a02965166026fd9bfd196f4324fe6032e866d0f3bd0301cd486f", + "sha256:ba5e697569f84b13640c9e193170e89c13c6244c24400fc57e88724ef610cd31", + "sha256:79f9b6f7c46ae1f8ded75f68cf8ad50e5729ed4d590c74840471fc2823457d04", + "sha256:b0f7d4a3df8f06cf49f9f121bead236e328074de6449866515cea4907bbc63d6", + "sha256:4c91af6e967c2015729d3e69c2e51d92f9898c330d6a851bf8f121236f3defd3", + "sha256:7a33145e04d44ce95bcd71e522b478d282ad0eafaf34fe1ec5bbd73e662f22b6", + "sha256:95d5251e4b5ca00061f9d9f3d6fe537247e145a8524ae9fd30a2f8fbce993b5b", + "sha256:b75110fb114fa366b29a027d0c9be3709579602ae111ff61674d28c93606acca", + "sha256:ae5e35a2c189d397b91034642cb0eab0e346f776ec2eb44a49a459e6615d6e2e", + "sha256:fdf1c1dc5bafc32bc5d08b054f94d659422b05aba244d6be4ddc1c72d9aa70fb", + "sha256:9d1d3e63a4afdc29bd76ce6aa9d58c771cd1599fbba8cf5057e7860b203710dd", + "sha256:be2a9b390f77fd7676d80bc3cdc4f8edb940d8c198ed2d8c0be1319018c778e1", + "sha256:ed01918d545a38998bfa5902c7c00e0fee90e957ce036a4000a88e3fe2264917", + "sha256:857959354ae3a6fa3da6651b966d13b0a8bed6bbc87a0de7b38a549db1d2a359", + "sha256:2ba8a45822b7aee805ab49abfe7eec16b90587f7f26df20c71dd89e45a97076f", + "sha256:a36c5c154f9d42ec176e6e620cb0dd275744aa1d804786a71ac37dc3661a5e95", + "sha256:e55e22ac0a30023426564b1059b035973ec82186ddddbac867078435801c7801", + "sha256:3eb6434197633b7748cea30bf0ba9f66727cdce45117a712b29a443943733257", + "sha256:ecbb7b01409e9b782df5ded849c178a0aa7c906cf8c5a67368047daab282b184", + "sha256:770f3782b31f50b68627e22f91cb182c48c47c02eb405fd689472aa7b7aa16dc", + "sha256:d5d8555d9bfc3f02385c1c37e9f998e2011f0db4f90e250e5bc0c0a85a813085", + "sha256:3c85641778460581c42924384f5e68076d724ceac0f267d66c757f7535069c93", + "sha256:e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4" + ], + "version": "==1.11.5" + }, + "click": { + "hashes": [ + "sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d", + "sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b" + ], + "version": "==6.7" + }, + "cssselect2": { + "hashes": [ + "sha256:267eebc7378ade2e8be710cd0179606ad9c95ecc673138fccfcfba42c5ce153d", + "sha256:505d2ce3d3a1d390ddb52f7d0864b7efeb115a5b852a91861b498b92424503ab" + ], + "version": "==0.2.1" + }, + "defusedxml": { + "hashes": [ + "sha256:702a91ade2968a82beb0db1e0766a6a273f33d4616a6ce8cde475d8e09853b20", + "sha256:24d7f2f94f7f3cb6061acb215685e5125fbcdc40a857eff9de22518820b0a4f4" + ], + "version": "==0.5.0" + }, + "lxml": { + "hashes": [ + "sha256:65a272821d5d8194358d6b46f3ca727fa56a6b63981606eac737c86d27309cdd", + "sha256:abbd2fb4a5a04c11b5e04eb146659a0cf67bb237dd3d7ca3b9994d3a9f826e55", + "sha256:3682a17fbf72d56d7e46db2e80ca23850b79c28cfe75dcd9b82f58808f730909", + "sha256:75322a531504d4f383264391d89993a42e286da8821ddc5ac315e57305cb84f0", + "sha256:01c45df6d90497c20aa2a07789a41941f9a1029faa30bf725fc7f6d515b1afe9", + "sha256:34d49d0f72dd82b9530322c48b70ac78cca0911275da741c3b1d2f3603c5f295", + "sha256:1b46f37927fa6cd1f3fe34b54f1a23bd5bea1d905657289e08e1297069a1a597", + "sha256:5b653c9379ce29ce271fbe1010c5396670f018e78b643e21beefbb3dc6d291de", + "sha256:3cf2830b9a6ad7f6e965fa53a768d4d2372a7856f20ffa6ce43d2fe9c0d34b19", + "sha256:1b164bba1320b14905dcff77da10d5ce9c411ac4acc4fb4ed9a2a4d10fae38c9", + "sha256:c557ad647facb3c0027a9d0af58853f905e85a0a2f04dcb73f8e665272fcdc3a", + "sha256:6b6379495d3baacf7ed755ac68547c8dff6ce5d37bf370f0b7678888dc1283f9", + "sha256:8523fbde9c2216f3f2b950cb01ebe52e785eaa8a07ffeb456dd3576ca1b4fb9b", + "sha256:a7182ea298cc3555ea56ffbb0748fe0d5e0d81451e2bc16d7f4645cd01b1ca70", + "sha256:7f457cbda964257f443bac861d3a36732dcba8183149e7818ee2fb7c86901b94", + "sha256:0c9fef4f8d444e337df96c54544aeb85b7215b2ed7483bb6c35de97ac99f1bcd", + "sha256:7ff1fc76d8804e0f870c343a72007ff587090c218b0f92d8ee784ac2b6eaf5b9", + "sha256:accc9f6b77bed0a6f267b4fae120f6008a951193d548cdbe9b61fc98a08b1cf8", + "sha256:bd88c8ce0d1504fdfd96a35911dd4f3edfb2e560d7cfdb5a3d09aa571ae5fbae", + "sha256:defabb7fbb99f9f7b3e0b24b286a46855caef4776495211b066e9e6592d12b04", + "sha256:231047b05907315ae9a9b6925751f9fd2c479cf7b100fff62485a25e382ca0d4", + "sha256:0e7996e9b46b4d8b4ac1c329a00e2d10edcd8380b95d2a676fccabf4c1dd0512", + "sha256:691f2cd97cf026c611df1ea5055755eec7f878f2d4f4330dc8686583de6fc5fd", + "sha256:1858b1933d483ec5727549d3fe166eeb54229fbd6a9d3d7ea26d2c8a28048058", + "sha256:0e3cd94c95d30ba9ca3cff40e9b2a14e1a10a4fd8131105b86c6b61648f57e4b", + "sha256:28f0c6652c1b130f1e576b60532f84b19379485eb8da6185c29bd8c9c9bc97bf", + "sha256:8f37627f16e026523fca326f1b5c9a43534862fede6c3e99c2ba6a776d75c1ab", + "sha256:e2629cdbcad82b83922a3488937632a4983ecc0fed3e5cfbf430d069382eeb9b" + ], + "version": "==4.2.1" + }, + "niapy": { + "hashes": [ + "sha256:060e99ad87faaf388cf15db2311ead6d19e4a86f3802d21866dec6290f132b7f", + "sha256:1ea831659e86b0b4baa6e1025ea39994bcf942e462dc63ff1d96d85456c332a1" + ], + "version": "==1.0.1" + }, + "numpy": { + "hashes": [ + "sha256:a8dbab311d4259de5eeaa5b4e83f5f8545e4808f9144e84c0f424a6ee55a7b98", + "sha256:034717bfef517858abc79324820a702dc6cd063effb9baab86533e8a78670689", + "sha256:f39afab5769b3aaa786634b94b4a23ef3c150bdda044e8a32a3fc16ddafe803b", + "sha256:8670067685051b49d1f2f66e396488064299fefca199c7c80b6ba0c639fedc98", + "sha256:0db6301324d0568089663ef2701ad90ebac0e975742c97460e89366692bd0563", + "sha256:98ff275f1b5907490d26b30b6ff111ecf2de0254f0ab08833d8fe61aa2068a00", + "sha256:aaef1bea636b6e552bbc5dae0ada87d4f6046359daaa97a05a013b0169620f27", + "sha256:760550fdf9d8ec7da9c4402a4afe6e25c0f184ae132011676298a6b636660b45", + "sha256:e8578a62a8eaf552b95d62f630bb5dd071243ba1302bbff3e55ac48588508736", + "sha256:e33baf50f2f6b7153ddb973601a11df852697fba4c08b34a5e0f39f66f8120e1", + "sha256:0074d42e2cc333800bd09996223d40ec52e3b1ec0a5cab05dacc09b662c4c1ae", + "sha256:c3fe23df6fe0898e788581753da453f877350058c5982e85a8972feeecb15309", + "sha256:1864d005b2eb7598063e35c320787d87730d864f40d6410f768fe4ea20672016", + "sha256:f22b3206f1c561dd9110b93d144c6aaa4a9a354e3b07ad36030df3ea92c5bb5b", + "sha256:c80fcf9b38c7f4df666150069b04abbd2fe42ae640703a6e1f128cda83b552b7", + "sha256:510863d606c932b41d2209e4de6157ab3fdf52001d3e4ad351103176d33c4b8b", + "sha256:c5eb7254cfc4bd7a4330ad7e1f65b98343836865338c57b0e25c661e41d5cfd9", + "sha256:b8987e30d9a0eb6635df9705a75cf8c4a2835590244baecf210163343bc65176", + "sha256:57dc6c22d59054542600fce6fae2d1189b9c50bafc1aab32e55f7efcc84a6c46", + "sha256:46ce8323ca9384814c7645298b8b627b7d04ce97d6948ef02da357b2389d6972", + "sha256:9ccf4d5c9139b1e985db915039baa0610a7e4a45090580065f8d8cb801b7422f", + "sha256:560e23a12e7599be8e8b67621396c5bc687fd54b48b890adbc71bc5a67333f86", + "sha256:9016692c7d390f9d378fc88b7a799dc9caa7eb938163dda5276d3f3d6f75debf" + ], + "version": "==1.14.3" + }, + "pillow": { + "hashes": [ + "sha256:f0d4433adce6075efd24fc0285135248b0b50f5a58129c7e552030e04fe45c7f", + "sha256:81762cf5fca9a82b53b7b2d0e6b420e0f3b06167b97678c81d00470daa622d58", + "sha256:b48401752496757e95304a46213c3155bc911ac884bed2e9b275ce1c1df3e293", + "sha256:040144ba422216aecf7577484865ade90e1a475f867301c48bf9fbd7579efd76", + "sha256:b6cf18f9e653a8077522bb3aa753a776b117e3e0cc872c25811cfdf1459491c2", + "sha256:4d32c8e3623a61d6e29ccd024066cd1ba556555abfb4cd714155020e00107e3f", + "sha256:438a3faf5f702c8d0f80b9f9f9b8382cfa048ca6a0d64ef71b86b563b0ee0359", + "sha256:1cb38df69362af35c14d4a50123b63c7ff18ec9a6d4d5da629a6f19d05e16ba8", + "sha256:4d8077fd649ac40a5c4165f2c22fa2a4ad18c668e271ecb2f9d849d1017a9313", + "sha256:bb8adab1877e9213385cbb1adc297ed8337e01872c42a30cfaa66ff8c422779c", + "sha256:f1f3bd92f8e12dc22884935a73c9f94c4d9bd0d34410c456540713d6b7832b8c", + "sha256:6eca36905444c4b91fe61f1b9933a47a30480738a1dd26501ff67d94fc2bc112", + "sha256:f7634d534662bbb08976db801ba27a112aee23e597eeaf09267b4575341e45bf", + "sha256:eeb247f4f4d962942b3b555530b0c63b77473c7bfe475e51c6b75b7344b49ce3", + "sha256:ea0091cd4100519cedfeea2c659f52291f535ac6725e2368bcf59e874f270efa", + "sha256:e87cc1acbebf263f308a8494272c2d42016aa33c32bf14d209c81e1f65e11868", + "sha256:3b4560c3891b05022c464b09121bd507c477505a4e19d703e1027a3a7c68d896", + "sha256:7673e7473a13107059377c96c563aa36f73184c29d2926882e0a0210b779a1e7", + "sha256:fe6931db24716a0845bd8c8915bd096b77c2a7043e6fc59ae9ca364fe816f08b", + "sha256:f5f302db65e2e0ae96e26670818157640d3ca83a3054c290eff3631598dcf819", + "sha256:9b66e968da9c4393f5795285528bc862c7b97b91251f31a08004a3c626d18114", + "sha256:62ec7ae98357fcd46002c110bb7cad15fce532776f0cbe7ca1d44c49b837d49d", + "sha256:d0dc1313dff48af64517cbbd85e046d6b477fbe5e9d69712801f024dcb08c62b", + "sha256:00633bc2ec40313f4daf351855e506d296ec3c553f21b66720d0f1225ca84c6f", + "sha256:16246261ff22368e5e32ad74d5ef40403ab6895171a7fc6d34f6c17cfc0f1943", + "sha256:e52e8f675ba0b2b417fa98579e7286a41a8e23871f17f4793772f5aa884fea79", + "sha256:6c7cab6a05351cf61e469937c49dbf3cdf5ffb3eeac71f8d22dc9be3507598d8", + "sha256:e39142332541ed2884c257495504858b22c078a5d781059b07aba4c3a80d7551", + "sha256:8554bbeb4218d9cfb1917c69e6f2d2ad0be9b18a775d2162547edf992e1f5f1f", + "sha256:2400e122f7b21d9801798207e424cbe1f716cee7314cd0c8963fdb6fc564b5fb", + "sha256:a00edb2dec0035e98ac3ec768086f0b06dfabb4ad308592ede364ef573692f55", + "sha256:fdd374c02e8bb2d6468a85be50ea66e1c4ef9e809974c30d8576728473a6ed03", + "sha256:df5863a21f91de5ecdf7d32a32f406dd9867ebb35d41033b8bd9607a21887599", + "sha256:472a124c640bde4d5468f6991c9fa7e30b723d84ac4195a77c6ab6aea30f2b9c", + "sha256:cee9bc75bff455d317b6947081df0824a8f118de2786dc3d74a3503fd631f4ef", + "sha256:2ee6364b270b56a49e8b8a51488e847ab130adc1220c171bed6818c0d4742455", + "sha256:03514478db61b034fc5d38b9bf060f994e5916776e93f02e59732a8270069c61", + "sha256:74e2ebfd19c16c28ad43b8a28ff73b904ed382ea4875188838541751986e8c9a", + "sha256:e6dd55d5d94b9e36929325dd0c9ab85bfde84a5fc35947c334c32af1af668944", + "sha256:f42a87cbf50e905f49f053c0b1fb86c911c730624022bf44c8857244fc4cdaca", + "sha256:d5bf527ed83617edd1855a5c923eeeaf68bcb9ac0ceb28e3f19b575b3a424984", + "sha256:41374a6afb3f44794410dab54a0d7175e6209a5a02d407119c81083f1a4c1841", + "sha256:c8a4b39ba380b57a31a4b5449a9d257b1302d8bc4799767e645dcee25725efe1" + ], + "version": "==5.1.0" + }, + "pycparser": { + "hashes": [ + "sha256:99a8ca03e29851d96616ad0404b4aad7d9ee16f25c9f9708a11faf2810f7b226" + ], + "version": "==2.18" + }, + "pygal": { + "hashes": [ + "sha256:27abab93cbc31e21f3c6bdecc05bda6cd3570cbdbd8297b7caa6904051b50d72", + "sha256:9204f05380b02a8a32f9bf99d310b51aa2a932cba5b369f7a4dc3705f0a4ce83" + ], + "version": "==2.4.0" + }, + "scikit-learn": { + "hashes": [ + "sha256:3775cca4ce3f94508bb7c8a6b113044b78c16b0a30a5c169ddeb6b9fe57a8a72", + "sha256:873245b03361710f47c5410a050dc56ee8ae97b9f8dcc6e3a81521ca2b64ad10", + "sha256:370919e3148253fd6552496c33a1e3d78290a336fc8d1b9349d9e9770fae6ec0", + "sha256:ce78bf4d10bd7e28807c36c6d2ab25a9934aaf80906ad987622a5e45627d91a2", + "sha256:ba3fd442ae1a46830789b3578867daaf2c8409dcca6bf192e30e85beeabbfc2f", + "sha256:a21cf8217e31a9e8e32c559246e05e6909981816152406945ae2e3e244dfcc1f", + "sha256:e54a3dd1fe1f8124de90b93c48d120e6da2ea8df29b6895325df01ddc1bd8e26", + "sha256:f9abae483f4d52acd6f660addb1b67e35dc5748655250af479de2ea6aefc6df0", + "sha256:5c9ff456d67ef9094e5ea272fff2be05d399a47fc30c6c8ed653b94bdf787bd1", + "sha256:871669cdb5b3481650fe3adff46eb97c455e30ecdc307eaf382ef90d4e2570ab", + "sha256:d4da369614e55540c7e830ccdd17ab4fe5412ff8e803a4906d3ece393e2e3a63", + "sha256:42f3c5bd893ed73bf47ccccf04dfb98fae743f397d688bb58c2238c0e6ec15d2", + "sha256:95b155ef6bf829ddfba6026f100ba8e4218b7171ecab97b2163bc9e8d206848f", + "sha256:72c194c5092e921d6107a8de8a5adae58c35bbc54e030ba624b6f02fd823bb21", + "sha256:f528c4b2bba652cf116f5cccf36f4db95a7f9cbfcd1ee549c4e8d0f8628783b5", + "sha256:d384e6f9a055b7a43492f9d27779adb717eb5dcf78b0603b01d0f070a608d241", + "sha256:ee8c3b1898c728b6e5b5659c233f547700a1fea13ce876b6fe7d3434c70cc0e0", + "sha256:56cfa19c31edf62e6414da0a337efee37a4af488b135640e67238786b9be6ab3", + "sha256:5db9e68a384ce80a17fc449d4d5d9b45025fe17cf468429599bf404eccb51049", + "sha256:8b17fc29554c5c98d88142f895516a5bec2b6b61daa815e1193a64c868ad53d2", + "sha256:13136c6e4f6b808569f7f59299d439b2cd718f85d72ea14b5b6077d44ebc7d17", + "sha256:ddc1eb10138ae93c136cc4b5945d3977f302b5d693592a4731b2805a7d7f2a74", + "sha256:5ca0ad32ee04abe0d4ba02c8d89d501b4e5e0304bdf4d45c2e9875a735b323a0", + "sha256:6e0899953611d0c47c0d49c5950082ab016b38811fced91cd2dcc889dd94f50a", + "sha256:b2a10e2f9b73de10d8486f7a23549093436062b69139158802910a0f154aa53b", + "sha256:a58746d4f389ea7df1d908dba8b52f709835f91c342f459a3ade5424330c69d1", + "sha256:fdc39e89bd3466befb76dfc0c258d4ccad159df974954a87de3be5759172a067" + ], + "version": "==0.19.1" + }, + "scipy": { + "hashes": [ + "sha256:3fab61f6ffbc1da9e1f8e813ba235929b5f361c1fdd728d120ead8f78560427c", + "sha256:4a9f5a3adbfd08dd047de48a6b436bd4dae364913aa5b6349a41e9eaeb774050", + "sha256:cc85b9d10a5da07a6b27449d17584b1a3d953f7286189f170a6045c6c297b0bc", + "sha256:76f32095863f7eccecaf5224624d4c7f0f3b922b2cd0d0b0d6f037e4d9c54db6", + "sha256:232a848a9935c37ffe2cade857296a13680724aef7d4623160dd08f99dbb9d02", + "sha256:3eb28bdc6f40a964761c1cb339e45fef076ea2ca729886e1bce956932ef7e487", + "sha256:103fd8253fd3f0df3f50a554abc01b13bee1d70483f23bb03636a74b0a0cbc71", + "sha256:f26e54dcdeec3daff6ec71854a7b3bba719b78cf07e2d23645ee09d67a5e93df", + "sha256:a3287b438b3c13970c4851a34bbc82db11e4680d1d6cdedd066479ca83028042", + "sha256:200ca3dfebbd0bbacbc0d7389e6eda77428b49793cc1e0e3247f835687d1a6be", + "sha256:f7c0624de958e2e2e6353813c78aa4f5f3f1ed0a3567fb496b6dad99f55e695e", + "sha256:544e6f7796b9c131f8f965967e806da187553abf5d7766278b96a2a76abd19a7", + "sha256:4a2837b07e77f8e2fc5303f38e224d7fd9f79f8cbf9c60ac72cf98594e1db6b5", + "sha256:11cddcfc348ef593feb4ffe4b69c18a064eca199602f751d34083838bdc2f05a", + "sha256:164f774de04e546fd10e1894d423b54e36255bb42887e005f0fbfb8eef6736f1", + "sha256:800abaa55cfad422f00f5b3802403dd634ab9888f560731c09977a3c35e0acae", + "sha256:be6f0af3f591c100923158f3e3f0f12fa16a0b231616eda407c528e1f9e10014", + "sha256:1766acf2d8ff79ed59cae841d4272587af94772f513619dd217226027bd2ab76", + "sha256:f2a51f70ef868c03430ed40d8983daa2f38d2e2160a0de4b57b7d9d070912c76", + "sha256:89c1d2a80760a373e7f12f490446c60a7221b641435a789439e8ddb01f5ab7d4", + "sha256:823a4b1a2eabd09f9e72003c14ceaac63f54d1f99a49f8c1b534f6a73135e995", + "sha256:cc04cf28b9f77255eeb612af41a6f207142f92a082555871f782c773c83b7789", + "sha256:8739c67842ed9a1c34c62d6cca6301d0ade40d50ef14ba292bd331f0d6c940ba" + ], + "version": "==1.0.1" + }, + "tinycss2": { + "hashes": [ + "sha256:5e881eaa263bf4dc5c050d43cd6d2203ade1e3a3cda61f5511cf878972e83b78", + "sha256:7c53c2c0e914c7711c295b3101bcc78e0b7eda23ff20228a936efe11cdcc7136" + ], + "version": "==0.6.1" + }, + "webencodings": { + "hashes": [ + "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", + "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" + ], + "version": "==0.5.1" + }, + "xlsxwriter": { + "hashes": [ + "sha256:05005a069da3fcadeb20ff9384d92e548096faf9ede9d6a538403fa8e0aae1f0", + "sha256:bd4661c04a68621cb2ebc07c38b8b2e98e30bf213a16e1cf3675b61e26ca9bf2" + ], + "version": "==1.0.5" + } + }, + "develop": {} +} diff --git a/optimize_KNN_parameters/chart.png b/optimize_KNN_parameters/chart.png new file mode 100644 index 0000000000000000000000000000000000000000..4f76e64729f1532a4cf88548eb218443384158d2 GIT binary patch literal 17308 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 0.5: + return 1 + return 0 + +# map from real number [0, 1] to integer ranging [1, 3] +def swap_algorithm(val): + if val == 1: + return 3 + return int(val * 3 + 1) + +# map from real number [0, 1] to integer ranging [10, 50] +def swap_leaf_size(val): + return int(val * 10 + 40) + +class KNNBreastCancerBenchmark(object): + def __init__(self): + self.Lower = 0 + self.Upper = 1 + + def function(self): + # our definition of fitness function + def evaluate(D, solution): + n_neighbors = swap_n_neighbors(solution[0]) + weights = KNN_WEIGHT_FUNCTIONS[(swap_weights(solution[1]) - 1)] + algorithm = KNN_ALGORITHMS[(swap_algorithm(solution[2]) - 1)] + leaf_size = swap_leaf_size(solution[3]) + + fitness = 1 - KNNBreastCancerClassifier(1234).evaluate(n_neighbors, weights, algorithm, leaf_size) + scores.append([fitness, n_neighbors, weights, algorithm, leaf_size]) + + return fitness + return evaluate + +class KNNBreastCancerClassifier(object): + def __init__(self, seed=1234): + self.seed = seed + self.ten_fold_scores = {} + self.default_ten_fold_scores = {} + np.random.seed(self.seed) + + dataset = datasets.load_breast_cancer() + self.X = dataset.data + self.y = dataset.target + + self.X_search, self.X_validate, self.y_search, self.y_validate = train_test_split(self.X, self.y, test_size=0.8, random_state=self.seed) + self.X_search_train, self.X_search_test, self.y_search_train, self.y_search_test = train_test_split(self.X_search, self.y_search, test_size=0.8, random_state=self.seed) + + + def evaluate(self, n_neighbors, weights, algorithm, leaf_size): + model = KNeighborsClassifier(n_neighbors=n_neighbors, weights=weights, algorithm=algorithm, leaf_size=leaf_size) + model.fit(self.X_search_train, self.y_search_train) + return model.score(self.X_search_test, self.y_search_test) + + def run_10_fold(self, solution=None): + if solution is None: + estimator = KNeighborsClassifier() + kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=self.seed) + self.default_ten_fold_scores = cross_validate(estimator, self.X, self.y, cv=kfold, scoring=['accuracy']) + else: + estimator = KNeighborsClassifier(n_neighbors=solution[1], weights=solution[2], algorithm=solution[3], leaf_size=solution[4]) + kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=self.seed) + self.ten_fold_scores = cross_validate(estimator, self.X_validate, self.y_validate, cv=kfold, scoring=['accuracy']) + + +scores = [] +algorithm = HybridBatAlgorithm(4, 40, 100, 0.9, 0.1, 0.001, 0.9, 0.0, 2.0, KNNBreastCancerBenchmark()) +best = algorithm.run() + +print('Optimal KNN parameters are:') +best_solution = [] + +for score in scores: + if score[0] == best: + best_solution = score + +print(best_solution) + +model = KNNBreastCancerClassifier() +model.run_10_fold(solution=best_solution) +model.run_10_fold() + +print('best model mean test accuracy: ' + str(np.mean(model.ten_fold_scores['test_accuracy']))) +print('default model mean test accuracy: ' + str(np.mean(model.default_ten_fold_scores['test_accuracy']))) + +box_plot = pygal.Box(width=800, height=600, range=(0.8, 0.99)) +box_plot.zero = 0.9 +box_plot.title = '10-fold cross-validation accuracies' +box_plot.add('Best model', model.ten_fold_scores['test_accuracy']) +box_plot.add('Default model', model.default_ten_fold_scores['test_accuracy']) + +box_plot.render_to_png('chart.png') \ No newline at end of file