Quais são as duas precisões que comparo para ver se o modelo está sobreajustado ou não?
Você deve comparar as precisões de treinamento e teste para identificar ajustes excessivos. Uma precisão de treinamento subjetivamente muito maior que a precisão do teste indica excesso de ajuste.
Aqui, a "precisão" é usada em sentido amplo, pode ser substituída por F1, AUC, erro (aumento se torna menor, mais alto se torna menor), etc.
Sugiro partes de "Viés e variância" e "Curvas de aprendizado" de " Machine Learning Yearning - Andrew Ng ". Apresenta tramas e interpretações para todos os casos com uma narração clara.
Quando executo 10 vezes a validação cruzada, recebo 10 precisões nas quais posso obter a média / média. devo chamar isso de precisão de validação?
Não. É uma [estimativa da] precisão do teste.
A diferença entre os conjuntos de validação e teste (e suas precisões correspondentes) é que o conjunto de validação é usado para criar / selecionar um modelo melhor, o que significa que afeta o modelo final. No entanto, como o CV de 10 vezes sempre testa um modelo já construído em seus 10% de retenção, e não é usado aqui para selecionar entre modelos, seus 10% de retenção são um conjunto de testes e não um conjunto de validação.
Posteriormente, testei o modelo com 30% de dados e obtenho a precisão do teste.
Se você não usar a dobra K para selecionar entre vários modelos, esta parte não é necessária, execute a dobra K em 100% dos dados para obter a precisão do teste. Caso contrário, você deve manter esse conjunto de testes, pois o resultado da dobra em K seria uma precisão de validação.
Nesse caso, qual será a precisão do treinamento?
Em cada uma das 10 dobras, você pode obter uma precisão de teste em 10% dos dados e uma precisão de treinamento em 90% dos dados. Em python, o método cross_val_score
calcula apenas as precisões do teste. Aqui está como calcular os dois:
from sklearn import model_selection
from sklearn import datasets
from sklearn import svm
iris = datasets.load_iris()
clf = svm.SVC(kernel='linear', C=1)
scores = model_selection.cross_validate(clf, iris.data, iris.target, cv=5, return_train_score=True)
print('Train scores:')
print(scores['train_score'])
print('Test scores:')
print(scores['test_score'])
Defina return_estimator = True
para obter os modelos treinados também.
Mais sobre conjunto de validação
O conjunto de validação aparece em dois casos gerais: (1) construção de um modelo e (2) seleção entre vários modelos,
Dois exemplos para a construção de um modelo: (a) paramos de treinar uma rede neural ou (b) paramos de podar uma árvore de decisão quando a precisão do modelo no conjunto de validação começa a diminuir. Em seguida, testamos o modelo final em um conjunto estendido, para obter a precisão do teste.
Dois exemplos para selecionar entre vários modelos:
uma. Fazemos o CV dobrável em K em uma rede neural com 3 camadas e uma com 5 camadas (para obter modelos K para cada uma) e, em seguida, selecionamos o NN com a maior precisão de validação média dos modelos K; suponha que o NN de 5 camadas. Finalmente, treinamos o NN de 5 camadas em um trem de 80%, uma divisão de validação de 20% das dobras K combinadas e o testamos em um conjunto estendido para obter a precisão do teste.
b. Aplicamos dois modelos de árvore de decisão e SVM já criados em um conjunto de validação e, em seguida, selecionamos aquele com a maior precisão de validação. Por fim, testamos o modelo selecionado em um conjunto estendido para obter a precisão do teste.
A validação cruzada divide seus dados em K dobras. Cada dobra contém um conjunto de dados de treinamento e dados de teste. Você está certo de obter K taxas de erro diferentes das quais você calcula a média. Essas taxas de erro são provenientes do conjunto de testes de cada uma das suas K dobras. Se você deseja obter a taxa de erro de treinamento, calcule a taxa de erro na parte de treinamento de cada uma dessas K dobras e faça a média.
fonte