Devemos sempre fazer CV?

9

Minha pergunta: devo fazer CV mesmo para um conjunto de dados relativamente grande?

Eu tenho um conjunto de dados relativamente grande e aplicarei um algoritmo de aprendizado de máquina ao conjunto de dados.

Como meu PC não é rápido, o CV (e a busca na grade) às vezes leva muito tempo. Em particular, um SVM nunca termina por causa de muitos parâmetros de ajuste. Portanto, se eu fizer um currículo, preciso escolher dados relativamente pequenos.

Por outro lado, o conjunto de validação também deve ser grande, por isso acho que é uma boa ideia usar um conjunto de validação que tenha o mesmo tamanho (ou maior) do conjunto de treinamento. (Ou seja, em vez de CV, eu uso um conjunto de validação grande para ajuste de parâmetros.)

Então, agora tenho pelo menos duas opções.

  1. faça CV em um pequeno conjunto de dados.
  2. use um conjunto de treinamento relativamente grande e um conjunto de validação sem CV.
  3. outra ideia

Qual é a melhor ideia? Opiniões teóricas ou práticas são bem-vindas.

H. Shindoh
fonte
11
Esta questão deve obviamente ser uma CW.
Shindoh
11
O que é grande? Quantas observações? Quantas características / variáveis ​​/ regressores?
Jim
11
Depende de um PC. Ou seja, não estou pensando em "big data", que requer vários computadores.
H. Shindoh

Respostas:

3

Em geral, você não precisa usar a validação cruzada o tempo todo. O ponto principal do currículo é obter uma estimativa mais estável da generalização do seu classificador que você obteria usando apenas um conjunto de testes. Você não precisa usar o CV se o seu conjunto de dados for enorme; portanto, adicionar dados ao seu conjunto de treinamento não melhorará muito o seu modelo, e poucas classificações erradas no seu conjunto de testes por acaso, não mudarão realmente sua métrica de desempenho .

Por ter um pequeno conjunto de treinamento e um grande conjunto de testes, sua estimativa será enviesada. Portanto, provavelmente será pior do que você obteria usando mais dados de treinamento e hiperparâmetros ótimos que você achou que poderiam ser diferentes para conjuntos de dados maiores, simplesmente porque mais dados exigirão menos regularização.

No entanto, obter hiperparâmetros ideais não é a parte importante de qualquer maneira e não melhorará drasticamente o desempenho. Você deve concentrar sua energia para entender o problema, criando bons recursos e colocando os dados em boa forma.

Aqui estão algumas coisas que você pode considerar para acelerar:

  1. Treine-o com menos recursos. Use a seleção de recursos e / ou redução de dimensionalidade para diminuir o tamanho do seu problema
  2. Use o kernel pré-armazenado para SVM
  3. Use algoritmos que não precisam selecionar hiper parâmetros em uma grade. Especialmente lineares, como regressão logística com peneiras líquidas de cume / laço / elástico ou mesmo SVM linear. Dependendo da implementação, esses classificadores podem ajustar modelos para todos os hiperparâmetros no caminho selecionado pelo custo de ajustar apenas um
  4. use uma implementação mais rápida para o seu tipo de problema (você precisará pesquisar no Google)

e mesmo com um computador mais lento, você pode:

  1. Use mais núcleos
  2. Use GPU
rep_ho
fonte
2

A validação cruzada é uma ferramenta para estimar a variação de sua métrica de desempenho devido à aleatoriedade nos dados (e talvez no algoritmo de aprendizado, se não for determinístico).

Portanto, se você usar apenas uma divisão, por exemplo, teste de 80% de treinamento + 20% e relatar sua métrica de desempenho a partir dessa experiência, há boas chances de que alguém que tente reproduzir sua experiência usando exatamente os mesmos parâmetros encontre um valor de desempenho diferente (às vezes muito diferente). A menos, é claro, que você forneça a mesma divisão exata que não faz sentido.

Para voltar à sua pergunta, acho que você definitivamente deveria usar o CV para relatar seu desempenho (por exemplo, faça um CV de 10 vezes e relate a média e o desvio padrão da métrica de desempenho). Agora, para ajustar seu algoritmo, você pode usar um conjunto de validação muito menor, amostrado no conjunto de treinamento (verifique se ele não está incluído no conjunto de teste).

Se você tem medo de não encontrar os melhores hiperparâmetros usando um conjunto pequeno, provavelmente está ajustando seu algoritmo às especificidades do conjunto de dados. Se você não conseguir encontrar uma configuração usando uma pequena amostra que ofereça um desempenho razoável entre todas as dobras , o algoritmo provavelmente não será muito útil na prática.

Lembre-se também de que alguns algoritmos são muito lentos / não escalam bem em algumas configurações. Isso também faz parte da seleção prática de modelos.

Como você menciona SVMs, é claro que a maioria das implementações será lenta ao tentar encontrar parâmetros para kernels não lineares pela pesquisa em grade. A pesquisa em grade tem complexidade exponencial; portanto, use-a com muito poucos parâmetros. Lembre-se também de que a maioria das bibliotecas fornece parâmetros padrão sensíveis (ou pelo menos você define um parâmetro e há heurísticas para definir os outros).

oDDsKooL
fonte