Ciência de dados: cross-validando em python

Cross-validação é fácil com o Python. Se conjuntos de teste pode fornecer resultados instáveis ​​por causa de amostragem na ciência de dados, a solução é para provar sistematicamente um certo número de conjuntos de teste e, em seguida, a média dos resultados. É uma abordagem estatística (para observar muitos resultados e ter uma média deles), e que é a base da validação cruzada. A receita é simples:

  1. Dividir os dados em dobras (cada dobra é um recipiente que contém uma distribuição uniforme dos casos), geralmente 10, mas dobra tamanhos de 3, 5, e 20 são alternativas viáveis.

  2. Estenda uma dobra como um conjunto de teste e usar os outros como conjuntos de treinamento.

  3. Treinar e gravar o resultado conjunto de teste.

    Se você tem poucos dados, é melhor usar um número maior de dobras, porque a quantidade de dados eo uso de dobras adicionais afeta positivamente a qualidade da formação.

  4. Efectuar os Passos 2 e 3 de novo, utilizando cada dobra, por sua vez como um conjunto de teste.

  5. Calcular a média e o desvio padrão de todos os resultados do teste das pregas.

    A média é de um estimador de confiança da qualidade de sua previsão. O desvio padrão irá dizer-lhe a confiabilidade preditor (se for muito alta, o erro de validação cruzada poderia ser imprecisa). Esperar que preditores com alta variância terá uma alta de validação cruzada desvio padrão.

Mesmo que esta técnica pode parecer complicado, scikit-learn manipula-lo usando uma única classe:

gt; gt; gt; de sklearn.cross_validation cross_val_score importação

Usando validação cruzada em dobras k

Para executar a validação cruzada, você primeiro tem que inicializar um iterador. KFold é a iteração que implementa k dobras de validação cruzada. Há outras iterators disponíveis a partir do sklearn.cross_validation módulo, principalmente derivada da prática estatística, mas KFolds é o mais utilizado na prática da ciência de dados.

KFolds requer que você especifique quantas observações são na sua amostra (o n parâmetro), especifique o n_folds número, e indicar se deseja embaralhar os dados (usando o embaralhar parâmetro). Como regra geral, quanto maior a variância esperada, mais que o aumento do número de dobras pode fornecer-lhe uma estimativa melhor dizer. É uma boa idéia para embaralhar os dados porque os dados solicitados podem introduzir confusão nos processos de aprendizagem se as primeiras observações são diferentes dos últimos.



depois de definir KFolds, Ligar para cross_val_score , que devolve um conjunto de resultados contendo uma pontuação (a partir da função de pontuação) para cada dobra de validação cruzada. Você tem que fornecer cross_val_score com seus dados (tanto X e y) Como uma entrada, o estimador (a classe de regressão), e os já instanciado KFolds iteração (a cv parâmetro).

Em uma questão de alguns segundos ou minutos, dependendo do número de dobras e dados processados, a função devolve os resultados. Você média desses resultados para obter uma estimativa média, e você também pode calcular o desvio padrão para verificar quão estável a média é.

validação cruzada = KFold (n = X.shape [0], n_folds = 10, baralhamento = True, random_state = 1) = contagens cross_val_score (regressão, X, Y, pontuação = `mean_squared_error`, CV = validação cruzada, n_jobs = 1) de impressão `Folds:% i, o erro médio quadrado:% .2f std:% .2f` % (len (escores), np.mean (np.abs (escores)), np.std (escores)) Dobras: 10, com média erro ao quadrado: 23.76 std: 12.13

Cross-validação podem trabalhar em paralelo, porque nenhuma estimativa depende de qualquer outra estimativa. Você pode tirar proveito dos múltiplos núcleos presentes no seu computador, definindo o parâmetro n_jobs = -1.

estratificações de amostragem para dados complexos

dobras de validação cruzada são decididas por amostragem aleatória. Às vezes pode ser necessário para controlar se e como muito de uma determinada característica está presente na formação e teste de dobras para evitar amostras malformados. Por exemplo, o conjunto de dados Boston tem uma variável binária (um recurso que tem um valor de 1 ou 0) indicando se a casa circunda o rio Charles.

Esta informação é importante para compreender o valor da casa e determinar se as pessoas gostariam de passar mais por isso. Você pode ver o efeito dessa variável usando o seguinte código.

pandas importação como pddf = pd.DataFrame (X, colunas = boston.feature_names) df [ ‘alvo’] = yboxplot = df.boxplot ( ‘alvo’, por ‘CARROÇ’ =, return_type = ‘eixos’)

Um boxplot revela que as casas no rio tendem a ter valores mais elevados do que outras casas. Claro, existem casas caras em todo Boston, mas você tem que manter um olho sobre quantas rio casas que você está analisando porque o seu modelo tem que ser geral para todos Boston, não apenas casas Charles River.

Boxplot do resultado alvo, agrupados por Chas.
Boxplot do resultado alvo, agrupados por Chas.

Em situações semelhantes, quando uma característica é raro ou influente, você não pode ter certeza de quando ele está presente na amostra, porque as dobras são criados de forma aleatória. Ter muitos ou poucos de uma característica particular em cada dobra implica que o algoritmo de aprendizado de máquina pode derivar regras incorretas.

o StratifiedKFold classe oferece uma maneira simples para controlar o risco da construção de amostras mal formadas durante os procedimentos de validação cruzada. Ele pode controlar a amostragem de modo que certas características, ou mesmo certos resultados (quando as classes alvo são extremamente desequilibrada), estará sempre presente em suas dobras na proporção certa. Você só precisa apontar a variável que deseja controlar usando a y parâmetro.

sklearn.cross_validation de importação StratifiedKFoldstratification = StratifiedKFold (Y = X [:, 3], n_folds = 10, baralhamento = True, random_state = 1) = contagens cross_val_score (regressão, X, Y, pontuação = `mean_squared_error`, CV = estratificação, n_jobs = 1) print `estratificada% i dobras validação cruzada significa` + `ao quadrado erro:% .2f std:% .2f` % (len (escores), np.mean (np.abs (escores)), np.std (pontuação)) estratificada 10 dobras validação cruzada do erro quadrático médio: 23.70 std: 6.10

Embora o erro de validação é semelhante, controlando a CARACTERES variável, o erro padrão das estimativas diminui, tornando-o consciente de que a variável estava influenciando os resultados de validação cruzada anteriores.


Publicações relacionadas