This package allow to minimize the output from a given Decision Tree.


License
MPL-2.0
Install
pip install mindt-Selino==0.1.2

Documentation

minDt

A ferramenta de código aberto que permite mellorar a explicabilidade das saídas das árbores de decisión. Está basada no algoritmo de Quine-McCluskey, representando os camiños dunha árbore de decisión como implicantes de intervalos de valores.

Estrutura do repositorio

  • /src: aquí atópase o código fonte da ferramenta. Atopamonos con dúas implementacións, onde a segunda representa unha optimización da primeira.
  • /tests: aquí atópanse exemplos de árbores reais e sintéticos que se usaron durante o desenvolvemento para probar o funcionamento do código. Tamén se inclúen unha implementación do algoritmo en prolog e diversos scripts de bash para comparar os tempos de execución das implementacións. Tamén hai algúns scripts usados para xerar .csv cos tempos e a construcción e gráficas.

Instalación

O paquete atópase dispoñible en Pypi polo que, para a súa instalación, sería suficiente con executar o siguiente comando.

pip install mindt-Selino

Para o uso do código en si, é suficiente con ter instalado Python >3.8. Se se quere indagar nas probas de tempos e demais, hai máis dependencias que se deberían instalar como seaborn, numpy ou pandas.

Formato de entrada

A entrada da ferramenta para poder minimizar unha árbore ten que respetar o seguinte formato:

3
100
100
100
50 100 0 50 50 100 
0 100 50 100 50 100 
50 100 50 100 0 50 
50 100 0 100 50 100 
50 100 50 100 50 100 

Onde a primeira liña representa o número de variables. As n seguintes o valor máximo da variable (supoñendo que o valor mínimo é cero) e as restantes todos as regras que clasifican nunha mesma instancia. Pódese tamén pasar un valor mínimo para cada variable. O funcionamento está pensado para árbores binarias, polo cal, os implicantes poderían representar unha clase ou a outra pero non as dúas. Cada un dos implicantes ven dado por parellas de valores que representan os intervalos de cada variable nesa solución. Se a variable non aparece nesa regra, o intervalo vai ser o valor mínimo e máximo da variable.

Exemplos de uso

Neste apartado inclúense dous pequenos scripts de exemplo para poder probar a ferramenta. Este código pódese atopar na carpeta tests nos ficheiros testMinimization.py e testOptimized.py.

from mindt_Selino.dtMinimisation import DtMinimisation

minimization = DtMinimisation("tests/test2/GeneratedExamples/ex.5_3_10")

minimization.printInput()
minimization.printStaggeredInput()
minimization.printOutput()

minimization.saveOutputInFile("output.txt")

Neste primeiro caso estamos minimizando un dos exemplos sintéticos, onde o ficheiro está no formato de entrada especificado e facemos uso das función da clase DtMinimization para ir imprimindo o conxunto de regras según van pasando fases da execución. Tamén se pode usar a saída, representada como unha lista de implicantes. Finalmente gardase a saída no path que se lle pasa como parámetro.

Con só crear unha instancia, o proceso de minimización xa comeza automaticamente.

from mindt_Selino.dtMinOptimized import DtMinOptimized

minimization = DtMinOptimized("tests/test2/GeneratedExamples/ex.5_3_10")

minimization.printInput()
minimization.printStaggeredInput()
minimization.printOutput()

minimization.saveOutputInFile("output.txt")

O mesmo pero para un intento de optimización do código que non funcionou como se esperaba.

Licenza

Este proxecto atópase baixo a licenza de código aberto Mozilla. Véxase LICENSE.