4.4 O problema de desequilíbrio de classes
4.4.1 Oversampling
Oversamplingpode ser definido como uma técnica em que são adicionados mais cópias de amostras à classes minoritárias.
Para aplicar esta técnica, a bibliotecaimbalanced-learnpara linguagem Python disponibiliza diversos métodos para aplicar o Oversampling, tais como:
4.4 O problema de desequilíbrio de classes 31 • ADASYN • Random Oversampling • SMOTE • SMOTE-NC 4.4.2 Undersampling
Ao contrário do Oversampling o Undersampling remove algumas observações das classes maioritárias para balancear com as classes minoritárias.
A desvantagem em utilizar esta técnica é justamente ter de remover informações que podem ser importantes para o processo de aprendizado. Isto pode reduzir significativamente o conjunto de dados utilizado para testes e reduzir a qualidade do modelo preditivo.
A bibliotecaimbalanced-learnpara linguagem Python também disponibiliza diversos métodos para aplicar o Undersampling:
• Condensed Nearest Neighbour • Edited Nearest Neighbours
• Repeated Edited Nearest Neighbour • All KNN
• Instance Hardness Threshold • Near Miss
• Neighbourhood Cleaning Rule • One Sided Selection
• Random Under Sample • TomekLinks
4.4.3 Técnicas aplicadas
Em alguns casos, a utilização de técnicas de Oversampling e Undersampling foram testadas no conjunto de treinamento para o treinamento de um modelo preditivo.
As imagens 4.9 e 4.10 mostram respetivamente a distribuição de amostras por classes do campo Categoria após a utilização de Oversampling e Undersampling respetivamente. A ima- gem4.11mostra a distribuição original sem a aplicação de técnicas de redistribuição.
Os resultados finais de classificação utilizando as técnicas de redimensionamento de amostras por classes, são apresentados em5.4.9
Figura 4.9: Distribuição de amostras por classes de Categoria após a utilização de técnica de Oversampling
Figura 4.10: Distribuição de amostras por classes de Categoria após a utilização de técnica de Undersampling
4.4 O problema de desequilíbrio de classes 33
Capítulo 5
Modelação e Avaliação
Para treinar os modelos de classificação, a biblioteca SciKit-Learn para linguagem Python foi utilizada. Esta biblioteca possuí um conjunto de algoritmos e ferramentas que maximizam todo o processo de modelação e classificação em aprendizado de máquina (supervisionada e não supervisionada). [12]
Para este trabalho, três algoritmos diferentes de classificação supervisionada foram utilizados: Naive Bayes (descrito em3.4.1), Support Vector Machine SVM (descrito em3.4.2) e Random Forest (descrito em3.4.3).
Alguns modelos gerados por estes algoritmos tiveram resultados semelhantes uns aos outros, mas houve casos em que os algoritmos Naive Bayes e Random Forest conseguiram atingir re- sultados melhores, e isso, ficou ainda mais evidente ao utilizar a técnica de hiperparametrização, descrito em5.2.1. Por outro lado, o algoritmo SVM além de consumir mais recursos computacio- nais e por consequência ser mais demorado, teve os piores resultados.
5.1
Pipelines
Em trabalho de aprendizagem de máquina, são necessárias várias etapas de transformação, como codificação de variáveis, dimensionamento de recursos e normalização.
No entanto, em um fluxo típico de aprendizagem de máquina, será necessário aplicar todas estas transformações pelo menos duas vezes. 1) ao treinar o modelo e 2) ao testar o modelo.
Os pipelines para Scikit-learn são ferramentas feitas para simplificar este processo e foram utilizadas neste trabalho de forma a agilizar a construção dos algoritmos de classificação com seus diferentes parâmetros.[12] [13]
A figura5.1mostra a implementação de scikit-learn pipelines executando os métodos neces- sários para a construção dos classificadores utilizados neste trabalho.
Figura 5.1: Implementação de scikit-learn pipeline para algoritmos de classificação supervisio- nada
5.2
Cross validation
Em aprendizado supervisionado, é prática comum, reter parte do conjunto de dados como um conjunto de testes para avaliar a qualidade do classificador e evitar o chamado overfitting, ou seja, a condição onde um classificador consegue atingir um bom resultado com um conjunto de dados, mas não é capaz de prever outros dados com o mesmo sucesso.
Neste trabalho, para dividir os dados entre um conjunto de treinamento e um conjunto de testes de forma aleatória, a função do SciKit-Learn train_test_split foi utilizada.
O exemplo de implementação da função train_test_split para a coluna categoria é mostrado na figura5.2
A proporção utilizada entre dados para treinamento e dados para teste foi de 70/30 ou seja, 70% dos dados reservados para treinamento (a) e 30% para os testes (b).
5.2 Cross validation 37
Figura 5.2: A função train_test_split do Scikit-Learn
há o risco de overfitting. Para resolver isto, outra técnica normalmente é utilizada, a divisão do conjunto de dados em três subconjuntos: Treinamento, Validação e Teste.
Neste cenário, o treinamento prossegue utilizando o conjunto de dados de treinamento, mas a avaliação é feita utilizando o conjunto de dados de validação e quando tudo parecer bem, a avaliação final pode ser feita utilizando o conjunto de dados de testes. Desta forma, outro problema pode ocorrer: o número de amostras a serem utilizadas para aprendizagem do modelo é reduzido drasticamente.
Uma solução para este problema é o procedimento conhecido como Cross Validation (CV). Neste cenário, um conjunto de testes ainda deve ser oferecido para avaliação final, mas o conjunto de validação não é mais necessário.
K-fold é o método de cross validation mais conhecido e utilizado. Este método consiste em dividir o conjunto de dados em k partes, usando k-1 partes para treino e a porção remanescente em teste. Em cada uma das k vezes, testa-se o modelo com um fold diferente calculando a métrica escolhida para avaliação do modelo. Ao final do processo, teremos k medidas da métrica de avaliação escolhida.
A figura5.3mostra um fluxograma típico de cross validation no treinamento de modelo en- quanto a figura5.2mostra o processo de validação do modelo com k-fold.
Figura 5.4: Cross Validation - Avaliação de modelo
5.2.1 Grid Search
Hiperparâmetros são parâmetros que não são aprendidos automaticamente dentro dos algorit- mos de classificação. No scikit-learn eles são passados como argumentos para o construtor das classes dos classificadores. O conceito de hiperparametrização visa encontrar um conjunto de melhores hiperparâmetros para um algoritmo classificador.
O Grid Search é indiscutivelmente hoje, o método mais básico de ajuste de hiperparâme- tros. Com essa técnica, é possível construir um modelo para cada combinação possível de todos os valores de hiperparâmetro possíveis, avaliando e elegendo o modelo que atingiu os melhores resultados.
Duas abordagens genéricas de hiperparametrização com Grid Search estão disponíveis na bi- blioteca scikit-learn: o primeiro, é o método GridSearchCV que considera exaustivamente todas as combinações de parâmetros, e o segundo é o RandomizedSearchCV que pode demonstrar um determinado número de candidatos a partir de um espaço de parâmetros com uma distribuição especificada.
Para este trabalho, o GridSearchCV foi utilizado no treinamento de todos os modelos aborda- dos nos próximos capítulos. A figura5.5, mostra um exemplo de implementação de hiperparame- trização exaustiva para o classificador SVM utilizando o parâmetro C com os valores 1, 10, 100 e 1000 e o parâmetro Kernel com os valores ’linear’ e ’rbf’.
Os outros dois parâmetros cv e n_jobs utilizados na construção da classe GridSearchCV re- presentam respetivamente o número de vezes em que o conjunto de treinamento será dividido (k) e o uso ilimitado de todos os recursos computacionais para processamento. Se possível, a utilização
5.3 Especificações Técnicas 39
deste ultimo parâmetro é de extrema utilidade, uma vez que o processo de hiperparametrização e CV utilizam muitos recursos computacionais.
Figura 5.5: Exemplo de implementação de hiperparametrização com Grid Search
A figura5.6demonstra a saída gerada com a hiperparametrização mostrada no exemplo ante- rior.
Oito resultados foram exibidos (um para cada combinação de parâmetros), e a linha final, mostra o conjunto de parâmetros eleito (C: 1 e kernel: ’linaer) com o melhor score: 0.57.
Figura 5.6: Avaliação e eleição de hiperparâmetros com Grid Search e CV
5.3
Especificações Técnicas
As especificações técnicas do ambiente onde os treinamentos e avaliações foram realizadas são:
CPU: AMD A12-9720P, Quad Core, 3.60 GHz Memoria: 16 GB DDR4
Discos: 128 GB SSD + 1 TB HDD