Adivinando las características adecuadas para el aprendizaje automático

Tener muchas características para trabajar con puede parecer para hacer frente a la necesidad de aprender a comprender un problema totalmente máquina. Sin embargo, sólo tener características no soluciona cualquier cosa: usted necesita las características adecuadas para resolver los problemas. Sigue leyendo para asegurarse de que tiene las características adecuadas al realizar tareas de aprendizaje automático.

Definiendo el resultado de características que no trabajan en conjunto

Como se mencionó anteriormente, que tiene muchas características y hacer que trabajen juntos pueden indicar incorrectamente que el modelo está funcionando bien, cuando en realidad no lo es. A menos que utilice la validación cruzada, medidas de error tales como R2 puede ser engañoso porque el número de características puede inflar fácilmente, incluso si la función no contiene información relevante. El siguiente ejemplo muestra lo que ocurre con R2 cuando se agrega características simplemente al azar.

de sklearn.cross_validation train_test_split importación

de sklearn.metrics r2_score importación

X_train, X_test, y_train, y_test = train_test_split (X,

y, test_size = 0,33, random_state = 42)

comprobar = [2 ** i para i en el rango de (8)]

para i en el rango de (2 ** 7 + 1):

X_train = np.column_stack ((X_train, np.random.random (

X_train.shape [0])))

X_test = np.column_stack ((X_test, np.random.random (

X_test.shape [0])))

regression.fit (X_train, y_train)

si el registro de entrada:

impresión ("características aleatorias:% i -gt; R2:% 0.3f" %

(I, r2_score (y_train, regression.predict (X_train))))

Lo que parece ser un aumento de la capacidad de predicción en realidad es sólo una ilusión. Puede revelar lo que pasó por el control del equipo de prueba y el descubrimiento de que el rendimiento de los modelos ha disminuido.

regression.fit (X_train, y_train)

Video: Refuerzo Educativo

print ( `R2% 0.3f`

% R2_score (y_test, regression.predict (X_test)))

# Tenga en cuenta que el resultado R2 puede cambiar de una ejecución a

# Ejecutar debido a la naturaleza aleatoria del experimento

R2 0,474

Solución de overfitting mediante el uso de selección

Regularización es una solución eficaz, rápido y fácil de implementar cuando se tiene muchas características y desea reducir la varianza de las estimaciones debido a la multicolinealidad entre los predictores. Regularización funciona mediante la adición de una sanción a la función de costos. La penalización es la suma de los coeficientes. Si los coeficientes son cuadrado (de modo que los valores positivos y negativos no pueden anularse entre sí), que es una regularización L2 (También llamado Cresta). Cuando se utiliza el coeficiente de valor absoluto, es una regularización L1 (También llamado Lazo).

Sin embargo, la regularización no siempre funciona perfectamente. L2 regularización mantiene todas las características en el modelo y equilibra la contribución de cada uno de ellos. En una solución L2, si dos variables se correlacionan bien, cada uno contribuye igualmente a la solución de una parte, mientras que sin regularización, su contribución compartida habría sido distribuido de manera desigual.

Alternativamente, L1 trae características altamente correlacionadas fuera del modelo al hacer su coeficiente cero, proponiendo así una verdadera selección entre características. De hecho, que fija el porcentaje a cero es igual que con exclusión de la función del modelo. Cuando multicolinealidad es alta, la elección de los cuales predictor para establecer a cero se vuelve un poco al azar, y se puede obtener varias soluciones caracterizadas por rasgos diferente excluidos. Tal inestabilidad solución puede resultar una molestia, por lo que la solución L1 menos que ideal.

Los estudiosos han encontrado una solución mediante la creación de diferentes soluciones basadas en L1 regularización y luego observar cómo se comportan los coeficientes de todas las soluciones. En este caso, el algoritmo recoge sólo los coeficientes estables (los que rara vez se fija a cero). Puede leer más sobre esta técnica en el Scikit-learn página web. El siguiente ejemplo se modifica el ejemplo expansiones polinomio utilizando L2 regularización (regresión Ridge) y reduce la influencia de los coeficientes redundantes creados por el procedimiento de expansión:

de sklearn.preprocessing PolynomialFeatures importación

de sklearn.cross_validation train_test_split importación

pf = PolynomialFeatures (grado = 2)

poly_X = pf.fit_transform (X)

X_train, X_test, y_train, y_test =

train_test_split (poly_X,

y, test_size = 0,33, random_state = 42)

sklearn.linear_model del canto de importación

reg_regression = cresta (alfa = 0,1, normalizar = True)

reg_regression.fit (X_train, y_train)

print ( `R2:% 0.3f`

Video: Cómo manejar un automóvil de transmisión automática

% R2_score (y_test, reg_regression.predict (X_test)))

R2: 0.819

El siguiente ejemplo se utiliza L1 regularización. En este caso, el ejemplo se basa en R, ya que proporciona una biblioteca eficaz para la regresión penalizado llamado glmnet. Puede instalar el soporte necesario con el siguiente comando:

(install.packages"glmnet")

profesores de Stanford y académicos Friedman, Hastie, Tibshirani, y Simon crearon este paquete. Prof. Trevor Hastie realidad mantiene el paquete R. El ejemplo mostrado a continuación intenta visualizar la ruta de coeficiente, que representa cómo cambia el valor del coeficiente de acuerdo con la fuerza de regularización. El parámetro lambda decide la fuerza de regularización. Como antes, el siguiente ejemplo R se basa en el conjunto de datos Boston, que se obtiene desde el paquete MASS.

datos (Boston, paquete ="MASA")

biblioteca (glmnet)

x lt; - as.matrix (escala (Boston [, 1: NcoI (Boston) -1]))

y lt; - as.numeric (Boston [, NcoI (Boston)])

encajar = glmnet (X, Y, familia ="gaussiano", Alfa = 1,

estandarizar = FALSE)

plot (en forma, xvar ="lambda", Label = TRUE, lwd = 2)


Visualizando el camino de coeficientes usando varios grados de L1 de regularización.

El gráfico representa todos los coeficientes mediante la colocación de sus valores normalizados en la ordenada, el eje vertical. En cuanto a como abscisa, la escala se utiliza una función de registro de lambda de manera que se obtiene una idea del valor pequeño de lambda en el extremo izquierdo del gráfico (en el que es como una regresión estándar). La abscisa muestra también otra escala, colocado en la parte superior de la tabla, que indica el número de coeficientes son distintos de cero en ese valor lambda.

De izquierda a derecha, se puede observar cómo los coeficientes disminuyen en valor absoluto hasta que se vuelven a cero, contando la historia de cómo afecta a la regularización de un modelo. Naturalmente, si usted sólo tiene que estimar un modelo y los coeficientes para las mejores predicciones, es necesario encontrar el valor lambda correcta utilizando la validación cruzada:

CV lt; - cv.glmnet (X, Y, familia ="gaussiano",

alfa = 1, estandarizar = FALSE)

coef (cv, s ="lambda.min")

Artículos Relacionados