• Nenhum resultado encontrado

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

Documentos relacionados