-
Download WEKA para distribuição adequada.
-
Instale o wekaPython.
- GUI
- Tools -> Package Manager
- Busque por
wekaPython
-> instale o package (não confundir com WekaPyScript). - Busque por
netlib
-> instale o package adequado ao seu sistema.
- Busque por
- Tools -> Package Manager
- Command line
./weka.sh -main weka.core.WekaPackageManager -install-package netlibNativeLinux
(ou outro caso seja outro SO lista aqui)./weka.sh -main weka.core.WekaPackageManager -install-package wekaPython
- GUI
-
Instalação de packages adicionais:
pip install numpy pandas matplotlib scikit-learn xgboost
-
Instale BLAS/LAPACK.
- Linux
sudo apt-get install libblas-dev liblapack-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/libblas.so.3 /usr/lib/libblas.so.3
sudo ln -s /usr/lib/x86_64-linux-gnu/liblapack.so.3 /usr/lib/liblapack.so.3
- Windows
- Siga o guia.
- Obs: não testei para ver se esse guia é fácil de seguir.
- Linux
-
OPCIONAL: se quiser utilizar GPU:
-
instale CUDA.
- O link leva para um "menu" que você irá marcar as opções do seu sistema e escolher um método de instalação.
- Ao final você terá instruções de como instalar.
-
Copie o template do arquivo
nvblas.conf
para o diretório local sendo utilizado. -
Edite o arquivo
nvblas.conf
para que contenha:NVBLAS_CPU_BLAS_LIB=/usr/lib/x86_64-linux-gnu/blas/libblas.so.3
-
Crie variável de ambiente
LD_LIBRARY_PATH
:export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64:/usr/lib/x86_64-linux-gnu/blas/libblas.so.3
-
Adicione
LD_PRELOAD=libnvblas.so
no início de todos os comandos./weka.sh args
-
Datasets sugeridos para realização do profiling. Divididor em duas categorias:
- HIGGS: problema de classificação para detectar sinais que caracterizam bosons de Higgs. Possui 11m instâncias, 28 atributos (reais).
- Considerem utilizar apenas as primeiras 1m instâncias.
- Necessário pré-processamento, ver Preparação / Instalação.
- Covertype: dataset clássico para benchmarks. Problema de classificação multiclasse desbalanceado, 7 classes com diferentes proporções de instâncias. Representa imagens de 30m x 30m de florestas dos EUA. Cada classe corresponde a um tipo diferente. Contém 581k instâncias e 54 atributos.
- GMSC: problema de classificação para decidir se aprova ou não um empréstimo baseado em dados históricos de clientes que efetuaram empréstimos. Contém 150k instâncias e 10 atributos numéricos.
-
RandomRBF: gerador de dados numéricos que cria centros para cada classe. Os dados são gerados através de offsets destes centros utilizando equações Gaussianas. O link leva para o Javadoc desta classe.
- Comando/script para gerar:
create-RBF.sh
- Utilize opção -h para saber os argumentos possíveis.
- Comando/script para gerar:
-
RDG1: gerador de dados que utiliza uma lista de regras de decisão. Instâncias geradas uma a uma, através de regras de decisão que são adicionadas a uma lista. O link leva para o Javadoc desta classe.
- Comando/script para gerar:
create-RDG.sh
- Utilize opção -h para saber os argumentos possíveis.
- Comando/script para gerar:
Em todos exemplos de linha de comando, as $variaveis_de_ambiente
devem ser setadas pelo usuário.
O parâmetro n_jobs
funciona para qualquer algoritmo do scikit-learn
.
Ajuste o valor da opção -memory
para o seu hardware.
Nos comandos a seguir, a saída do algoritmo está sendo direcionada para um arquivo que possui as configurações do experimento identificadas pelo nome para que a análise pudesse ser feita mais tarde. As linhas de comando foram tiradas de um script utilizado "internamente" para coletar informações de speedup e outras métricas.
No caso do profile, provavelmente será necessário um controle mais rígido na hora de iniciar os experimentos. Fiquem à vontade para modificar.
-
- Sequencial com CV:
./weka.sh -memory 32g -main weka.Run weka.classifiers.sklearn.ScikitLearnClassifier -learner XGBClassifier -parameters "tree_method=\"hist\",n_jobs=1" -t $dataset -py-command python > $RESULT_DIR/XGB-$dataset-cpu-CV-1job
- Paralelo com 4 *threads e split 80/20 :
./weka.sh -memory 32g -main weka.Run weka.classifiers.sklearn.ScikitLearnClassifier -split-percentage 80 -v -learner XGBClassifier -parameters "tree_method=\"hist\",n_jobs=4" -t $dataset -py-command python > $RESULT_DIR/XGB-$dataset-cpu-CV-4jobs
- Utilizando GPU com split 80/20:
./weka.sh -memory 32g -main weka.Run weka.classifiers.sklearn.ScikitLearnClassifier -split-percentage 80 -v -learner XGBClassifier -parameters "tree_method=\"gpu_hist\"" -t $dataset -py-command python > $RESULT_DIR/XGB-$dataset-gpu-CV
- Sequencial com CV:
-
- Paralelo com 8 threads e split 80/20. Profundidade máxima das árvores=16.
./weka.sh -memory 32g -main weka.Run weka.classifiers.sklearn.ScikitLearnClassifier -split-percentage 80 -v -learner RandomForestClassifier -dont-fetch-model -parameters "max_depth=16,max_samples=1.0,n_jobs=8" -t $dataset -py-command python > $RESULT_DIR/RFC-$dataset-cpu-skl-noCV-8jobs
- Paralelo com 8 threads e split 80/20. Profundidade máxima das árvores=16.
-
- Sequencial com split 80/20
./weka.sh -memory 32g -main weka.Run weka.classifiers.sklearn.ScikitLearnClassifier -split-percentage 80 -v -dont-fetch-model -learner LinearRegression -t $dataset -py-command python > $RESULT_DIR/LR-$dataset-cpu-skl-noCV
- Sequencial com split 80/20
- Utilizar apenas as primeiras X linhas do dataset HIGGS
head -X HIGGS.csv > HIGGS_Xsamples.csv
, onde X é um inteiro.
- Converter CSV para ARFF
java -cp weka.jar weka.core.converters.CSVLoader nome.csv > nome.arff
- Converter ARFF para CSV
./weka.sh -main weka.Run .CSVSaver -i nome.arff -o nome.csv