{"id":21625602,"url":"https://github.com/eljandoubi/genre_classification","last_synced_at":"2026-04-11T05:33:19.995Z","repository":{"id":192208538,"uuid":"684619831","full_name":"eljandoubi/genre_classification","owner":"eljandoubi","description":"Create an ML pipeline for Genre Classification using MLflow.","archived":false,"fork":false,"pushed_at":"2023-09-03T11:34:15.000Z","size":59,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-11T04:37:23.816Z","etag":null,"topics":["hydra","machine-learning","mlflow","numpy","pandas","pandas-profiling","pytest","scikit-learn","scipy","wandb"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eljandoubi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-08-29T14:07:15.000Z","updated_at":"2024-08-26T00:50:59.000Z","dependencies_parsed_at":"2023-09-03T11:47:05.791Z","dependency_job_id":null,"html_url":"https://github.com/eljandoubi/genre_classification","commit_stats":{"total_commits":25,"total_committers":2,"mean_commits":12.5,"dds":0.07999999999999996,"last_synced_commit":"b1df2b009059c4f579baf8881c43129c1a80543a"},"previous_names":["eljandoubi/genre_classification"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/eljandoubi/genre_classification","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eljandoubi%2Fgenre_classification","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eljandoubi%2Fgenre_classification/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eljandoubi%2Fgenre_classification/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eljandoubi%2Fgenre_classification/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eljandoubi","download_url":"https://codeload.github.com/eljandoubi/genre_classification/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eljandoubi%2Fgenre_classification/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31669933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hydra","machine-learning","mlflow","numpy","pandas","pandas-profiling","pytest","scikit-learn","scipy","wandb"],"created_at":"2024-11-25T01:09:47.596Z","updated_at":"2026-04-11T05:33:19.961Z","avatar_url":"https://github.com/eljandoubi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# genre_classification\nThe primary objective of this project is to develop a machine learning pipeline capable of accurately classifying the genre of songs.\n\n## Table of contents\n\n- [Introduction](#genre_classification)\n- [Preliminary steps](#preliminary-steps)\n  * [Clone repository](clone-repository)\n  * [Create environment](#create-environment)\n  * [Get API key for Weights and Biases](#get-api-key-for-weights-and-biases)\n  * [The configuration](#the-configuration)\n  * [Running the entire pipeline or just a selection of steps](#Running-the-entire-pipeline-or-just-a-selection-of-steps)\n- [Licence](#license)\n \n## Preliminary steps\n### Clone repository\n\nClone the repository locally so you can start working on it:\n\n```\ngit clone https://github.com/eljandoubi/genre_classification.git\n```\n\nand go into the repository:\n\n```\ncd genre_classification\n```\n\n### Create environment\nMake sure to have conda installed and ready, then create a new environment using the ``environment.yml``\nfile provided in the root of the repository and activate it:\n\n```bash\n\u003e conda env create -f environment.yml\n\u003e conda activate genre_classification\n```\n\n### Get API key for Weights and Biases\nLet's make sure we are logged in to Weights \u0026 Biases. Get your API key from W\u0026B by going to \n[https://wandb.ai/authorize](https://wandb.ai/authorize) and click on the + icon (copy to clipboard), \nthen paste your key into this command:\n\n```bash\n\u003e wandb login [your API key]\n```\n\nYou should see a message similar to:\n```\nwandb: Appending key for api.wandb.ai to your netrc file: /home/[your username]/.netrc\n```\n### The configuration\nAs usual, the parameters controlling the pipeline are defined in the ``config.yaml`` file defined in\nthe root. We will use Hydra to manage this configuration file. \nOpen this file and get familiar with its content. Remember: this file is only read by the ``main.py`` script \n(i.e., the pipeline) and its content is\navailable with the ``go`` function in ``main.py`` as the ``config`` dictionary. For example,\nthe name of the project is contained in the ``project_name`` key under the ``main`` section in\nthe configuration file. It can be accessed from the ``go`` function as \n``config[\"main\"][\"project_name\"]``.\n\nNOTE: do NOT hardcode any parameter when writing the pipeline. All the parameters should be \naccessed from the configuration file.\n\n### Running the entire pipeline or just a selection of steps\nIn order to run the pipeline when you are developing, you need to be in the root of the starter kit, \nthen you can execute as usual:\n\n```bash\n\u003e  mlflow run .\n```\nThis will run the entire pipeline.\n\nWhen developing it is useful to be able to run one step at the time. Say you want to run only\nthe ``download`` step. The `main.py` is written so that the steps are defined at the top of the file, in the \n``_steps`` list, and can be selected by using the `steps` parameter on the command line:\n\n```bash\n\u003e mlflow run . -P steps=download\n```\nIf you want to run the ``download`` and the ``basic_cleaning`` steps, you can similarly do:\n```bash\n\u003e mlflow run . -P steps=download,preprocess\n```\nYou can override any other parameter in the configuration file using the Hydra syntax, by\nproviding it as a ``hydra_options`` parameter. For example, say that we want to set the parameter\nrandom_forest_pipeline -\u003e random_forest -\u003e n_estimators to 10:\n\n```bash\n\u003e mlflow run . \\\n  -P hydra_options=\"random_forest_pipeline.random_forest.n_estimators=10\"\n```\n\nTo enable parallel hyperparameter optimization, you should execute the following:\n\n```bash\n\u003e mlflow run . \\\n  -P hydra_options=\"-m random_forest_pipeline.random_forest.max_depth=range(10,50,3) random_forest_pipeline.tfidf.max_features=range(50,200,50) hydra/launcher=joblib\"\n```\n## License\nDistributed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) License. See ```LICENSE``` for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feljandoubi%2Fgenre_classification","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feljandoubi%2Fgenre_classification","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feljandoubi%2Fgenre_classification/lists"}