La ciencia de datos: validación cruzada en python

Validación cruzada es fácil con Python. Si los equipos de prueba pueden proporcionar resultados inestables debido a la toma de muestras en la ciencia de datos, la solución es muestrear sistemáticamente un cierto número de unidades de prueba y que la media de los resultados. Es un enfoque estadístico (observar muchos resultados y tomar un promedio de ellos), y esa es la base de la validación cruzada. La receta es sencilla:

  1. Dividir los datos en pliegues (cada pliegue es un contenedor que tiene una distribución uniforme de los casos), normalmente 10, pero doblar tamaños de 3, 5, y 20 son opciones alternativas viables.

    Video: Sesión 1. Introducción a Python y Primeros pasos en Ciencia de Datos

  2. Extiende un rebaño como un conjunto de pruebas y el uso de los demás como conjuntos de entrenamiento.

  3. Tren y grabar el resultado de prueba.

    Si tiene pocos datos, es mejor utilizar un mayor número de pliegues, debido a que la cantidad de datos y el uso de pliegues adicionales afecta positivamente a la calidad de la formación.

  4. Realizar los pasos 2 y 3 de nuevo, usando cada pliegue a su vez como un conjunto de ensayo.

    Video: Aprendizaje Estadístico. Clase 08: Errores de Ajuste y Predicción, Validación cruzada

  5. Calcular la media y la desviación estándar de todos los resultados de la prueba de los pliegues.

    El promedio es un estimador fiable de la calidad de su predictor. La desviación estándar le dirá la fiabilidad predictor (si es demasiado alta, el error de validación cruzada podría ser imprecisa). Esperar que los predictores con alta varianza tendrán una alta desviación estándar de validación cruzada.

A pesar de que esta técnica puede parecer complicada, scikit-learn maneja utilizando una sola clase:

gt; gt; gt; de sklearn.cross_validation cross_val_score importación

El uso de validación cruzada en k pliegues

Con el fin de ejecutar la validación cruzada, primero tiene que inicializar un iterador. KFold es el iterador que implementa k pliega la validación cruzada. Hay otros iteradores disponibles en el sklearn.cross_validation módulo, la mayoría deriva de la práctica estadística, pero KFolds es el más ampliamente utilizado en la práctica la ciencia de datos.

KFolds requiere que se especifique el número de observaciones son en su muestra (la norte parámetro), especifique la n_folds número, e indique si desea mezclar los datos (mediante el uso de la barajar parámetro). Como regla general, cuanto mayor sea la varianza esperada, más que aumentar el número de pliegues que puede proporcionar una mejor estimación significar. Es una buena idea para mezclar los datos, porque los datos solicitados pueden introducir confusión en los procesos de aprendizaje si las primeras observaciones son diferentes de los últimos.

después de ajustar KFolds, llama a cross_val_score función, que devuelve una matriz de resultados con una puntuación (de la función de puntuación) para cada veces la validación cruzada. Usted tiene que proporcionar cross_val_score con sus datos (tanto x y y) Como una entrada, su estimador (la clase de regresión), y la instanciado anteriormente KFolds iterador (la CV parámetro).

Video: GAMES #9: Introducción a Python para computación científica

En cuestión de unos pocos segundos o minutos, dependiendo del número de pliegues y los datos procesados, la función devuelve los resultados. Usted hace un promedio de estos resultados para obtener una estimación de la media, y también se puede calcular la desviación estándar para comprobar qué tan estable es la media.

validación cruzada = KFold (n = X.shape [0], n_folds = 10, barajadura = True, random_state = 1) las puntuaciones = cross_val_score (regresión, X, Y, puntuación = `mean_squared_error`, cv = validación cruzada, n_jobs = 1) de impresión `Folds:% i, error cuadrático medio:% .2f std:% .2f` % (len (puntuaciones), np.mean (np.abs (puntuaciones)), np.std (puntuaciones)) Se pliega: 10, significa de error al cuadrado: 23,76 std: 12.13

Validación cruzada puede trabajar en paralelo, porque no hay una estimación depende de ninguna otra estimación. Usted puede tomar ventaja de los múltiples núcleos presentes en su ordenador estableciendo el parámetro n_jobs = -1.

estratificaciones de muestreo para datos complejos

pliegues de validación cruzada se deciden por muestreo aleatorio. A veces puede ser necesario realizar un seguimiento de si y cuánto de una determinada característica está presente en la formación y la prueba de los pliegues para evitar muestras malformados. Por ejemplo, el conjunto de datos Boston tiene una variable binaria (una característica que tiene un valor de 1 ó 0) indica si la casa delimita el río Charles.

Esta información es importante para entender el valor de la casa y determinar si las personas les gustaría pasar más por ello. Se puede ver el efecto de esta variable usando el siguiente código.

pandas importación como Pddf = pd.DataFrame (X, columnas = boston.feature_names) DF [ ‘target’] = yboxplot = df.boxplot ( ‘objetivo’, por ‘CHAS’ =, return_type = ‘ejes’)

Un diagrama de caja revela que las casas en el río tienden a tener valores más altos que otras casas. Por supuesto, hay casas caras todo alrededor de Boston, pero hay que mantener un ojo sobre el número de casas que se está analizando río debido a que su modelo tiene que ser general para todos Boston, no sólo casas Charles River.

Diagrama de caja del resultado objetivo, agrupados por Chas.
Diagrama de caja del resultado objetivo, agrupados por Chas.

En situaciones similares, cuando una característica es rara o influyentes, no se puede estar seguro cuando está presente en la muestra debido a que los pliegues son creados de forma aleatoria. Tener demasiados o demasiado pocos de una característica particular en cada pliegue implica que el algoritmo de aprendizaje de máquina puede derivar reglas incorrectas.

los StratifiedKFold clase proporciona una forma sencilla de controlar el riesgo de la construcción de muestras con formato incorrecto durante los procedimientos de validación cruzada. Se puede controlar el muestreo de modo que ciertas características, o incluso ciertos resultados (cuando las clases objetivo son extremadamente desequilibrada), siempre estará presente en sus pliegues en la proporción adecuada. Sólo tiene que señalar la variable que desea controlar mediante el uso de la y parámetro.

de importación sklearn.cross_validation StratifiedKFoldstratification = StratifiedKFold (Y = X [:, 3], n_folds = 10, barajadura = True, random_state = 1) las puntuaciones = cross_val_score (regresión, X, Y, puntuación = `mean_squared_error`, cv = estratificación, n_jobs = 1) de impresión `estratificado% i pliegues significa validación cruzada` + `error cuadrático:% .2f std:% .2f` % (len (puntuaciones), np.mean (np.abs (puntuaciones)), np.std (puntuaciones)) estratificado 10 pliegues de validación cruzada error cuadrático medio: 23,70 std: 6,10

Aunque el error de validación es similar, mediante el control de la CARBONIZARSE variable, el error estándar de las estimaciones disminuye, por lo que usted consciente de que la variable estaba influyendo en los resultados anteriores de validación cruzada.

Artículos Relacionados