tutorial - ¿Cómo resuelvo el sobreajuste en el bosque aleatorio de Python sklearn?
tutorial python machine learning (1)
Estoy usando RandomForestClassifier implementado en el paquete sklearn de Python para construir un modelo de clasificación binario. Los siguientes son los resultados de validaciones cruzadas:
Fold 1 : Train: 164 Test: 40
Train Accuracy: 0.914634146341
Test Accuracy: 0.55
Fold 2 : Train: 163 Test: 41
Train Accuracy: 0.871165644172
Test Accuracy: 0.707317073171
Fold 3 : Train: 163 Test: 41
Train Accuracy: 0.889570552147
Test Accuracy: 0.585365853659
Fold 4 : Train: 163 Test: 41
Train Accuracy: 0.871165644172
Test Accuracy: 0.756097560976
Fold 5 : Train: 163 Test: 41
Train Accuracy: 0.883435582822
Test Accuracy: 0.512195121951
Estoy usando la función "Precio" para predecir la "calidad", que es un valor ordinal. En cada validación cruzada, hay 163 ejemplos de capacitación y 41 ejemplos de prueba.
Al parecer, el sobreajuste se produce aquí. Entonces, ¿hay algún parámetro provisto por sklearn que pueda usarse para superar este problema? Encontré algunos parámetros here , por ejemplo, min_samples_split y min_sample_leaf, pero no entiendo bien cómo ajustarlos.
¡Gracias por adelantado!
Estoy de acuerdo con @Falcon y el tamaño del conjunto de datos. Es probable que el problema principal sea el pequeño tamaño del conjunto de datos. Si es posible, lo mejor que puede hacer es obtener más datos, cuantos más datos (en general) es menos probable que se adapte, ya que los patrones aleatorios que parecen predictivos comienzan a ahogarse a medida que aumenta el tamaño del conjunto de datos.
Dicho esto, me gustaría ver los siguientes parámetros:
- n_estimadores: @Falcon está equivocado, en general, mientras más árboles haya, menos probable será que el algoritmo se adapte excesivamente. Así que intenta aumentar esto . Cuanto menor sea este número, más cerca estará el modelo de un árbol de decisión, con un conjunto de características restringido.
- max_features: intente reducir este número (intente 30-50% del número de funciones). Esto determina cuántas características se asignan aleatoriamente a cada árbol. Cuanto más pequeño, menos probable es que se adapte excesivamente, pero demasiado pequeño comenzará a introducirse por debajo del ajuste.
- max_depth: Experimenta con esto. Esto reducirá la complejidad de los modelos aprendidos, reduciendo el riesgo de ajuste. Intenta comenzar de a poco, digamos 5-10, y aumentando, obtendrás el mejor resultado.
- min_samples_leaf: Intente establecer esto en valores mayores que uno. Esto tiene un efecto similar al parámetro max_depth, significa que la rama dejará de dividirse una vez que las hojas tengan ese número de muestras cada una.
Tenga en cuenta al hacer este trabajo para ser científico. Use 3 conjuntos de datos, un conjunto de entrenamiento, un conjunto de datos de ''desarrollo'' separado para ajustar sus parámetros, y un conjunto de prueba que pruebe el modelo final, con los parámetros óptimos. Solo cambie un parámetro a la vez y evalúe el resultado. O experimente con el algoritmo de búsqueda de grillas de Sklearn para buscar a través de estos parámetros de una vez.