{ "info": { "author": "Chris Spencer", "author_email": "chrisspen@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], "description": "Django-Analyze - Framework for managing classifiers\n===================================================\n\nOverview\n--------\n\nThere are tons of amazing algorithms and machine learning tools for\ndetecting patterns in data. However, what most of these lack is a useful\nframework and UI for managing the often complicated setup of the data\nflow and predictions.\n\nThis package provides several tools for utilizing Django's admin\ninterface and ORM to help organize and manage machine learning setups.\n\nThe framework revolves around two basic objects:\n\n1. A problem, which organizes solutions to acheive some prediction goal.\n This is mainly implemented a genetic algorithm.\n2. A predictor, which organizes a specific solution to either guess a\n numeric value (i.e. regression) or a label (i.e. classification).\n\nI made this separation to help myself with maintainence over the life\ntime of an application. Often, I'd want to monitor the accuracy of a\nsolution, but also evaluation other potential solutions without\ninterrupting the solution used for production predictions. Once a\nsuperior solution was found, then I'd want to push it into production\nuse with as little effort as possible. By explicitly representing\ndifferent solutions as different records in the database, I found I\ncould easily monitor them and slip them in and out of use as needed.\n\nProblem\n-------\n\nThe ``problem`` represents a domain where we're attempting to solve some\nprediction task, by either guessing a number or guessing a label. In the\ncode, this is referred to as the ``Genome``. A record in the ``Genome``\ntable represents a distinct problem domain and stores all the parameters\nused to control and manage the search for solutions.\n\nFrom the ``Genome`` you define ``Genes``, which are parameters available\nfor use when attempting to solve the problem.\n\nSpecific solutions to the problem are represented by the ``Genotype``\nmodel, which contains a list of genes and their associated values as\nkey/values pairs.\n\nTo search for the best solution to a problem, you first implement a\ncustom evaluating function, which will take a genotype as an argument\nand return a positive number, called the fitness, representing its\noverall suitability in solving the problem. By default, a value of 0 is\ninterpreted to be the worse possible fitness and increasing value\nrepresenting increasing levels of suitability. Personally, I find it\nconvenience and intuitive to bound fitness between 0 and 1, but this is\nnot strictly enforced.\n\nYou then set this function in your ``Genome's`` ``evaluator`` field and\nrun the management command:\n\n::\n\n python manage.py evolve_population --genome=\n\nDepending on the other settings in the genome, this will run for a\nmaximum predetermined number of iterations or until improvement of the\nfitness has stalled. From the genome's admin change page, you can browse\nthe list of generated genotypes and inspect their fitness, possibly\nselecting one for production use.\n\nFor example, a simple genome might consist of a single gene called\n``algorithm``, which contains one of several algorithm names (e.g.\n'Bayesian', 'LinearSVC', 'RandomForest', etc.). You would write your\nevaluation function to read this string and instantiate the appropriate\nclass associated with the name. You could then add additional genes\nrepresenting parameters common to multiple algorithms or unique to only\na few. The ``Genotype`` model with generate a unique hash based on which\ngenes it contains, and use this to avoid creating duplicate genotypes.\n\nPredictor\n---------\n\ntodo\n\nUsage\n-----\n\ntodo", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/chrisspen/django-analyze", "keywords": null, "license": "LGPL", "maintainer": null, "maintainer_email": null, "name": "django-analyze", "package_url": "https://pypi.org/project/django-analyze/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-analyze/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/chrisspen/django-analyze" }, "release_url": "https://pypi.org/project/django-analyze/0.4.23/", "requires_dist": null, "requires_python": null, "summary": "A general purpose framework for training and testing classification algorithms.", "version": "0.4.23" }, "last_serial": 1510714, "releases": { "0.4.14": [ { "comment_text": "", "digests": { "md5": "a959ae873ad530d60dd4606c8dfbca63", "sha256": "4356e117f0a1514c3eb4d0ebc7f58ff8ca777723ad69a99bded2eaafaa3f5467" }, "downloads": -1, "filename": "django-analyze-0.4.14.tar.gz", "has_sig": false, "md5_digest": "a959ae873ad530d60dd4606c8dfbca63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 80718, "upload_time": "2014-06-26T13:49:54", "url": "https://files.pythonhosted.org/packages/52/11/c248ff7a6960320a8fd6723020d989e52ff32d413829c0e9f8491e178992/django-analyze-0.4.14.tar.gz" } ], "0.4.17": [ { "comment_text": "", "digests": { "md5": "4198710d95e971f8cb0cde3bccb9b8f0", "sha256": "81752eb32746419de4229eee09ac00437bb4e4add0a1cb6e0e5902e601c3b923" }, "downloads": -1, "filename": "django-analyze-0.4.17.tar.gz", "has_sig": false, "md5_digest": "4198710d95e971f8cb0cde3bccb9b8f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 81289, "upload_time": "2014-07-06T21:31:04", "url": "https://files.pythonhosted.org/packages/d3/15/63547b27c021928625da1d8f03015bbf60583e471cf224133b92b6995cf0/django-analyze-0.4.17.tar.gz" } ], "0.4.18": [ { "comment_text": "", "digests": { "md5": "2dfdd0fb15631ecbbe5bc253a6a04e75", "sha256": "0622b791c06c3fae3e5534429f92fe2f4736fc1127b713cf868794d8ce197e3b" }, "downloads": -1, "filename": "django-analyze-0.4.18.tar.gz", "has_sig": false, "md5_digest": "2dfdd0fb15631ecbbe5bc253a6a04e75", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 81783, "upload_time": "2014-07-07T06:20:30", "url": "https://files.pythonhosted.org/packages/e2/af/9f28c8eddd4f8191189b449bf1a0f4f56d43532be1d84b0edb16f2ddfb8f/django-analyze-0.4.18.tar.gz" } ], "0.4.19": [ { "comment_text": "", "digests": { "md5": "9f2a0ec97a8a40e10e27d4027c2a7110", "sha256": "b56cfd07429e0558e76ce54929fe160575e8d480ed54a9b3d80ffb25bd503d77" }, "downloads": -1, "filename": "django-analyze-0.4.19.tar.gz", "has_sig": false, "md5_digest": "9f2a0ec97a8a40e10e27d4027c2a7110", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 81853, "upload_time": "2014-07-07T06:37:17", "url": "https://files.pythonhosted.org/packages/76/a0/31d2bbf6274867dbfff46f41fa655f98069c311ed1a61e51926ce931e1dd/django-analyze-0.4.19.tar.gz" } ], "0.4.20": [ { "comment_text": "", "digests": { "md5": "8fafe6e3fd4a170c99ae700f6c2b6ec5", "sha256": "98d710232c2b0fc7ea06dd54e1673d1ce4daa841fa90c14629ec4f64cfa5096a" }, "downloads": -1, "filename": "django-analyze-0.4.20.tar.gz", "has_sig": false, "md5_digest": "8fafe6e3fd4a170c99ae700f6c2b6ec5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85408, "upload_time": "2014-07-07T13:20:40", "url": "https://files.pythonhosted.org/packages/a8/6d/11e21869d93e5c32d700467990d88c468a83e7f33a4c23b82073dcae84c0/django-analyze-0.4.20.tar.gz" } ], "0.4.21": [ { "comment_text": "", "digests": { "md5": "efe3bcbf81ff3a55a9470435d01ee277", "sha256": "e2820b175ef8c07ad9c0cb0f0a8aee543f3be537923f726e51be2743eaa5f97a" }, "downloads": -1, "filename": "django-analyze-0.4.21.tar.gz", "has_sig": false, "md5_digest": "efe3bcbf81ff3a55a9470435d01ee277", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85832, "upload_time": "2014-07-09T02:58:50", "url": "https://files.pythonhosted.org/packages/4f/53/f6db3d2f369143996b9bd94212a04f3331f46e4db55ae6096a082bcdb0c0/django-analyze-0.4.21.tar.gz" } ], "0.4.22": [ { "comment_text": "", "digests": { "md5": "80f60f41ebd57a2affc0cf21846c93ef", "sha256": "3308ffc6e58a55c48f6b8bc52e1a00c76ffec868943e674e5b2f548e1613763c" }, "downloads": -1, "filename": "django-analyze-0.4.22.tar.gz", "has_sig": false, "md5_digest": "80f60f41ebd57a2affc0cf21846c93ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85845, "upload_time": "2014-07-09T03:02:44", "url": "https://files.pythonhosted.org/packages/ea/be/ae38162261455a6c12e941884989d4fa3af8f59b9e8ae4c1c47dbcb283f3/django-analyze-0.4.22.tar.gz" } ], "0.4.23": [ { "comment_text": "", "digests": { "md5": "ddde24f14e59301002dd883ed9c7ec0c", "sha256": "d5f470adcbd1dd143dc591f651134e6d41fbade4e01982a8bb5275b18b273ed5" }, "downloads": -1, "filename": "django-analyze-0.4.23.tar.gz", "has_sig": false, "md5_digest": "ddde24f14e59301002dd883ed9c7ec0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85873, "upload_time": "2015-04-18T14:50:30", "url": "https://files.pythonhosted.org/packages/42/65/3524a7368f92f1ebcb0ecda693e51902ffea34d4b8e1f38388794a1a7290/django-analyze-0.4.23.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ddde24f14e59301002dd883ed9c7ec0c", "sha256": "d5f470adcbd1dd143dc591f651134e6d41fbade4e01982a8bb5275b18b273ed5" }, "downloads": -1, "filename": "django-analyze-0.4.23.tar.gz", "has_sig": false, "md5_digest": "ddde24f14e59301002dd883ed9c7ec0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85873, "upload_time": "2015-04-18T14:50:30", "url": "https://files.pythonhosted.org/packages/42/65/3524a7368f92f1ebcb0ecda693e51902ffea34d4b8e1f38388794a1a7290/django-analyze-0.4.23.tar.gz" } ] }