Git Product home page Git Product logo

cbdgen's Introduction

Complexity-based Dataset Generation

An Evolutionary Scalable Framework for Synthetic Data Generation based in Data Complexity.

🇬🇧 English - 🇧🇷 Português Brasileiro

cbdgen (Complexity-based Dataset Generation) is a software, currently in development to become a framework, that implements a many-objective algorithm to generate synthetic datasets from characteristics (complexities).

Requirements

Due to the actual state of the framework, a few steps are necessary/optional to run the framework. Here we list the requirements to run this project, as well as a few tutorials:

  1. Install R
  2. Install Python
  3. Python Environment (Optional)
  4. Setup cbdgen

Setting up

Install R packages

It is required ECoL package to correctly calculate data complexity, to do so you can use the following command:

./install_packages.r

If you've successfully installed R, this Rscript will work fine, but if you get any error using the R environment, Try Working with ECoL notebook to setup ECoL package with Python.

Install Python dependencies

Let's use pip to install our packages based on our requirements.txt.

pip install --upgrade pip
pip install -r requirements.txt

Now you're ready to Generate Synthetic Data!

Citation

@inproceedings{Pereira_A_Many-Objective_Optimization_2022,
author = {Pereira, Steffano X. and Miranda, Péricles B. C. and França, Thiago R. F. and Bastos-Filho, Carmelo J. A. and Si, Tapas},
booktitle = {2022 IEEE Latin American Conference on Computational Intelligence (LA-CCI)},
doi = {10.1109/la-cci54402.2022.9981848},
month = {11},
pages = {1--6},
title = {{A Many-Objective Optimization Approach to Generate Synthetic Datasets based on Real-World Classification Problems}},
year = {2022}
}

For more details, see CITATION.cff.

References

Lorena, A. C., Garcia, L. P. F., Lehmann, J., Souto, M. C. P., and Ho, T. K. (2019). How Complex Is Your Classification Problem?: A Survey on Measuring Classification Complexity. ACM Computing Surveys (CSUR), 52:1-34.

cbdgen's People

Contributors

dependabot[bot] avatar steffanop avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

cbdgen's Issues

Configurar argumentos de software por linha de comando

Descrição

Atualmente o software roda de forma interativa, de tal forma que, o usuário é perguntado quando e como deseja que o software se comporte, de tal forma que, o especialista configura os inputs do software de acordo com os resultados que ele deseja obter. Uma forma simples de configurar os inputs como distribuição, quantidade de atributos, quantidade de instâncias e classes, seria por meio da linha de comando como forma de argparser.

Objetivos

  • Possibilitar configurar os inputs por meio da linha de comando
    • Forma de distribuição
    • Quantidade de Instâncias
    • Quantidade de Atributos/Features
    • Quantidade de classes
  • Garantir a possibilidade de automação do software apenas pela linha de comando
  • Optar pelo setup do software de forma interativa ou por linha de comando
  • Configurar opções de pré-processamento

Improve the Generation of Synthetic Data

An important point that should be enhanced is to improve performance for the generation of Synthetic Data, as well as the development of this framework as a product ready to use for the community in areas such as generation of meta-bases based on Complexity Data, information hiding for Cybersecurity applications, correcting unbalanced datasets for classification and many others.

To achieve these, the following objectives should be met.

Objectives

  • #40
  • Adopt a Design Pattern based on OOP for frameworks
  • Create test cases and examples publicly available and easier to understand
  • Polish cbdgen as a package publicly available for the community

Normalizar e Escalar os valores de um novo dataset

Descrição

Ao gerar novos datasets, tomamos como base a criação de valores randomizados que seguem diversos padrões que já foram aderidos pelo framework, até o momento padrões de geração do sci-kit learn, todavia esses valores por muitas vezes não condizem exatamente com os valores de datasets reais.

Tome de fato o dataset iris, para este dataset temos 4 informações válidas para a classicação, que são o Sepal.Length, Sepal.Width, Petal.Length e Petal.Width. Para tal, faremos um sumário de cada atributo, vejamos:

##   Sepal.Length     Sepal.Width    Petal.Length     Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  

Observe que os valores obedecem o seguinte padrão de normalização do dataset e para tal, se queremos gerar um dataset sintético semelhante ao real, devemos observar a normalização dos valores de cada instância.

Objetivos

  • Gerar instâncias que obedeçam o valores de mínimo e máximo do dataset original;
  • Continuar Garantindo o RandomState para cada atributo;
  • Observar a eficiência da normalização;
  • Garantir a normalização e concordância do dataset sintético.

Referências

Modularizar o cálculo de complexidade

Descrição

Com o objetivo de simplificar o código principal do cbdgen-framework e de modularizar o código do mesmo, é interessante separar a forma como é realizado o cálculo de complexidade. No formato atual, o cálculo é realizado por meio do pacote ECoL que é um pacote em R; todavia é interessante se observar que se criarmos um módulo de cálculo de complexidade ECoL e implementar o cbdgen-framework para atuar de forma genérica, poderemos implementar quaisquer pacotes que calculem complexidade e independer do pacote ECoL.

