Um problema que ocorre com frequência em meus experimentos é que o modelo varia no desempenho quando o estado aleatório do algoritmo é alterado. Portanto, a pergunta é simples, devo tomar o estado aleatório como um hiperparâmetro? Por que é que? Se meu modelo supera outras pessoas com diferentes estados aleatórios, devo considerar o modelo como super ajustado a um determinado estado aleatório?
um log da árvore de decisão no sklearn: (random_rate deve ser um estado aleatório)
machine-learning
scikit-learn
PeterLai
fonte
fonte
Respostas:
Não você não deveria.
Hiperparâmetros são variáveis que controlam algum aspecto de alto nível do comportamento de um algoritmo. Ao contrário dos parâmetros regulares, os hiperparâmetros não podem ser aprendidos automaticamente a partir dos dados de treinamento pelo próprio algoritmo. Por esse motivo, um usuário experiente selecionará um valor apropriado com base em sua intuição, conhecimento de domínio e significado semântico do hiperparâmetro (se houver). Como alternativa, pode-se usar um conjunto de validação para executar a seleção de hiperparâmetros. Aqui, tentamos encontrar um valor ideal de hiperparâmetro para toda a população de dados testando diferentes valores candidatos em uma amostra da população (o conjunto de validação).
Com relação ao estado aleatório, é usado em muitos algoritmos aleatórios no sklearn para determinar a semente aleatória passada ao gerador de números pseudo-aleatórios. Portanto, ele não trata de nenhum aspecto do comportamento do algoritmo. Por conseguinte, os valores de estado aleatório que tiveram um bom desempenho no conjunto de validação não correspondem aos que teriam um bom desempenho em um novo conjunto de testes não visto. De fato, dependendo do algoritmo, você poderá ver resultados completamente diferentes apenas alterando a ordem das amostras de treinamento.
Sugiro que você selecione um valor de estado aleatório aleatoriamente e use-o para todas as suas experiências. Como alternativa, você pode obter a precisão média de seus modelos em um conjunto aleatório de estados aleatórios.
De qualquer forma, não tente otimizar estados aleatórios, isso certamente produzirá medidas de desempenho otimistas.
fonte
O que o efeito random_state afeta? divisão de conjunto de treinamento e validação, ou o quê?
Se for o primeiro caso, acho que você pode tentar encontrar diferenças entre o esquema de divisão em dois estados aleatórios e isso pode lhe dar alguma intuição no seu modelo (quero dizer, você pode explorar por que ele funciona para treinar o modelo em alguns dados, e use o modelo treinado para prever alguns dados de validação, mas não funciona para treinar o modelo em alguns outros dados e prever outros dados de validação. Eles são distribuídos de maneira diferente?) Essa análise pode lhe dar alguma intuição.
E, a propósito, eu também encontrei esse problema :), e simplesmente não entendo. Talvez possamos trabalhar juntos na investigação.
Felicidades.
fonte