with utilizar tutorial porque machine learning imagenes español ejemplos ejemplo clasificador basicos machine-learning neural-network deep-learning tensorflow perceptron

machine learning - utilizar - Entrenamiento en datos desequilibrados usando TensorFlow



tensorflow python español (4)

(1) Está bien usar tu estrategia. También estoy trabajando con datos desequilibrados, que trato de utilizar primero métodos de muestreo descendente y de muestreo ascendente para que el conjunto de capacitación se distribuya de manera uniforme. O usando el método de conjunto para entrenar a cada clasificador con un subconjunto distribuido uniforme.

(2) No he visto ningún método para maximizar el AUROC. Mi idea es que AUROC se basa en una tasa positiva positiva y en una tasa positiva falsa, que no indica qué tan bien funciona en cada instancia. Por lo tanto, puede que no necesariamente maximice la capacidad de separar las clases.

(3) Con respecto a la ponderación del costo por la proporción de instancias de clase, es similar a la función Pérdida para el clasificador binario desequilibrado de clase en el flujo de Tensor y la respuesta.

La situación:

Me pregunto cómo usar TensorFlow de manera óptima cuando mis datos de entrenamiento están desequilibrados en la distribución de etiquetas entre 2 etiquetas. Por ejemplo, supongamos que el tutorial MNIST se simplifica para distinguir solo entre 1 y 0, donde todas las imágenes disponibles para nosotros son 1 o 0. Es fácil entrenar usando los tutoriales proporcionados de TensorFlow cuando tenemos aproximadamente el 50% de cada tipo de imagen para entrenar y probar. Pero, ¿qué pasa con el caso donde el 90% de las imágenes disponibles en nuestros datos son 0 y solo el 10% son 1? Observo que en este caso, TensorFlow predice rutinariamente que todo mi conjunto de pruebas sea 0, logrando una precisión de un 90% sin sentido.

Una estrategia que he usado para cierto éxito es elegir lotes aleatorios para entrenamiento que tienen una distribución uniforme de 0 y 1. Este enfoque garantiza que aún pueda usar todos mis datos de entrenamiento y produje resultados decentes, con menos del 90% de precisión, pero un clasificador mucho más útil. Dado que la precisión es algo inútil para mí en este caso, mi métrica de elección es típicamente un área bajo la curva ROC (AUROC), y esto produce un resultado respetablemente mayor que .50.

Preguntas:

(1) ¿Es la estrategia que he descrito una forma aceptada u óptima de capacitación sobre datos desequilibrados, o existe una que podría funcionar mejor?

(2) Dado que la métrica de precisión no es tan útil en el caso de datos desequilibrados, ¿existe otra métrica que pueda maximizarse alterando la función de costo? Ciertamente puedo calcular AUROC después del entrenamiento, pero ¿puedo entrenar de tal manera que maximice AUROC?

(3) ¿Hay alguna otra alteración que pueda hacer en mi función de costo para mejorar mis resultados para datos desequilibrados? Actualmente, estoy usando una sugerencia predeterminada dada en los tutoriales de TensorFlow:

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

He escuchado que esto puede ser posible al aumentar el costo de categorizar incorrectamente la clase de etiqueta más pequeña, pero no estoy seguro de cómo hacerlo.


1) si. Esta es una estrategia bien recibida para contrarrestar los datos desequilibrados. Pero esta estrategia es buena en redes neuronales solo si usas SGD.

Otra forma fácil de equilibrar los datos de entrenamiento es usando ejemplos ponderados. Simplemente amplifique la pérdida por instancia con un peso mayor / más pequeño cuando vea ejemplos desequilibrados. Si usa el descenso de gradiente en línea, puede ser tan simple como usar una velocidad de aprendizaje mayor / menor al ver ejemplos desequilibrados.

No estoy seguro acerca de 2.


Con respecto a los conjuntos de datos desequilibrados, los dos primeros métodos que vienen a la mente son (ponderar muestras positivas, muestrear para lograr distribuciones de lotes equilibradas).

Ponderación de muestras positivas Esto se refiere a aumentar las pérdidas de muestras positivas mal clasificadas cuando se entrena en conjuntos de datos que tienen muchas menos muestras positivas. Esto incentiva el algoritmo ML para aprender los parámetros que son mejores para muestras positivas. Para la clasificación binaria, existe una API simple en tensorflow que logra esto. Ver (weighted_cross_entropy) referenciada a continuación

Muestreo por lotes Esto implica muestrear el conjunto de datos para que cada lote de datos de entrenamiento tenga una distribución uniforme de muestras positivas a muestras negativas. Esto se puede hacer utilizando la API de muestreo de rechazos proporcionada por tensorflow.


Soy uno que lucha con datos desequilibrados. Mi estrategia para contrarrestar los datos desequilibrados es la siguiente.

1) Utilice la función de costo que calcula las etiquetas 0 y 1 al mismo tiempo, como se muestra a continuación.

cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(_pred) + (1-y)*tf.log(1-_pred), reduction_indices=1))

2) Use SMOTE, método de sobremuestreo que hace que el número de etiquetas 0 y 1 sea similar. Consulte aquí, http://comments.gmane.org/gmane.comp.python.scikit-learn/5278

Ambas estrategias funcionaron cuando intenté hacer un modelo de calificación crediticia.

La regresión logística es un método típico para manejar datos desequilibrados y clasificación binaria, como la predicción de la tasa de incumplimiento. AUROC es uno de los mejores indicadores para contrarrestar los datos desequilibrados.