Pregunta

Tengo un conjunto de datos con las siguientes especificaciones:

  • formación de datos con 193,176 muestras con 2.821 positivos
  • Prueba conjunto de datos con 82,887 muestras con 673 positivos
  • Hay 10 características.

Quiero realizar una clasificación binaria (0 ó 1). El problema que estoy enfrentando es que los datos son muy desequilibrada. Después de la normalización y la ampliación de los datos, junto con algo de ingeniería función y el uso de un par de diferentes algoritmos, estos son los mejores resultados que podía lograr:

mean square error : 0.00804710026904
Confusion matrix : [[82214   667]
                   [    0     6]]

es decir sólo 6 éxitos positivos correctos. Esto es mediante regresión logística. Aquí están las varias cosas que probé con esto:

  • Los diferentes algoritmos como randomForest, DecisionTree, SVM
  • Cambio de parámetros de valor para llamar a la función
  • Algunos de ingeniería característica basada en la intuición para incluir características compuestas

Ahora, mis preguntas son:

  1. ¿Qué puedo hacer para mejorar el número de éxitos positivos?
  2. ¿Cómo se puede determinar si hay un sobreajuste en este caso, un? (He intentado trazar etc.)
  3. ¿En qué momento se podría concluir si tal vez este es el mejor ajuste posible que pudiera tener? (Que parece triste teniendo en cuenta sólo 6 golpes de 673)
  4. ¿Hay una manera de que pudiera hacer que los casos de muestra positivos pesan más que el reconocimiento de patrones mejora que lleva a más golpes?
  5. ¿Qué representaciones gráficas podrían ayudar a detectar valores atípicos o alguna intuición sobre qué patrón encajaría mejor?

Estoy utilizando el scikit-learn biblioteca con Python y todas las implementaciones son funciones de la biblioteca.

editar

Estos son los resultados con algunos otros algoritmos:

Random Bosque clasificador (n_estimators = 100)

[[82211   667]
[    3     6]]

Árboles de decisión:

[[78611   635]
[ 3603    38]]
¿Fue útil?

Solución

  1. Since you are doing binary classification, have you tried adjusting the classification threshold? Since your algorithm seems rather insensitive, I would try lowering it and check if there is an improvement.

  2. You can always use Learning Curves, or a plot of one model parameter vs. Training and Validation error to determine whether your model is overfitting. It seems it is under fitting in your case, but that's just intuition.

  3. Well, ultimately it depends on your dataset, and the different models you have tried. At this point, and without further testing, there can not be a definite answer.

  4. Without claiming to be an expert on the topic, there are a number of different techniques you may follow (hint: first link on google), but in my opinion you should first make sure you choose your cost function carefully, so that it represents what you are actually looking for.

  5. Not sure what you mean by pattern intuition, can you elaborate?

By the way, what were your results with the different algorithms you tried? Were they any different?

Otros consejos

Since the data is very skewed, in such a case we can also try model training after over-sampling data.

SMOTE and ADASYN are some of the techniques that we can use to over-sample the data.

Licenciado bajo: CC-BY-SA con atribución
scroll top