Objetivos

  • Criar um módulo de cálculo de complexidade com o pacote ECoL
  • Implementar ao core uma forma de calcular a complexidade como um objeto (ou de maneira genérica)
  • Tornar o core independente do pacote que calcula a complexidade

Improper behavior when optimizing for critical conditions

Description

Improper behavior when optimizing for critical conditions, such as critical hardness on feature-based and neighborhood measures (F2: > 0,5; N1: > 0,5). Due to the generational process, the algorithm tends to optimize to the worst case scenario, whereas the fitness function brokes itself.

Fix Broken requirements

A opção de instalação de um ambiente virtual (venv) está quebrada, em especial com a falta de alguns pacotes cruciais para o desenvolvimento do software. É necessário investigar e analisar em específico os pacotes que estão quebrados.

Implement multiple ways to extract complexity measures

Description

Although ECoL presents multiple ways to extract multiple measures, these methods are not used in this code. Being able to handle multiple ways to extract data complexity measures enhance this code as a package to assess ECoL package in the Python language, and might help others in the future.

Objectives

  • Create a method to extract all measures from a dataset
  • Create a method to extract a list of measures from multiple subgroups
  • Implement extraction of multiple measures for subgroups

Originally posted by @SteffanoP in #28 (comment)

Selecionar as métricas para o cálculo de complexidade

Descrição

É de extrema necessidade que possamos separar com um maior critério as medidas de complexidade que o framework possa trabalhar, até o momento foram utilizadas diversas métricas, porém sem grandes fundamentos sobre o por quê de tal uso e também dos critérios implementação, visto que, diversas métricas apresentam um vetor de valores e esse vetor não é estudado no momento do cálculo.

Objetivos

  • Selecionar 6 métricas
  • Usar 4 combinações das métricas

Complexidades em potencial

  • C2
  • N1
  • L2
  • F2
  • N2
  • T1

Desacoplar o software para uma arquitetura específica

Descrição

Desacoplar o software é uma forma de simplificar a estrutura de código, facilitando o entendimento e a implementação de novas funcionalidades.

Objetivos

  • Montar uma arquitetura de implementação eficiente;
  • Desacoplar o código main para manter uma estrutura mínima;
  • Criar e Garantir o mesmo desempenho do software.

Tasklist

Extrair os valores de complexidade para qualquer dataset

Descrição

Após a implementação #4, o objetivo de Extrair os valores de complexidade para qualquer dataset ficou em aberto e deve ser resolvido. Essa Issue é necessária para estabelecer uma regra de como obter os atributos do dataset original, visto que, cada dataset possuí seus atributos únicos, logo é de grande importância a leitura genérica desses atributos.

Objetivos

  • Reestruturar o código para obter os atributos do dataset original
  • Extrair os valores de complexidade para os atributos genéricos.

Improve Extraction Performance

Lately, Complexity Data has becoming an advanced concept for the evaluation of Data sets, as such, one of best implementations is lpfgarcia/ECoL, which made the work of Lorena et. al. (2019) publicly available for implementations.

Following the work of Lorena, We followed a new line of research by generating synthetic data based on complexity data, by using ECoL package, although written in R, we've used a converter to implement in ECoL in python. That was a really good workaround, and we've made a few results; but still, Could we do even better than what ECoL has to offer?

Reestruturar a visualização de dados

Descrição

É de extrema necessidade a reestruturação da visualização de dados no software, principalmente para demonstrar os resultados da geração de datasets sintéticos e a eficiência na geração do dataset sintético.

Objetivos

  • Plotar o dataset original
  • Plotar o dataset gerado
  • Plotar o gráfico de eficiência da geração

Módulo Extrator de Complexidade

Descrição

Para extrair valores de complexidade de um data-set é necessário um processo chamado de extração de complexidade, nesse processo as complexidades escolhidas são extraídas de um data-set e irão alimentar (input) a Search-Engine como os objetivos do algoritmo genético.

Objetivos

  • Criar o módulo Extrator de Complexidades;
  • Desacoplar o processo de extração de complexidades do código main;
  • Documentar os conceitos de extração para cada medida de complexidade adotada pelo framework.
  • Forma Robusta de extrair complexidades para outros modulos, por exemplo, a extração de propriedades de datasets reais (#24 (comment))

Módulo Gerador de Instâncias

Descrição

Um módulo gerador de instâncias é necessário para alimentar a Search-Engine com um data-set inicial e suas respectivas propriedades. As propriedades necessárias para esse processo são: o número de instâncias, atributos e classes.

Objetivos

  • Criar o módulo gerador de instâncias;
  • Desacoplar a geração de instâncias do código main;
  • Garantir a criação de datasets baseados em datasets reais;
  • Documentar os conceitos de geração de instâncias.
  • Garantir uma opção para obter o PATH de um dataset local, quando necessário. (Original de #21)

Estruturar o código para gerar datasets sintéticos com mais de 2 atributos

Descrição

É necessário gerar datasets sintéticos com muito mais que 2 atributos, atualmente estamos visando gerar datasets sintéticos para diversos datasets, então seria necessário trabalhar com atributos semelhantes ao original.

Objetivos

  • Refatorar o processo de geração de datasets;
  • Gerar datasets sintéticos com a preferência de atributos;
  • Obter os atributos de um dataset para gerar em um novo dataset sintético.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.