{"id":18869226,"url":"https://github.com/aasjunior/mlapp-api","last_synced_at":"2026-05-09T00:12:40.470Z","repository":{"id":242808140,"uuid":"810575994","full_name":"aasjunior/mlapp-api","owner":"aasjunior","description":"Esta API fornece endpoints para aplicar algoritmos de aprendizado de máquina, como K-Nearest Neighbors (KNN), Árvore de Decisão e Algoritmo Genético. Realizado como tarefa da disciplina de Laboratório Mobile/Computação Natural no 5º Semestre de Desenvolvimento de Software Multiplataforma.","archived":false,"fork":false,"pushed_at":"2024-08-13T19:42:27.000Z","size":532,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-30T23:32:27.879Z","etag":null,"topics":["fastapi","machine-learning","python","scikit-learn"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aasjunior.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-05T01:01:29.000Z","updated_at":"2024-08-13T19:42:30.000Z","dependencies_parsed_at":"2024-06-15T00:40:09.025Z","dependency_job_id":"d8c8d4e7-72c1-48f5-a2d9-5a913a5e0c8c","html_url":"https://github.com/aasjunior/mlapp-api","commit_stats":null,"previous_names":["aasjunior/mlapp-api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aasjunior%2Fmlapp-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aasjunior%2Fmlapp-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aasjunior%2Fmlapp-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aasjunior%2Fmlapp-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aasjunior","download_url":"https://codeload.github.com/aasjunior/mlapp-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239816510,"owners_count":19701753,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["fastapi","machine-learning","python","scikit-learn"],"created_at":"2024-11-08T05:16:12.245Z","updated_at":"2026-02-14T05:30:17.880Z","avatar_url":"https://github.com/aasjunior.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Algoritimos de Aprendizado de Máquina - FastAPI\n\nEsta API fornece endpoints para aplicar algoritmos de aprendizado de máquina, como K-Nearest Neighbors (KNN), Árvore de Decisão e Algoritmo Genético. Os endpoints aceitam arquivos CSV como entrada e retornam várias métricas e resultados da execução do algoritmo.\n\n##### Aplicação Mobile: \u003ca href='https://github.com/aasjunior/MachineLearningApp'\u003eMachineLearningApp\u003c/a\u003e\n\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n   \u003cimg src=\"https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54\" /\u003e\n   \u003cimg src=\"https://img.shields.io/badge/FastAPI-005571?style=for-the-badge\u0026logo=fastapi\" alt=\"FastAPI\"/\u003e\n   \u003cimg src=\"https://img.shields.io/badge/Scikit_Learn-F7931E?style=for-the-badge\u0026logo=scikit-learn\u0026logoColor=white\" alt=\"Scikit-Learn\"/\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n### Dependências\nO projeto usa as seguintes bibliotecas:\n\n- FastAPI\n- pandas\n- scikit-learn\n- matplotlib\n- joblib\n- pydantic\n\n\u003cbr\u003e\n\n## Iniciando o projeto\n\n###### Requisitos de Software\n\n- Python\n- VSCode\n  \n### Instalação\n\n1. Clone o repositório para o seu computador:\n\n```\ngit clone https://github.com/aasjunior/mlapp-api.git\n```\n\n2. Abra o projeto pelo VSCode e execute o comando pelo terminal: \n\n```\npip install -r requirements.txt\n```\n\n3. Navegue até o diretório `app` e execute:\n\n```\npython -m uvicorn main:app --reload\n```\n4. A API estará rodando em:\n```\nhttp://127.0.0.1:8000\n```\n\u003cbr\u003e\n\n## Endpoints\n\n### 1. K-Nearest Neighbors (KNN)\n\n```python\ndef apply_knn(X: DataFrame, y: Series, test_size=0.3, train_size=0.7, n_neighbors=3):\n    try:\n        if not is_normalized(X):\n            print('\\nis not normalized\\n')\n            X, y = normalize_data(X, y)\n\n        X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=test_size, train_size=train_size)\n\n        knn = KNeighborsClassifier(n_neighbors)\n        knn.fit(X_train, Y_train)\n\n        predictions = knn.predict(X_test)\n        accuracy = accuracy_score(Y_test, predictions) * 100\n    \n        return  '%.2f%%' % accuracy\n    \n    except Exception as e:\n        raise Exception('\\nOcorreu um erro na execução do Knn:\\n{e}\\n')\n```\n\n**POST /knn**\n\n- **Descrição**: Aplica o algoritmo KNN no dataset fornecido.\n- **Requisição**:\n\n    - `DataScheme` (Corpo JSON): Contém os cabeçalhos dos atributos e a classe.\n    - `file` (UploadFile): Um arquivo CSV contendo o dataset.\n\n- **Resposta**:\n    - `number_of_examples`: Número de exemplos no dataset.\n    - `number_of_classes`: Número de classes únicas no dataset.\n    - `number_of_attributes`: Número de atributos usados para predição.\n    - `accuracy`: Precisão do algoritmo KNN.\n\n**Exemplo de Requisição com `multipart/form-data`**\n\nAo fazer a requisição, você deve enviar o arquivo CSV e o JSON com o esquema de dados. Um exemplo utilizando `curl`:\n\n```bash\ncurl -X POST \"http://127.0.0.1:8000/knn\" \\\n-H \"accept: application/json\" \\\n-H \"Content-Type: multipart/form-data\" \\\n-F \"file=@app/assets/db/iris.csv\" \\\n-F 'data={\"attributeHeaders\":[\"sepal_length\", \"sepal_width\", \"petal_length\", \"petal_width\"], \"classHeader\":\"class\"}'\n```\n\n**Exemplo de Resposta:**\n\n```json\n{\n  \"number_of_examples\": 150,\n  \"number_of_classes\": 3,\n  \"number_of_attributes\": 4,\n  \"accuracy\": \"96.67%\"\n}\n```\n\n\u003cbr\u003e\n\n### 2. Testar KNN\n\n**GET /test-knn**\n\n- **Descrição**: Testa o algoritmo KNN usando um dataset pré-definido (dataset Iris).\n\n- **Resposta**:\n\n    - `number_of_examples`: Número de exemplos no dataset.\n    - `number_of_classes`: Número de classes únicas no dataset.\n    - `number_of_attributes`: Número de atributos usados para predição.\n    - `accuracy`: Precisão do algoritmo KNN.\n\n**Exemplo de Resposta:**\n\n```json\n{\n  \"number_of_examples\": 150,\n  \"number_of_classes\": 3,\n  \"number_of_attributes\": 4,\n  \"accuracy\": \"96.67%\"\n}\n```\n\n\u003cbr\u003e\n\n### 3. Árvore de Decisão\n\n```python\ndef apply_decision_tree(X: DataFrame, y: Series, test_size=0.3, train_size=0.7):\n    try:\n        X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=test_size, train_size=train_size)\n\n        dt_classifier = DecisionTreeClassifier()\n        dt_classifier.fit(X_train, Y_train)\n\n        predictions = dt_classifier.predict(X_test)\n        accuracy = accuracy_score(Y_test, predictions) * 100\n\n        fig_src = plot_decision_tree(dt_classifier)\n        model_image_base64 = get_image_base64(fig_src)\n       \n        model_info = {\n            'accuracy': '%.2f%%' % accuracy,\n            'model_image': model_image_base64\n        }\n\n        return model_info\n    \n    except Exception as e:\n        raise Exception(f'\\nOcorreu um erro na execução da arvore de decisão:\\n{e}\\n')\n```\n\n**POST /decision-tree**\n\n- **Descrição**: Aplica o algoritmo de Árvore de Decisão no dataset fornecido.\n- **Requisição**:\n  - `DataScheme` (Corpo JSON): Contém os cabeçalhos dos atributos e a classe.\n  - `file` (UploadFile): Um arquivo CSV contendo o dataset.\n\n**Exemplo de Requisição com multipart/form-data**\n\n```bash\ncurl -X POST \"http://127.0.0.1:8000/decision-tree\" \\\n-H \"accept: application/json\" \\\n-H \"Content-Type: multipart/form-data\" \\\n-F \"file=@app/assets/db/iris.csv\" \\\n-F 'data={\"attributeHeaders\":[\"sepal_length\", \"sepal_width\", \"petal_length\", \"petal_width\"], \"classHeader\":\"class\"}'\n```\n\n**Exemplo de Resposta:**\n\n```json\n{\n  \"result\": {\n    \"number_of_examples\": 150,\n    \"number_of_classes\": 3,\n    \"number_of_attributes\": 4,\n    \"model_info\": {\n      \"accuracy\": \"96.67%\",\n      \"model_image\": \"base64_encoded_image\"\n    }\n  }\n}\n```\n\n\u003cbr\u003e\n\n### 4. Testar Árvore de Decisão\n\n**GET /test-decision-tree**\n\n- **Descrição**: Testa o algoritmo de Árvore de Decisão usando um dataset pré-definido (dataset Iris).\n- **Resposta**:\n  - `number_of_examples`: Número de exemplos no dataset.\n  - `number_of_classes`: Número de classes únicas no dataset.\n  - `number_of_attributes`: Número de atributos usados para predição.\n  - `model_info`: Detalhes do modelo, incluindo precisão e imagem do modelo.\n\n**Exemplo de Resposta:**\n\n```json\n{\n  \"number_of_examples\": 150,\n  \"number_of_classes\": 3,\n  \"number_of_attributes\": 4,\n  \"model_info\": {\n    \"accuracy\": \"96.67%\",\n    \"model_image\": \"base64_encoded_image\"\n  }\n}\n\n```\n\n\u003cbr\u003e\n\n### 5. Algoritmo Genético\n\n```python\ndef apply_genetic_algorithm(for_max: bool = False):\n    try:\n        size = np.random.randint(20, 101)\n        n_childrens = int(0.7 * size)\n        n_generations = 10\n\n        if for_max:\n            fig_fitness, fig_evolution = version_max(size, n_childrens, n_generations)\n            fitness = 'maximizar z = e ^ -(x² + y²)'\n\n        else:\n            fig_fitness, fig_evolution = version_min(size, n_childrens, n_generations)\n            fitness = 'minimizar z = 20 + x² + y² - 10 * (cos(2πx) + cos(2πy))'\n\n        return {\n            'size': size,\n            'n_childrens': n_childrens,\n            'n_generations': n_generations,\n            'fitness': fitness,\n            'plot_images': {\n                'plot_fitness': get_image_base64(fig_fitness),\n                'plot_evolution': get_image_base64(fig_evolution)\n            }\n        }\n\n    except Exception as e:\n        raise Exception(f'\\nOcorreu um erro na execução do algoritmo genéetico:\\n{e}\\n')\n```\n\n**GET /genetic-algorithm**\n\n- **Descrição**: Aplica o Algoritmo Genético e retorna o resultado.\n- **Resposta**:\n  - `size`: Tamanho da população.\n  - `n_childrens`: Número de filhos em cada geração.\n  - `n_generations`: Número de gerações.\n  - `fitness`: Função de aptidão usada.\n  - `plot_images`: Imagens dos gráficos de aptidão e evolução codificadas em base64.\n\n**Exemplo de Resposta:**\n\n```json\n{\n  \"size\": 50,\n  \"n_childrens\": 35,\n  \"n_generations\": 10,\n  \"fitness\": \"minimizar z = 20 + x² + y² - 10 * (cos(2πx) + cos(2πy))\",\n  \"plot_images\": {\n    \"plot_fitness\": \"base64_encoded_image\",\n    \"plot_evolution\": \"base64_encoded_image\"\n  }\n}\n```\n\n\u003cbr\u003e\n\n## Tratamento de Erros\n\nEm caso de erros durante a execução dos algoritmos, a API retorna um código de status HTTP 400 juntamente com os detalhes do erro.\n\n**Exemplo de Resposta de Erro:**\n\n```json\n{\n  \"detail\": \"Mensagem de erro\"\n}\n```\n\n\u003cbr\u003e\n\n### Notas\n\n- Os endpoints que requerem uploads de arquivos esperam que o arquivo esteja em formato CSV.\n\n- Os endpoints /test-knn e /test-decision-tree utilizam um dataset pré-definido localizado em assets/db/iris.csv.\n\n- Os gráficos do algoritmo genético são retornados como strings codificadas em base64.\n\n##\n###### Aviso\nEste é um trabalho acadêmico realizado como tarefa da disciplina de Laboratório Mobile/Computação Natural no 5º Semestre de Desenvolvimento de Software Multiplataforma\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faasjunior%2Fmlapp-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faasjunior%2Fmlapp-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faasjunior%2Fmlapp-api/lists"}