Weka
Nesta seção:
Descrição
De acordo com a página do Weka, Weka é uma coleção de algoritmos de aprendizado de máquina para tarefas de mineração de dados. Contém ferramentas para preparação de dados, classificação, regressão, clustering, regras de associação e visualização.
Versões Disponíveis
weka/3.8.2 (default)
Carregando o Módulo
# Carregar Weka
module load weka/3.8.2
# Verificar instalação
weka -h
# Variáveis disponíveis
echo $CLASSPATH # Caminho para o weka.jar
Nota
Ao carregar o módulo Weka, o módulo java é automaticamente carregado e um atalho weka é criado para executar o programa.
Classificação
#!/bin/bash
#SBATCH -J weka_classify
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G
export INPUT="train.arff test.arff"
export OUTPUT="classification_results.txt"
module load weka/3.8.2
job-nanny weka weka.classifiers.trees.RandomForest \
-t train.arff -T test.arff -p 0 \
-I 100 -K 0 -S 1 > classification_results.txt
Regressão
#!/bin/bash
#SBATCH -J weka_regression
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G
export INPUT="data.arff"
export OUTPUT="regression_results.txt"
module load weka/3.8.2
job-nanny weka weka.classifiers.functions.SMOreg \
-t data.arff -T data.arff -c last \
-P 1.0E-12 -N 0 \
-I "weka.classifiers.functions.supportVector.RegSMOImproved" \
-L 1.0 -W 1 > regression_results.txt
Clustering
#!/bin/bash
#SBATCH -J weka_cluster
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 12:00:00
#SBATCH --mem=8G
export INPUT="data.arff"
export OUTPUT="clustering_results.txt"
module load weka/3.8.2
job-nanny weka weka.clusterers.SimpleKMeans \
-t data.arff -N 3 -A "weka.core.EuclideanDistance" \
-I 500 -S 10 > clustering_results.txt
Validação Cruzada
#!/bin/bash
#SBATCH -J weka_cv
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G
export INPUT="data.arff"
export OUTPUT="cv_results.txt"
module load weka/3.8.2
# 10-fold cross-validation
job-nanny weka weka.classifiers.trees.J48 \
-t data.arff -x 10 > cv_results.txt
Seleção de Atributos
#!/bin/bash
#SBATCH -J weka_attribute
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 12:00:00
#SBATCH --mem=8G
export INPUT="data.arff"
export OUTPUT="attribute_selection.txt"
module load weka/3.8.2
# Seleção de atributos com InfoGain
job-nanny weka weka.attributeSelection.InfoGainAttributeEval \
-i data.arff > attribute_selection.txt
# Com busca exaustiva
job-nanny weka weka.attributeSelection.CfsSubsetEval \
-s "weka.attributeSelection.BestFirst -D 1 -N 5" \
-i data.arff > cfs_selection.txt
Job Array para Múltiplos Algoritmos
#!/bin/bash
#SBATCH -J weka_array
#SBATCH --array=1-5
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G
ALGORITHMS=(
"weka.classifiers.trees.J48"
"weka.classifiers.trees.RandomForest"
"weka.classifiers.bayes.NaiveBayes"
"weka.classifiers.functions.SMO"
"weka.classifiers.lazy.IBk"
)
ALG=${ALGORITHMS[$SLURM_ARRAY_TASK_ID-1]}
ALG_NAME=$(basename $ALG)
export INPUT="data.arff"
export OUTPUT="results_${ALG_NAME}/"
module load weka/3.8.2
mkdir -p results_${ALG_NAME}
job-nanny weka $ALG -t data.arff -x 10 \
> results_${ALG_NAME}/cv_results.txt
job-nanny weka $ALG -t data.arff -T test.arff -p 0 \
> results_${ALG_NAME}/predictions.txt
Otimização de Hiperparâmetros
#!/bin/bash
#SBATCH -J weka_tune
#SBATCH --array=1-10
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G
# Grid search para RandomForest
ITERATIONS=(10 50 100 150 200 250 300 350 400 450)
ITER=${ITERATIONS[$SLURM_ARRAY_TASK_ID-1]}
export INPUT="data.arff"
export OUTPUT="rf_iter_${ITER}/"
module load weka/3.8.2
mkdir -p rf_iter_${ITER}
job-nanny weka weka.classifiers.trees.RandomForest \
-t data.arff -x 10 -I $ITER -K 0 -S 1 \
> rf_iter_${ITER}/cv_results.txt
# Extrair acurácia
grep "Correctly Classified Instances" rf_iter_${ITER}/cv_results.txt \
>> rf_accuracy.txt
Análise de Resultados
#!/bin/bash
#SBATCH -J analyze_weka
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=2G
# Coletar resultados de validação cruzada
echo "Algoritmo,Acurácia" > summary.csv
for dir in results_*/; do
alg=$(basename $dir | sed 's/results_//')
acc=$(grep "Correctly Classified Instances" ${dir}cv_results.txt | \
awk '{print $5}' | sed 's/%//')
echo "$alg,$acc" >> summary.csv
done
# Plotar com Python
cat > plot_results.py << 'EOF'
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Ler resultados
df = pd.read_csv('summary.csv')
# Ordenar por acurácia
df = df.sort_values('Acurácia', ascending=False)
# Plotar
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='Algoritmo', y='Acurácia')
plt.xticks(rotation=45, ha='right')
plt.title('Comparação de algoritmos - Acurácia (10-fold CV)')
plt.tight_layout()
plt.savefig('algorithm_comparison.png')
EOF
python plot_results.py
Comandos Úteis
Comando |
Descrição |
|---|---|
|
Exibir ajuda |
|
Exibir opções de um classificador específico |
|
Abrir interface gráfica (requer ssh -X) |
Nota
Para usar a interface gráfica do Weka, conecte-se ao servidor com encaminhamento X11:
ssh -X usuario@access.grid.unesp.br
module load weka/3.8.2
weka weka.gui.GUIChooser
Referências
Documentação: https://waikato.github.io/weka-wiki/documentation/
Ver também
R - Análise estatística
Python Runtime Services - Scikit-learn
Processando Simulações - Como submeter jobs