Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
CV de 10.3 K-fold para Avaliação do Modelo (L10: Avaliação do Modelo 3)
CV de 10.3 K-fold para Avaliação do Modelo (L10: Avaliação do Modelo 3)
Neste vídeo, vamos nos aprofundar no tópico de validação cruzada para avaliação de modelos. A validação cruzada é comumente usada em conjunto com o ajuste de hiperparâmetros e a seleção de modelos. No entanto, para facilitar um melhor entendimento, vamos primeiro explorar como a validação cruzada k-fold funciona apenas no contexto da avaliação do modelo, antes de discutir sua aplicação na seleção do modelo.
Para começar, a validação cruzada k-fold para avaliação do modelo envolve a divisão de um conjunto de dados em uma dobra de validação e os segmentos de dados restantes para treinamento. Em um exemplo típico, vamos considerar a validação cruzada de cinco vezes. O conjunto de dados é dividido em uma dobra de validação (mostrada em azul) e quatro dobras de treinamento (mostradas em cores diferentes). O modelo é treinado nas dobras de treinamento e avaliado na dobra de validação, resultando em uma métrica de desempenho. Ao contrário do método de validação, onde apenas um conjunto de validação é usado, na validação cruzada k-fold, a dobra de validação é rotacionada por diferentes segmentos dos dados. Isso garante que todos os pontos de dados sejam utilizados para avaliação. No caso de validação cruzada de cinco vezes, existem cinco dobras de validação distintas e cinco iterações são realizadas. Cada iteração produz uma medida de desempenho. Ao relatar o desempenho geral, a abordagem típica é calcular a média dos valores de desempenho em todas as iterações.
É importante observar que nesta discussão, estamos focando na validação cruzada k-fold para avaliação do modelo, sem considerar o ajuste de hiperparâmetros. Nesse cenário, a estimativa de desempenho obtida por validação cruzada pode ser considerada uma estimativa do desempenho de generalização do modelo. Ao treinar um novo modelo em todo o conjunto de dados usando hiperparâmetros fixos, podemos obter um modelo final para uso prático. Embora um conjunto de teste independente possa ser usado para avaliar melhor o desempenho do modelo, muitas vezes é desnecessário quando nenhum ajuste de hiperparâmetro está envolvido, pois o desempenho da validação cruzada já fornece uma estimativa confiável do desempenho da generalização.
Agora, vamos explorar algumas propriedades importantes da validação cruzada k-fold. As dobras de validação não se sobrepõem, o que significa que não há sobreposição entre os pontos de dados na dobra de validação em diferentes iterações. Todos os pontos de dados são utilizados para testes, garantindo uma avaliação abrangente. Alguns pesquisadores podem se referir às dobras de validação como dobras de teste, pois os termos podem ser usados de forma intercambiável.
Por outro lado, as dobras de treinamento são sobrepostas, o que significa que não são independentes umas das outras. Em uma determinada iteração, os dados de treinamento podem ter amostras sobrepostas com os dados de treinamento de outras iterações. Essa característica torna desafiador estimar a variância com base em diferentes conjuntos de treinamento, o que é importante para entender a variabilidade de desempenho do modelo.
Outro aspecto digno de nota é que reduzir o valor de k (o número de dobras) torna a estimativa de desempenho mais pessimista. Isso ocorre porque, com menos pontos de dados disponíveis para treinamento em cada dobra, os recursos de ajuste do modelo são limitados. A estimativa de desempenho torna-se mais pessimista devido aos dados retidos, conforme discutido em nossa explicação anterior sobre pessimismo de desempenho.
Vamos explorar dois casos especiais de validação cruzada k-fold. Quando k é igual a 2, temos validação cruzada dupla, que é diferente do método holdout. Na validação cruzada dupla, o conjunto de dados é dividido exatamente ao meio e cada metade é usada para treinamento em diferentes iterações. Em contraste, o método de validação permite proporções de divisão arbitrárias e não envolve rotação entre as iterações. No entanto, cada rodada de validação cruzada k-fold pode ser considerada um caso especial do método de validação, em que o conjunto de dados é dividido exatamente em duas metades.
Outro caso especial é quando k é igual a n, resultando em validação cruzada leave-one-out (LOOCV). No LOOCV, cada iteração envolve deixar de fora um ponto de dados como o conjunto de validação, enquanto os n-1 pontos de dados restantes são usados para treinamento. Essa abordagem também é conhecida como LOOCV, em que o conjunto de validação consiste em apenas um ponto de dados.
Um estudo conduzido por Hawkins et al. (2003) examinou o desempenho de diferentes métodos de avaliação de modelo, incluindo validação cruzada leave-one-out (LOOCV), e descobriu que LOOCV tende a ter alta variância em comparação com outros métodos de validação cruzada. Essa alta variação pode ser atribuída ao fato de que cada dobra de validação no LOOCV consiste em apenas um ponto de dados, resultando em um tamanho de amostra limitado para avaliação. Consequentemente, as estimativas de desempenho obtidas do LOOCV podem ser altamente sensíveis aos pontos de dados específicos escolhidos para validação em cada iteração.
Apesar de sua alta variação, o LOOCV tem algumas vantagens. Como cada iteração envolve treinamento em n-1 pontos de dados, onde n é o número total de pontos de dados, o LOOCV tende a fornecer uma estimativa imparcial do desempenho do modelo. Além disso, o LOOCV utiliza todos os dados disponíveis para treinamento, o que pode ser benéfico quando o conjunto de dados é pequeno ou quando uma estimativa de desempenho mais precisa é desejada.
No entanto, devido à sua complexidade computacional, o LOOCV pode não ser viável para grandes conjuntos de dados. O processo de treinamento precisa ser repetido n vezes, resultando em uma carga computacional significativa. Em tais casos, a validação cruzada k-fold com um valor moderado de k é frequentemente preferida.
Agora que exploramos a validação cruzada k-fold para avaliação de modelos, vamos discutir brevemente sua aplicação na seleção de modelos. No contexto da seleção de modelos, o objetivo é identificar o melhor modelo de um conjunto de modelos candidatos, normalmente com diferentes configurações de hiperparâmetros. A validação cruzada pode ser usada para estimar o desempenho de cada modelo e facilitar o processo de seleção.
A abordagem típica é executar validação cruzada k-fold para cada modelo, calcular o desempenho médio em todas as iterações e comparar os resultados. O modelo com maior desempenho médio é considerado a melhor escolha. Essa abordagem ajuda a mitigar o impacto da variabilidade dos dados e fornece uma avaliação mais robusta dos modelos.
Para resumir, a validação cruzada é uma técnica valiosa para avaliação e seleção de modelos. Ao girar sistematicamente a dobra de validação por diferentes segmentos dos dados, permite uma avaliação abrangente e fornece estimativas do desempenho do modelo. Seja usada apenas para avaliação de modelos ou em combinação com a seleção de modelos, a validação cruzada ajuda pesquisadores e profissionais a tomar decisões informadas sobre os recursos de generalização de seus modelos.
CV de 10.4 K-fold para avaliação do modelo -- Exemplos de código (L10: Avaliação do modelo 3)
CV de 10.4 K-fold para avaliação do modelo -- Exemplos de código (L10: Avaliação do modelo 3)
No vídeo anterior, discutimos a validação cruzada k-fold como um método para avaliar modelos de aprendizado de máquina. Neste vídeo, exploraremos como implementar a validação cruzada k-fold em Python usando a biblioteca scikit-learn. Eu carreguei o notebook de código no GitHub e você pode encontrar o link aqui.
Vamos começar carregando as bibliotecas necessárias e verificando suas versões. Importaremos NumPy e matplotlib, que são bibliotecas comumente usadas. A seguir, demonstraremos o uso da validação cruzada k-fold usando a classe k-fold do submódulo de seleção de modelo no scikit-learn.
Para garantir a reprodutibilidade, definimos uma semente aleatória usando um objeto gerador de números aleatórios. Em seguida, criamos um conjunto de dados simples com cinco rótulos da Classe Zero e cinco rótulos da Classe Um. Além disso, geramos um conjunto de dados aleatório com 10 entradas e quatro recursos. Vale a pena notar que este é apenas um conjunto de dados aleatório para fins de ilustração e você pode usar qualquer conjunto de dados de sua preferência, como o conjunto de dados de íris.
Em seguida, inicializamos um objeto k-fold, que chamamos de cv (abreviação de validação cruzada). Definimos o número de divisões, n_splits, como cinco, indicando que realizaremos a validação cruzada de cinco vezes. Vamos examinar o comportamento desse objeto k-fold usando o método split. Quando executamos esse método, obtemos cinco resultados, cada um consistindo em uma tupla contendo dois arrays. A primeira matriz representa a dobra de treinamento e a segunda matriz representa a dobra de validação.
Os números dentro dessas matrizes correspondem aos índices das amostras no conjunto de dados. Por exemplo, se quisermos obter os rótulos reais correspondentes ao conjunto de treinamento da primeira dobra, podemos usar esses índices como uma matriz de índice para selecionar os rótulos. Da mesma forma, podemos selecionar os recursos correspondentes. É importante observar que os rótulos nas dobras de treinamento e validação podem estar desequilibrados, como observamos neste caso.
Para resolver esse problema, é recomendável embaralhar o conjunto de dados antes de executar a validação cruzada k-fold. Podemos conseguir isso embaralhando o conjunto de dados diretamente dentro do objeto k-fold durante a inicialização. Definindo um estado aleatório e embaralhando, obtemos uma melhor combinação de rótulos nas dobras de treinamento e validação.
Além disso, geralmente é aconselhável estratificar as divisões, garantindo que a proporção de rótulos de classe permaneça consistente em cada dobra. Podemos conseguir isso usando a classe k-fold estratificada em vez da classe k-fold regular. Quando usamos k-fold estratificado, a proporção de rótulos em cada dobra corresponde à do conjunto de dados original.
Tendo discutido o comportamento geral de objetos k-fold e estratificados k-fold, vamos ver como aplicá-los na prática. Usaremos um classificador de árvore de decisão e o conjunto de dados iris como exemplo. Primeiro, dividimos o conjunto de dados da íris em 85% de dados de treinamento e 15% de dados de teste usando o método train_test_split, que garante a divisão estratificada.
Em seguida, inicializamos um objeto k-fold estratificado com k = 10, conforme recomendado pelo artigo de Ron Kohavi sobre o guia prático para validação cruzada. Em seguida, empregamos uma abordagem manual para executar a validação cruzada k-fold iterando os índices de treinamento e validação usando o método split. Dentro de cada iteração, ajustamos um novo classificador de árvore de decisão usando a dobra de treinamento e prevemos os rótulos da dobra de validação. Calculamos a precisão de cada iteração e armazenamos os resultados em uma variável de espaço reservado.
Depois de iterar por todas as dobras, calculamos a precisão média da validação cruzada de k dobras dividindo a soma das precisões pelo número de iterações. Finalmente, para avaliar o modelo em dados não vistos, ajustamos um novo classificador de árvore de decisão usando todos os dados de treinamento e calculamos a precisão no conjunto de teste.
Nesse caso, obtivemos uma precisão de validação cruzada k-fold de 95,3% e uma precisão de conjunto de teste de 95%. Esses resultados sugerem que nosso modelo tem um bom desempenho nas dobras de validação cruzada e nos dados de teste não vistos.
No entanto, iterar manualmente sobre as dobras e os modelos de encaixe pode ser um pouco complicado. Felizmente, o scikit-learn fornece uma maneira mais conveniente de realizar validação cruzada k-fold usando a função cross_val_score. Essa função usa o modelo, o conjunto de dados e o número de dobras como entradas e executa automaticamente a validação cruzada de k dobras, retornando as pontuações para cada dobra.
Vamos ver como isso é feito na prática. Começamos importando as bibliotecas necessárias e carregando o conjunto de dados da íris. Em seguida, criamos uma instância do classificador de árvore de decisão e inicializamos um objeto k-fold estratificado com k=10.
Em seguida, usamos a função cross_val_score, passando o classificador, o conjunto de dados e o objeto k-fold. Essa função executa automaticamente a validação cruzada de k-fold, ajusta o modelo e calcula as pontuações para cada dobra. Por padrão, a função cross_val_score usa a métrica de precisão, mas você pode especificar outras métricas, se desejar.
Por fim, imprimimos as pontuações da validação cruzada para cada dobra e calculamos a pontuação média. Nesse caso, obtivemos uma precisão média de validação cruzada de 95,3%, que corresponde à precisão obtida manualmente.
O uso de cross_val_score é uma maneira mais concisa e eficiente de executar a validação cruzada k-fold, pois lida com todo o processo automaticamente. Também nos permite alterar facilmente o número de dobras ou mudar para um modelo diferente sem modificar significativamente o código.
10.2 Hiperparâmetros (L10: Avaliação do Modelo 3)
10.2 Hiperparâmetros (L10: Avaliação do Modelo 3)
Antes de nos aprofundarmos na validação cruzada, vamos dedicar um momento para discutir os hiperparâmetros. Você pode já estar familiarizado com o conceito, mas se não, isso servirá como uma recapitulação útil. Os hiperparâmetros podem ser considerados como parâmetros de ajuste ou configurações de um modelo ou algoritmo. São as opções que você ajusta manualmente para otimizar o desempenho do seu modelo. Para ilustrar isso, vamos considerar o classificador K-vizinho mais próximo, um modelo não paramétrico.
Os modelos não paramétricos, ao contrário dos modelos paramétricos, não possuem uma estrutura predefinida. Em vez disso, eles contam com o conjunto de treinamento para definir a estrutura do modelo. Por exemplo, em K vizinhos mais próximos, os parâmetros do modelo são essencialmente os próprios exemplos de treinamento. Portanto, alterar o conjunto de treinamento, como adicionar ou remover exemplos, pode afetar significativamente a estrutura do modelo. Outro exemplo de modelo não paramétrico é a árvore de decisão, onde o número de divisões na árvore depende dos exemplos de treinamento, em vez de uma estrutura predefinida.
Agora, vamos nos concentrar especificamente nos hiperparâmetros do algoritmo K-vizinho mais próximo. Esses hiperparâmetros incluem opções como o número de vizinhos (K) e a métrica de distância usada (por exemplo, Manhattan ou distância euclidiana). Essas opções precisam ser definidas antes de executar o modelo e não são aprendidas com os dados. Neste curso, exploraremos técnicas como pesquisa em grade ou pesquisa aleatória para auxiliar no ajuste de hiperparâmetros. No entanto, é importante observar que experimentar diferentes valores para hiperparâmetros não é um processo de ajustá-los aos dados, mas sim uma experimentação iterativa para encontrar as melhores configurações.
Para fornecer mais exemplos, vamos consultar as definições de hiperparâmetros no scikit-learn. Ao inicializar um classificador de árvore de decisão, os hiperparâmetros podem incluir a medida de impureza (por exemplo, Gini ou entropia), a profundidade da árvore para pré-poda e o número mínimo de amostras por folha, entre outros. Estes são todos considerados hiperparâmetros.
Notavelmente, nem todas as opções são hiperparâmetros, mas todos os hiperparâmetros são opções. Por exemplo, o estado aleatório ou semente aleatória, que determina a aleatoriedade do modelo, não é um hiperparâmetro. É algo que não deve ser manipulado para melhorar o modelo, pois mudar a semente aleatória para melhor desempenho seria considerado injusto.
Agora, vamos contrastar os hiperparâmetros com os parâmetros do modelo. Por exemplo, vamos dar uma breve olhada na regressão logística, que pode ser vista como um modelo linear e serve como uma introdução ao aprendizado de máquina clássico e ao aprendizado profundo. Na regressão logística, as entradas são recursos, incluindo um termo de interceptação para explicar o viés. Os pesos do modelo, que são determinados com base no número de recursos, formam a estrutura do modelo. Inicialmente, esses pesos podem ser definidos como zero ou pequenos valores aleatórios e, em seguida, são atualizados iterativamente para minimizar a função de perda (por exemplo, erro quadrático médio em regressão linear).
Na regressão logística, uma função não linear, normalmente a função logística ou função sigmóide, é aplicada à entrada líquida (a soma ponderada das entradas) para esmagá-la em um intervalo entre zero e um. Essa saída pode ser interpretada como a probabilidade de associação de classe na classificação binária. Os pesos são ajustados para minimizar a perda, que é calculada comparando a probabilidade prevista de associação de classe com o verdadeiro rótulo de classe (0 ou 1). A regressão logística também emprega técnicas de regularização, como a regularização L1 ou L2, que adicionam um termo de penalidade com base no tamanho dos pesos para evitar o overfitting. A força de regularização (lambda) é um hiperparâmetro que precisa ser definido pelo usuário.
Para resumir, os parâmetros do modelo, como os pesos (W) na regressão logística, são aprendidos com os dados de treinamento, enquanto os hiperparâmetros, como a força de regularização (lambda), são determinados pelo usuário e não são aprendidos com os dados. Os parâmetros do modelo são as variáveis internas do modelo que são atualizadas durante o processo de treinamento para otimizar o desempenho, enquanto os hiperparâmetros são configurações externas que controlam o comportamento do modelo e precisam ser definidas antes do treinamento.
O processo de encontrar os valores ideais para hiperparâmetros é conhecido como ajuste de hiperparâmetros. É uma etapa importante no aprendizado de máquina, pois pode afetar bastante o desempenho de um modelo. No entanto, encontrar os melhores valores de hiperparâmetros não é uma tarefa simples e muitas vezes requer experimentação e avaliação de diferentes combinações.
Uma abordagem comum para o ajuste de hiperparâmetros é a pesquisa de grade, onde um conjunto predefinido de valores é especificado para cada hiperparâmetro e todas as combinações possíveis são avaliadas usando validação cruzada. A validação cruzada é uma técnica usada para avaliar o desempenho de um modelo dividindo os dados em vários subconjuntos (dobras), treinando o modelo em algumas dobras e avaliando-o na dobra restante. Isso ajuda a estimar o desempenho do modelo em dados não vistos e reduz o risco de overfitting.
Outra abordagem é a pesquisa aleatória, em que combinações aleatórias de valores de hiperparâmetros são amostradas de distribuições especificadas. Isso pode ser útil quando o espaço de busca de hiperparâmetros é grande, pois permite explorar uma gama mais ampla de valores sem avaliar exaustivamente todas as combinações possíveis.
Além da busca em grade e da busca aleatória, existem técnicas mais avançadas de ajuste de hiperparâmetros, como a otimização bayesiana, que utiliza modelos probabilísticos para guiar o processo de busca, e algoritmos genéticos, que imitam o processo de seleção natural para evoluir o melhor conjunto de hiperparâmetros.
Vale a pena notar que o ajuste de hiperparâmetros pode ser computacionalmente caro, especialmente para modelos complexos ou grandes conjuntos de dados. Portanto, muitas vezes é feito em conjunto com técnicas como validação cruzada para fazer o uso mais eficiente dos dados disponíveis.
Os hiperparâmetros são as configurações ou opções de um modelo que precisam ser definidas antes do treinamento, enquanto os parâmetros do modelo são as variáveis internas aprendidas com os dados durante o treinamento. O ajuste de hiperparâmetros é o processo de encontrar os melhores valores para essas configurações e é crucial para otimizar o desempenho do modelo. Técnicas como pesquisa em grade, pesquisa aleatória, otimização bayesiana e algoritmos genéticos são comumente usadas para ajuste de hiperparâmetros.
10.5 K-fold CV para Seleção de Modelo (L10: Avaliação de Modelo 3)
10.5 K-fold CV para Seleção de Modelo (L10: Avaliação de Modelo 3)
Nos dois vídeos anteriores, discutimos a validação cruzada k-fold para avaliação de modelo e examinamos alguns exemplos de código. Agora, vamos nos concentrar na validação cruzada k-fold para seleção de modelo. A seleção de modelo geralmente é o caso de uso comum para validação cruzada k-fold, pois nos permite ajustar hiperparâmetros e selecionar as configurações de hiperparâmetro de melhor desempenho.
O processo geral pode ser resumido em cinco etapas. No entanto, devido ao espaço limitado no slide, ampliarei cada etapa nos slides a seguir para fornecer mais detalhes. As cinco etapas são semelhantes ao método de validação tripla para seleção de modelo que discutimos anteriormente.
Etapa 1: Divida os dados em conjuntos de treinamento e teste. Esta etapa é a mesma de antes, onde dividimos o conjunto de dados em duas partes, uma para treinamento e outra para teste. Vamos nos concentrar no conjunto de treinamento por enquanto.
Etapa 2: aplique o algoritmo de aprendizado com diferentes configurações de hiperparâmetros usando validação cruzada k-fold. Cada configuração de hiperparâmetro, como a profundidade máxima de um algoritmo de árvore de decisão, é avaliada usando validação cruzada k-fold. Por exemplo, podemos usar a validação cruzada k-fold com k=10, conforme recomendado por Ron Kohavi. Esta etapa nos fornece diferentes estimativas de desempenho para cada configuração de hiperparâmetro.
Passo 3: Selecione o modelo de melhor desempenho. Com base nas estimativas de desempenho obtidas da validação cruzada k-fold, podemos identificar a configuração de hiperparâmetros com melhor desempenho. Por exemplo, podemos descobrir que uma profundidade máxima de cinco apresenta o melhor desempenho entre os valores testados. Selecionamos essa configuração de hiperparâmetro como a melhor.
Etapa 4: ajuste o modelo com os melhores valores de hiperparâmetros aos dados de treinamento. Depois de identificar a melhor configuração de hiperparâmetro, treinamos novamente o modelo usando todo o conjunto de dados de treinamento e os hiperparâmetros selecionados. Isso garante que tenhamos um único modelo com os melhores valores de hiperparâmetros.
Passo 5: Avalie o modelo em um conjunto de teste independente. Para estimar o desempenho de generalização do modelo, nós o avaliamos em um conjunto de teste separado que não foi usado durante o treinamento ou processo de seleção de hiperparâmetros. Isso fornece uma avaliação imparcial do desempenho do modelo.
Opcionalmente, podemos executar uma etapa adicional em que ajustamos o modelo com os melhores valores de hiperparâmetros em todo o conjunto de dados. Esta etapa é baseada na suposição de que o modelo pode ter um desempenho ainda melhor quando treinado em mais dados.
Ter um conjunto de teste independente é importante para evitar viés de seleção. Às vezes, uma configuração de hiperparâmetro pode ter um bom desempenho na validação cruzada k-fold por acaso, levando a uma estimativa excessivamente otimista. Usando um conjunto de teste independente, podemos obter uma avaliação mais confiável do desempenho do modelo.
Este procedimento resume a validação cruzada k-fold para seleção de modelo. Agora, vamos explorar algumas técnicas para selecionar hiperparâmetros durante a seleção do modelo ou etapa de ajuste do hiperparâmetro.
Um método comum é a pesquisa em grade, que continua sendo amplamente utilizada. A pesquisa em grade é um método de pesquisa exaustivo no qual você define uma lista de valores de hiperparâmetros a serem considerados. Por exemplo, no caso de k vizinhos mais próximos, você pode ajustar o valor de k especificando uma lista de valores como 3, 5, 6, 7, 8 e 9. A pesquisa em grade avalia o desempenho do modelo para cada combinação de hiperparâmetros usando validação cruzada k-fold.
A pesquisa de grade pode ser realizada em paralelo, permitindo que várias combinações de hiperparâmetros sejam avaliadas simultaneamente. No entanto, pode sofrer de cobertura ruim se nem todos os valores de hiperparâmetros relevantes forem incluídos na grade predefinida. Isso é especialmente problemático para hiperparâmetros contínuos ou quando certos valores são ignorados.
Para resolver o problema de cobertura, a pesquisa aleatória é uma abordagem alternativa que amostra valores de hiperparâmetros de distribuições. Em vez de especificar uma grade fixa, você pode definir distribuições, como uniforme, normal, exponencial, beta ou binomial, para amostrar valores de hiperparâmetros. A pesquisa aleatória fornece mais flexibilidade na exploração do espaço de hiperparâmetros e pode abranger uma gama mais ampla de valores. Ao amostrar de distribuições, a pesquisa aleatória permite uma exploração mais eficiente do espaço de hiperparâmetros.
Em comparação com a pesquisa em grade, a pesquisa aleatória geralmente é mais eficiente computacionalmente porque não avalia todas as combinações possíveis. Em vez disso, ele amostra aleatoriamente um subconjunto de valores de hiperparâmetros e os avalia usando validação cruzada k-fold. O número de iterações ou amostras pode ser especificado antecipadamente.
A vantagem da pesquisa aleatória é que ela pode pesquisar com eficiência um grande espaço de hiperparâmetros, especialmente quando alguns hiperparâmetros são menos importantes que outros. Ele também pode lidar com hiperparâmetros contínuos e discretos sem a necessidade de definir uma grade específica.
Tanto a pesquisa em grade quanto a pesquisa aleatória têm seus prós e contras. A pesquisa de grade garante cobrir todas as combinações dentro da grade definida, mas pode ser computacionalmente cara e pode não ser adequada para grandes espaços de hiperparâmetros. A busca aleatória, por outro lado, é mais eficiente, mas não garante uma cobertura exaustiva.
Na prática, a escolha entre busca em grade e busca aleatória depende do tamanho do espaço de hiperparâmetros, dos recursos computacionais disponíveis e do problema específico em questão.
Outra técnica para ajuste de hiperparâmetros é a otimização bayesiana. A otimização bayesiana usa um modelo probabilístico para modelar a relação entre hiperparâmetros e a função objetivo (por exemplo, desempenho do modelo). Ele emprega um modelo substituto, como Processos Gaussianos, para aproximar a função objetivo e usa uma função de aquisição para determinar os próximos valores de hiperparâmetros a serem avaliados.
A otimização bayesiana amostra iterativamente os valores de hiperparâmetros com base no modelo substituto e atualiza o modelo com base no desempenho avaliado. Ele concentra a busca em regiões promissoras do espaço de hiperparâmetros, levando a uma exploração mais eficiente.
A vantagem da otimização bayesiana é sua capacidade de lidar com hiperparâmetros contínuos e discretos, bem como funções objetivas não convexas e não lineares. Ele se adapta ao desempenho observado e seleciona de forma inteligente os próximos valores de hiperparâmetros a serem avaliados, potencialmente convergindo para a solução ideal com menos avaliações em comparação com a pesquisa em grade ou pesquisa aleatória.
No entanto, a otimização Bayesiana pode ser mais cara computacionalmente, especialmente para grandes conjuntos de dados ou modelos complexos. Requer avaliar a função objetivo várias vezes para atualizar o modelo substituto e determinar os próximos valores de hiperparâmetros a serem avaliados.
No geral, a otimização bayesiana é uma técnica poderosa para ajuste de hiperparâmetros, especialmente quando o espaço de hiperparâmetros é complexo e a função objetivo é cara para avaliar.
Em resumo, a validação cruzada k-fold é uma ferramenta valiosa tanto para avaliação quanto para seleção de modelos. Ele nos permite estimar o desempenho de diferentes modelos e selecionar as melhores configurações de hiperparâmetros. Técnicas como pesquisa em grade, pesquisa aleatória e otimização bayesiana podem ser usadas para ajustar os hiperparâmetros e melhorar o desempenho do modelo. A escolha do método depende de fatores como o tamanho do espaço de hiperparâmetros, recursos computacionais e o problema específico em questão.
CV de 10.6 K-fold para avaliação do modelo -- Exemplos de código (L10: Avaliação do modelo 3)
CV de 10.6 K-fold para avaliação do modelo -- Exemplos de código (L10: Avaliação do modelo 3)
Sim, como da última vez, quando falamos sobre validação cruzada k-fold para avaliação de modelo. Vamos agora dar uma olhada mais de perto em alguns exemplos de código para validação cruzada k-fold, mas desta vez para seleção de modelo. Fornecerei alguns exemplos de código que você pode encontrar no GitHub. Também incluirei o link no Piazza e no Canvas para que você possa baixar o notebook de código e experimentá-lo mais tarde.
Tudo bem, vamos mergulhar no notebook de código. Como de costume, começamos com a marca d'água para verificar os números de versão dos pacotes que estamos usando. Neste notebook, vamos nos concentrar na pesquisa de grade, que é realmente útil para ajuste de hiperparâmetros e seleção de modelo. Para esta demonstração, usaremos o classificador de árvore de decisão no conjunto de dados da íris. Embora o conjunto de dados da íris possa não ser o mais empolgante, ele nos permite manter as coisas simples. Além disso, servirá como uma boa prática antes de iniciar seus projetos de aula, onde você trabalhará com conjuntos de dados mais complexos.
Começamos dividindo nosso conjunto de dados em conjuntos de treinamento e teste. Usamos 85% dos dados para treinamento e 15% para teste, seguindo a prática usual. Passando para a pesquisa da grade, definimos duas opções de hiperparâmetros: profundidade máxima e critério. A profundidade máxima representa a profundidade máxima da árvore de decisão e a definimos como 1, 2, 3, 4, 5 ou Nenhuma (sem restrição na profundidade máxima). O critério representa a função para medir a qualidade de uma divisão e avaliamos tanto "gini" quanto "entropia". Na prática, a escolha entre gini e entropia faz pouca diferença, mas a incluímos para fins de demonstração.
Em seguida, criamos uma grade de parâmetros, especificando os hiperparâmetros e seus respectivos valores. Em vez de usar uma lista, também podemos usar dicionários para especificar diferentes cenários. Por exemplo, podemos codificar um valor específico para um hiperparâmetro enquanto exploramos todos os valores para outro hiperparâmetro. Essa abordagem pode ser útil ao lidar com escolhas conflitantes de parâmetros. No entanto, neste caso, não há conflito, então uma lista seria suficiente.
Definimos o número de dobras de validação cruzada (CV) para 10, indicando que queremos executar a validação cruzada de 10 vezes. A validação cruzada estratificada k-fold é usada para classificadores, garantindo que as proporções de rótulos sejam mantidas constantes em cada dobra. A métrica de pontuação usada para selecionar as melhores configurações de hiperparâmetros é a precisão para classificadores e a pontuação R-quadrada para regressores. Também definimos o número de tarefas paralelas a serem executadas como -1, permitindo que várias operações sejam executadas em paralelo.
Depois de especificar todos os detalhes necessários, ajustamos o objeto de pesquisa da grade aos nossos dados. Ele realiza uma busca exaustiva na grade de parâmetros, avaliando o desempenho de cada combinação de hiperparâmetros usando validação cruzada. Uma vez concluída a pesquisa da grade, podemos acessar a melhor pontuação e os parâmetros correspondentes usando os atributos best_score_ e best_params_, respectivamente. Neste caso, o melhor modelo tem profundidade máxima de 3 e critério "gini", alcançando uma precisão de 96% em média nas dobras de validação.
Se estivermos interessados, podemos inspecionar manualmente os resultados armazenados em um dicionário, que contém todas as informações. Aqui, nos concentramos na pontuação média do teste, que representa o desempenho médio nas dobras de validação para cada configuração de hiperparâmetro. Imprimimos as pontuações junto com as configurações de parâmetros para melhor legibilidade.
Opcionalmente, podemos resumir os resultados em um mapa de calor usando uma função da biblioteca de extensão ML. O mapa de calor fornece uma representação visual do desempenho para diferentes configurações de hiperparâmetros. Nesse caso, a escolha entre "gini" e "entropia" quase não tem efeito sobre o desempenho, conforme indicam as pontuações semelhantes. O melhor desempenho é obtido com profundidade máxima de 3 e critério "gini".
Depois de obter as melhores configurações de hiperparâmetros, podemos usá-las para treinar o modelo final em todo o conjunto de dados de treinamento. Isso garante que utilizamos todos os dados disponíveis para o treinamento do modelo. Criamos um novo objeto classificador de árvore de decisão, definimos os hiperparâmetros para os melhores valores encontrados durante a pesquisa da grade e ajustamos o modelo aos dados de treinamento.
Depois que o modelo é treinado, podemos fazer previsões sobre o conjunto de dados de teste e avaliar seu desempenho. Neste exemplo, calculamos a pontuação de precisão, que mede a proporção de instâncias classificadas corretamente. Imprimimos a pontuação de precisão e, nesse caso, alcançamos uma precisão de 93% no conjunto de teste.
No geral, a pesquisa em grade nos permite explorar sistematicamente diferentes combinações de hiperparâmetros e selecionar a melhor configuração para nosso modelo. Ele automatiza o processo de ajuste de hiperparâmetros e ajuda a encontrar as configurações ideais para melhorar o desempenho.
Essa é a ideia básica de usar a pesquisa de grade para seleção de modelo e ajuste de hiperparâmetros. Claro, esta é apenas uma abordagem, e existem outras técnicas disponíveis, como busca aleatória, otimização bayesiana e muito mais. A escolha do método depende do problema específico e dos recursos disponíveis.
10.7 K-fold CV 1-Método de Erro Padrão (L10: Avaliação do Modelo 3)
10.7 K-fold CV 1-Método de Erro Padrão (L10: Avaliação do Modelo 3)
Na discussão anterior, cobrimos os conceitos de validação cruzada k-fold e seleção de modelo usando pesquisa em grade. No entanto, há outro tópico importante a ser considerado: o método de um erro padrão. Esse método é relevante quando encontramos situações em que várias configurações de hiperparâmetros funcionam igualmente bem e precisamos escolher a mais adequada.
Quando temos várias configurações de hiperparâmetros com desempenho semelhante ou idêntico, torna-se crucial decidir qual deles selecionar. Por padrão, o scikit-learn escolhe a primeira configuração da lista se houver um empate. No entanto, o método de um erro padrão oferece uma abordagem alternativa baseada no princípio da parcimônia ou da navalha de Occam. De acordo com a navalha de Occam, quando hipóteses concorrentes funcionam igualmente bem, aquela com menos suposições deve ser preferida.
Para aplicar o método de um erro padrão, consideramos a estimativa numericamente ótima e seu erro padrão. Depois de realizar a seleção do modelo por meio da validação cruzada k-fold, obtemos estimativas de desempenho para diferentes configurações de hiperparâmetros. Entre essas configurações, selecionamos o modelo cujo desempenho está dentro de um erro padrão do modelo de melhor desempenho obtido na etapa anterior.
Para ilustrar esse método, vamos considerar um conjunto de dados de classificação binária gerado com o scikit-learn, que consiste em quadrados e triângulos. Vamos nos concentrar em um kernel RBF Support Vector Machine (SVM) para simplificar. O SVM possui um hiperparâmetro chamado gama, que controla a influência de cada exemplo de treinamento. Descobrimos que vários valores de gama resultam em precisões que variam de 60% a 90%, com algumas configurações mostrando desempenho semelhante.
No caso do SVM, a complexidade do limite de decisão depende do valor gama. Um gama mais alto leva a um limite de decisão mais complexo, enquanto um gama mais baixo resulta em um limite de decisão mais simples. Podemos observar isso traçando os limites de decisão para diferentes valores gama. Os modelos mais simples possuem limites de decisão mais próximos do linear, enquanto os mais complexos exibem formas mais intrincadas.
No entanto, quando várias configurações de hiperparâmetros geram precisões semelhantes, queremos selecionar o modelo mais simples dentro de um erro padrão do modelo de melhor desempenho. Por exemplo, se o modelo de melhor desempenho tiver um valor gama de 0,1, consideraríamos modelos com valores gama dentro de um erro padrão de 0,1 e escolheríamos aquele com a menor complexidade.
Vale a pena notar que o método de um erro padrão nem sempre tem um artigo ou publicação correspondente. É uma abordagem prática baseada no princípio da simplicidade e tem sido amplamente adotada pelos profissionais. Se houver estudos ou artigos publicados sobre esse método, eles seriam adições valiosas para explorar ainda mais sua eficácia e implicações.
No próximo vídeo, vamos nos aprofundar em um exemplo de código que demonstra como implementar o método de um erro padrão na prática.
10.8 K-fold CV 1-Método de erro padrão -- Exemplo de código (L10: Avaliação do modelo 3)
10.8 K-fold CV 1-Método de erro padrão -- Exemplo de código (L10: Avaliação do modelo 3)
Neste vídeo, fornecerei uma explicação detalhada de como implementei o método de um erro padrão discutido no vídeo anterior. Para acompanhar os exemplos de código, você pode encontrá-los neste link, que também postarei no Canvas para facilitar o acesso.
Vamos percorrer o caderno juntos. Primeiro, temos as importações convencionais que são comumente usadas. Em seguida, gero meu próprio conjunto de dados de brinquedos usando a função make_circles da biblioteca scikit-learn. Esta função permite especificar o número de exemplos e a quantidade de ruído no conjunto de dados. O conjunto de dados gerado é então dividido em conjuntos de treinamento e teste. Essa abordagem é excelente para conduzir estudos de simulação em grandes conjuntos de dados arbitrários para observar como diferentes curvas de aprendizado e comportamentos de modelo variam com parâmetros variados, como ruído e número de exemplos de treinamento. Ele serve como um teste útil para experimentação.
Em seguida, uso a máquina de vetores de suporte (SVM) como exemplo. Você não precisa entender totalmente como os SVMs funcionam para esta demonstração; Eu simplesmente o escolhi como um exemplo claro. As etapas a seguir envolvem uma abordagem manual, na qual defino uma lista de configurações de hiperparâmetros e itero sobre esses valores. No entanto, se você tiver configurações mais complicadas, poderá usar o ParamSampler discutido no vídeo anterior.
Para esta demonstração, estou usando um único hiperparâmetro, portanto, uma abordagem manual usando uma lista e um loop for é suficiente. Eu inicializo uma lista de parâmetros e, em seguida, faço uma iteração sobre cada valor. Em cada iteração, inicializo o modelo SVM com a configuração de hiperparâmetro escolhida. Em seguida, realizo a validação cruzada k-fold para avaliar a precisão do modelo. Os valores de precisão são coletados e eu calculo a média, o desvio padrão e o erro padrão. Observe que a abordagem ingênua que uso para calcular o erro padrão dividindo o desvio padrão pela raiz quadrada do tamanho da amostra pode não ser o melhor método porque as rodadas na validação cruzada k-fold não são completamente independentes. No entanto, com o objetivo de obter alguma medida de similaridade ou barras de erro para comparar diferentes métodos, essa abordagem é suficiente.
Depois de coletar os valores de precisão, eu os ploto em uma escala logarítmica porque a amostragem é feita exponencialmente. O gráfico resultante exibe o desempenho do modelo SVM para diferentes configurações de hiperparâmetros. Isso é consistente com o que vimos nos slides da palestra.
Para demonstrar a aplicabilidade desse método a outros classificadores, também forneço código para a classificação da árvore de decisão no conjunto de dados da íris. Nesse caso, vario o parâmetro de profundidade máxima da árvore de decisão de 1 a 10. Etapas semelhantes são seguidas: inicializar o modelo com uma configuração de hiperparâmetro, ajustar o modelo, fazer previsões, coletar pontuações de validação cruzada k-fold, calcular o erro padrão, e assim por diante. Ao analisar os limites de decisão para diferentes profundidades máximas, podemos observar a compensação entre complexidade e desempenho do modelo. Neste exemplo específico, uma árvore de decisão com profundidade máxima de três é selecionada usando o método de um erro padrão.
Por fim, menciono brevemente os tópicos que abordaremos na próxima aula, que incluem validação cruzada para seleção de algoritmos, testes estatísticos e métricas de avaliação. Esses tópicos estão intimamente relacionados aos conceitos discutidos nas aulas anteriores.
Espero que esta explicação seja útil. Tenha um ótimo fim de semana!
11.1 Visão Geral da Palestra (Avaliação do Modelo L11. Parte 4)
11.1 Visão Geral da Palestra (Avaliação do Modelo L11. Parte 4)
Olá a todos, sejam bem-vindos! Em nossa sessão anterior, nos aprofundamos no tópico de ajuste de hiperparâmetros e seleção de modelo. Nosso foco foi a validação cruzada k-fold, uma técnica usada para classificar diferentes modelos com várias configurações de hiperparâmetros para selecionar o melhor. Exploramos métodos práticos como busca em grade e busca aleatória, que facilitam o processo de comparação de modelos.
Hoje, vamos nos aprofundar mais no aspecto da comparação de modelos. Suponha que você encontre um trabalho de pesquisa que compartilhe as previsões de um modelo em um conjunto de teste. Você pode querer comparar essas previsões com as de seu próprio modelo e determinar se há uma diferença estatisticamente significativa em seu desempenho. Embora essa prática não seja muito comum, ela pode ser útil. Um teste estatístico que pode ser empregado nesses casos é o teste de McNemar. Além disso, discutiremos comparações de algoritmos, permitindo-nos comparar diferentes modelos e algoritmos de maneira mais equitativa.
No entanto, observe que a palestra de hoje será mais curta do que o normal devido à semana de Ação de Graças. Para os interessados, as notas de aula fornecem explicações mais detalhadas. Eles também abrangem testes estatísticos adicionais, como o teste F cinco vezes dois e vários procedimentos de teste t. Embora esses tópicos não sejam passíveis de exame, eles servem para satisfazer sua curiosidade intelectual.
Para otimizar nosso tempo, não vamos nos aprofundar nesses métodos, pois uma palestra sobre métricas de desempenho nos espera na próxima semana. Se o tempo permitir, também podemos abordar a seleção e extração de recursos. Para sua conveniência, compartilhei materiais complementares sobre esses assuntos via Canvas.
Agora, vamos começar com a aula principal sobre avaliação de modelos, começando com testes estatísticos para comparações de modelos. Em seguida, abordaremos os desafios associados a várias comparações pareadas e exploraremos métodos para resolvê-los. Posteriormente, vamos nos aprofundar na seleção de algoritmos e examinar um exemplo de código concreto relacionado à técnica de validação cruzada aninhada. Esta visão geral da palestra prepara o terreno para nossa discussão de hoje.
Antes de prosseguirmos, vamos recapitular os tópicos que abordamos nas aulas anteriores sobre avaliação de modelos. Começamos com os fundamentos, incluindo a compensação de viés-variância, underfitting e overfitting e o método de validação simples. Em seguida, investigamos os intervalos de confiança e introduzimos o método bootstrap para construir intervalos de confiança empíricos. Exploramos o método de holdout repetido, que oferece insights sobre a estabilidade do modelo, embora não seja comumente usado na prática. Serviu como uma boa introdução aos métodos de reamostragem.
Na semana passada, nos aventuramos no reino da validação cruzada, o que acrescentou mais profundidade à nossa exploração. Discutimos o ajuste de hiperparâmetros usando pesquisa em grade e pesquisa aleatória e empregamos essas técnicas para seleção de modelo. Nosso foco principal era o método de validação de três vias, que envolve a divisão do conjunto de dados em conjuntos de treinamento, validação e teste. Usamos o conjunto de validação para classificar diferentes modelos e o conjunto de teste para estimar seu desempenho final. Para conjuntos de dados menores, recorremos à validação cruzada k-fold e à validação cruzada de deixar um de fora.
A palestra de hoje apresentará comparações de modelos e algoritmos. Embora esses conceitos estejam relacionados à seleção de modelos, nosso objetivo aqui é comparar diferentes algoritmos, buscando determinar qual tem melhor desempenho em uma variedade de tarefas relacionadas. Idealmente, teríamos uma coleção de conjuntos de treinamento e teste disjuntos para cada algoritmo. Por exemplo, ao comparar métodos de classificação de imagens, empregaríamos vários conjuntos de dados de imagens para treinar diferentes modelos usando diferentes algoritmos. Em seguida, compararíamos seus desempenhos em vários conjuntos de dados. No entanto, restrições práticas geralmente limitam nossa capacidade de seguir essa abordagem ideal. Encontramos problemas com violações de independência e outros incômodos nos conjuntos de dados. Esse problema lembra os desafios discutidos no documento CIFAR-10.
Além disso, como podemos comparar o desempenho de um modelo que treinamos com o de um modelo publicado em um trabalho de pesquisa ou encontrado na internet? Para resolver isso, podemos examinar a diferença real de desempenho entre os dois modelos usando testes estatísticos. Um desses testes é o teste de McNemar, comumente usado para comparar o desempenho preditivo de dois modelos em um resultado binário.
O teste de McNemar é adequado quando temos dados emparelhados, o que significa que cada instância no conjunto de dados é classificada por ambos os modelos e os resultados são registrados como uma tabela de contingência. A tabela de contingência tem quatro células que representam os quatro resultados possíveis:
Com essas contagens, podemos realizar o teste de McNemar para determinar se há diferença significativa no desempenho dos modelos. A hipótese nula (H0) é que os dois modelos têm o mesmo desempenho, enquanto a hipótese alternativa (H1) é que há diferença.
A estatística do teste de McNemar segue uma distribuição qui-quadrado com 1 grau de liberdade. Calculamos a estatística de teste usando a fórmula:
Se a estatística de teste chi2 exceder um valor crítico da distribuição qui-quadrado (com 1 grau de liberdade) em um nível de significância escolhido (por exemplo, 0,05), rejeitamos a hipótese nula e concluímos que há uma diferença significativa no desempenho entre os dois modelos.
É importante observar que o teste McNemar assume que as instâncias pareadas são independentes e identicamente distribuídas. Essa suposição pode não ser válida se as instâncias emparelhadas não forem verdadeiramente independentes ou se houver alguma forma de dependência entre elas. Além disso, o teste de McNemar é aplicável principalmente a resultados binários. Se o resultado for multiclasse, testes alternativos como o teste Q de Cochran ou o teste de Stuart-Maxwell podem ser mais apropriados.
Agora, vamos discutir os desafios de múltiplas comparações pareadas. Ao comparar vários modelos ou algoritmos, torna-se cada vez mais provável encontrar diferenças significativas apenas por acaso. Esse fenômeno é conhecido como problema de comparação múltipla ou problema de teste múltiplo.
Ao realizar múltiplas comparações pareadas, a probabilidade de pelo menos um resultado significativo aumenta à medida que o número de comparações aumenta. Essa inflação da taxa de erro Tipo I pode levar a resultados falsos positivos, onde rejeitamos a hipótese nula erroneamente.
Para resolver o problema de comparação múltipla, precisamos ajustar o nível de significância de nossos testes estatísticos. Uma abordagem comum é a correção de Bonferroni, que envolve a divisão do nível de significância desejado (por exemplo, 0,05) pelo número de comparações feitas. Por exemplo, se estivermos comparando três modelos, ajustaríamos o nível de significância para 0,05/3 = 0,0167 para cada teste individual.
A correção de Bonferroni é um método conservador que controla a taxa de erro familiar, garantindo que a taxa geral de erro Tipo I em todas as comparações permaneça abaixo de um limite especificado. No entanto, pode ser excessivamente rigoroso, levando a uma perda de poder para detectar diferenças verdadeiras.
Outros métodos para ajustar o nível de significância incluem o método de Holm-Bonferroni, o procedimento de Benjamini-Hochberg e o controle da taxa de descoberta falsa (FDR). Esses métodos fornecem alternativas menos conservadoras à correção de Bonferroni e podem ser mais apropriados em determinadas situações.
Em resumo, o teste de McNemar é um teste estatístico que pode ser usado para comparar o desempenho de dois modelos em um resultado binário. No entanto, ao conduzir múltiplas comparações pareadas, é importante considerar o problema de comparação múltipla ajustando o nível de significância.
11.2 Teste de McNemar para comparação de classificadores de pares (Avaliação do modelo L11. Parte 4)
11.2 Teste de McNemar para comparação de classificadores de pares (Avaliação do modelo L11. Parte 4)
Vamos agora discutir o teste de McNemar, que é um teste que podemos usar para comparar dois modelos entre si. Este teste é diferente do método de validação cruzada que discutimos na semana passada para seleção de modelo. Ao contrário da validação cruzada, o teste de McNemar não envolve o ajuste do modelo usando o conjunto de treinamento. Em vez disso, assume que já temos um modelo existente, como um classificador de aprendizado de máquina mencionado na literatura publicada, ao qual temos acesso por meio de um aplicativo da web ou do GitHub. O objetivo é comparar nosso próprio modelo com esse classificador existente com base em seu desempenho em um conjunto de teste.
O teste McNemar nos permite comparar dois classificadores com base em seu desempenho em um conjunto de teste. Foi introduzido por Quinn McNemar em 1947 e é um teste estatístico não paramétrico para comparações pareadas. Nesse caso, temos uma variável dependente categórica com duas categorias representando a exatidão das previsões (por exemplo, correta ou incorreta) e uma variável independente categórica com dois grupos relacionados representando os dois modelos sendo comparados. O emparelhamento é obtido usando o mesmo conjunto de teste para ambos os modelos. Para realizar o teste, usamos uma matriz de confusão dois por dois, que é uma versão especial da matriz de confusão projetada especificamente para o teste de McNemar.
A matriz de confusão dois por dois para o teste de McNemar inclui as contagens de previsões feitas por ambos os modelos. Por exemplo, vamos considerar o caso em que temos verdadeiros rótulos de classe de 0 e 1. O modelo 1 prevê 1 e 2, enquanto o modelo 2 prevê 1 e 1. Nesse caso, a contagem "a" representa as previsões de que tanto o modelo 1 quanto o O modelo 2 está correto (por exemplo, predizendo 1 quando o verdadeiro rótulo é 1). A contagem "b" representa as previsões onde o Modelo 1 está correto e o Modelo 2 está errado, e a contagem "c" representa as previsões onde o Modelo 1 está errado e o Modelo 2 está correto. Ao tabular essas contagens para um determinado conjunto de dados de teste, podemos construir a matriz de confusão dois por dois.
Usando a matriz de confusão dois por dois, podemos calcular várias métricas. Por exemplo, podemos calcular a precisão da previsão para cada modelo dividindo as contagens "a" e "b" pelo número total de exemplos no conjunto de teste. Adicionalmente, estamos interessados nos casos em que o Modelo 1 e o Modelo 2 diferem, representados pelas contagens "b" e "c" na matriz de confusão. Esses casos indicam onde um modelo fez uma previsão correta enquanto o outro fez uma previsão incorreta. Para comparar o desempenho dos dois modelos, podemos executar o teste de McNemar.
O teste de McNemar segue um procedimento típico de teste de hipótese. Definimos uma hipótese nula e uma hipótese alternativa. A hipótese nula assume que os desempenhos dos dois modelos são iguais, enquanto a hipótese alternativa sugere que seus desempenhos diferem. Calculamos uma estatística de teste qui-quadrado, que se aproxima de uma distribuição qui-quadrada. A estatística de teste é calculada como (b - c)^2 / (b + c). Com base nessa estatística de teste, calculamos um valor-p, assumindo que a hipótese nula é verdadeira. O valor-p representa a probabilidade de observar a estatística de teste dada ou um valor mais extremo sob a hipótese nula.
Para determinar se devemos rejeitar a hipótese nula, comparamos o valor-p com um nível de significância escolhido (por exemplo, 0,05). Se o valor p for menor que o nível de significância, rejeitamos a hipótese nula e concluímos que os desempenhos dos dois modelos não são iguais. Por outro lado, se o valor-p for maior que o nível de significância, deixamos de rejeitar a hipótese nula e assumimos que os desempenhos dos dois modelos são iguais.
A correção de continuidade foi introduzida para resolver o problema da distribuição qui-quadrado ser uma distribuição contínua, enquanto os dados na tabela de contingência 2x2 são discretos. Ao subtrair 1 da diferença absoluta no numerador, a correção de continuidade ajuda a fornecer uma melhor aproximação do valor-p. No entanto, é importante observar que o uso da correção de continuidade nem sempre é necessário e depende do contexto e dos dados específicos.
Outra consideração no teste de McNemar é o uso do teste binomial exato. O teste binomial exato fornece uma abordagem alternativa para determinar a significância estatística do teste de McNemar quando o tamanho da amostra é pequeno ou quando as suposições do teste qui-quadrado não são satisfeitas. O teste binomial exato calcula diretamente a probabilidade de obtenção dos dados observados sob a hipótese nula, sem depender da aproximação do qui-quadrado.
Além disso, o teste de McNemar pode ser estendido para lidar com mais de dois modelos ou tratamentos. Nesses casos, o teste pode ser realizado usando um teste de McNemar generalizado ou uma extensão conhecida como teste de Cochran-Mantel-Haenszel. Estas extensões permitem a comparação de vários modelos ou tratamentos em simultâneo, tendo em conta as dependências entre os diferentes grupos.
Em resumo, o teste de McNemar é um teste estatístico não paramétrico usado para comparar o desempenho de dois modelos ou tratamentos com base em dados categóricos pareados. Ele fornece uma maneira de avaliar se as diferenças de desempenho entre os modelos são estatisticamente significativas. O teste envolve a construção de uma tabela de contingência 2x2 e o cálculo de uma estatística de teste, que pode ser comparada à distribuição qui-quadrada ou avaliada usando o teste binomial exato. Ao realizar o teste de McNemar, os pesquisadores podem obter informações sobre o desempenho relativo de diferentes modelos ou tratamentos em vários campos, incluindo aprendizado de máquina, medicina e ciências sociais.
11.3 Comparações Múltiplas de Pares (Avaliação do Modelo L11 Parte 4)
11.3 Comparações Múltiplas de Pares (Avaliação do Modelo L11 Parte 4)
No cenário em que você tem um modelo que deseja comparar com vários outros modelos encontrados na literatura ou em plataformas como o GitHub, a realização de comparações pareadas pode se tornar problemática. Se você tiver k modelos diferentes, realizar um teste pairwise em cada par resultaria em k vezes (k - 1) / 2 combinações, o que pode ser um número grande. Isso levanta preocupações sobre a taxa de erro ao conduzir vários testes de hipóteses.
Normalmente, os testes de hipótese são conduzidos em um nível de significância de 0,05 ou menor. Isso significa que, se a hipótese nula for verdadeira, há 5% de chance de rejeitá-la incorretamente, levando a uma taxa de erro de 5%. Quando vários testes são realizados, a taxa de erro para rejeitar falsamente uma hipótese nula pode aumentar para r vezes alfa, onde r é o número de testes realizados. No pior caso, a taxa de erro pode ser de até r vezes alfa se todas as hipóteses nulas pareadas forem verdadeiras.
Para resolver esse problema, uma abordagem comum é usar um procedimento protegido, que envolve um processo de duas etapas. A primeira etapa é um teste omnibus, onde você avalia se há diferença significativa no desempenho de todos os modelos combinados. A hipótese nula assume que as acurácias de classificação de todos os modelos são iguais, enquanto a hipótese alternativa sugere que elas não são iguais.
Se a hipótese nula for rejeitada no teste omnibus, indicando que há diferença nos desempenhos dos modelos, pode-se prosseguir para a segunda etapa, que envolve testes post hoc pairwise. No entanto, é crucial fazer ajustes para comparações múltiplas para controlar a taxa de erro. Um método de ajuste comumente usado é o método de Bonferroni, onde o nível de significância é dividido pelo número de comparações.
Para os testes pairwise, o teste de McNemar pode ser empregado. É importante observar que, embora esses procedimentos estatísticos sejam formais e forneçam insights valiosos, na prática de aprendizado de máquina não é muito comum realizar comparações tão extensas. Normalmente, os pesquisadores relatam precisões ou erros de previsão e classificam os modelos com base em seu desempenho.
Embora o teste Cochran-Q possa ser implementado na biblioteca "mlxtend" para comparar vários modelos, vale a pena mencionar que o uso de tais procedimentos para comparações de vários modelos ainda é relativamente incomum no campo do aprendizado de máquina. No entanto, se você encontrar uma situação em que deseja comparar vários modelos e realizar testes estatísticos, poderá explorar essas opções e consultar as notas de aula e a literatura relevante para obter informações mais detalhadas.
É importante observar que esses tópicos não são abordados extensivamente nesta palestra para permitir tempo suficiente para cobrir outros conceitos essenciais, como seleção de recursos.
Um problema com comparações múltiplas é o aumento do risco de erros do tipo I, também conhecidos como falsos positivos. Ao realizar vários testes, há uma chance maior de rejeitar incorretamente hipóteses nulas, levando a conclusões errôneas. Para mitigar isso, os pesquisadores geralmente aplicam métodos de ajuste como correção de Bonferroni ou controle de taxa de descoberta falsa (FDR).
A correção de Bonferroni é um ajuste conservador que divide o nível de significância (alfa) pelo número de comparações (k). Esse nível de significância ajustado, denotado como alfa primo (α'), garante que a taxa de erro familiar geral permaneça sob controle. Usando a correção de Bonferroni, cada teste pareado individual é conduzido em um nível alfa/k.
Outro método popular é o controle FDR, que se concentra em controlar a proporção de descobertas falsas entre todas as rejeições. Em vez de reduzir o nível de significância para cada comparação, o controle FDR ajusta os valores-p de testes individuais para controlar a taxa geral de descoberta falsa. Este método permite um ajuste menos rigoroso em comparação com a correção de Bonferroni, o que pode ser vantajoso em situações onde um grande número de comparações está envolvido.
Embora a correção de Bonferroni e o controle FDR sejam amplamente usados, é importante observar que eles têm suas limitações. A correção de Bonferroni pode ser excessivamente conservadora, potencialmente levando a maiores chances de erros do tipo II ou falsos negativos. Por outro lado, o controle FDR pode ter mais poder para detectar diferenças verdadeiras, mas também pode aumentar o risco de falsos positivos.
No contexto do aprendizado de máquina, vale a pena considerar se o objetivo é avaliar as diferenças entre pares de forma abrangente ou identificar o(s) modelo(s) de melhor desempenho. A realização de testes pareados para todas as combinações possíveis pode ser computacionalmente cara e demorada. Na prática, os pesquisadores geralmente se concentram em classificar os modelos com base em suas métricas de desempenho e identificar os modelos de melhor desempenho, em vez de realizar testes estatísticos formais.
Também é importante reconhecer que o teste estatístico é apenas um aspecto da comparação do modelo. Outros fatores como interpretabilidade, eficiência computacional, relevância do domínio e considerações práticas também devem ser levados em consideração ao avaliar e selecionar modelos.
Em conclusão, embora comparações múltiplas e testes estatísticos possam fornecer informações valiosas sobre comparações de desempenho de modelos, sua aplicação prática em aprendizado de máquina é menos comum. Os pesquisadores geralmente contam com relatórios de precisão ou erros de previsão, comparações visuais e modelos de classificação com base em métricas de desempenho. Compreender os conceitos estatísticos subjacentes e os possíveis problemas com comparações múltiplas continua sendo essencial para conduzir pesquisas rigorosas e interpretar os resultados com precisão.