python - run - scikit voting classifier
scikit-learn: parĂ¡metros de class_weight y sample_weight de forest aleatorio (1)
Los RandomForests están construidos sobre árboles, que están muy bien documentados. Comprueba cómo Trees usa la ponderación de la muestra:
- Guía del usuario sobre árboles de decisión : indica exactamente qué algoritmo se utiliza
- Árbol de decisión API - explica cómo sample_weight es utilizado por los árboles (que para los bosques aleatorios, como usted ha determinado, es el producto de class_weight y sample_weight).
En cuanto a la diferencia entre class_weight
y sample_weight
: mucho se puede determinar simplemente por la naturaleza de sus tipos de datos. sample_weight
es 1D array de longitud n_samples
, asignando un peso explícito a cada ejemplo utilizado para el entrenamiento. class_weight
es un diccionario de cada clase con un peso uniforme para esa clase (por ejemplo, {1:.9, 2:.5, 3:.01}
), o es una cadena que le dice a sklearn cómo determinar automáticamente este diccionario.
Entonces el peso de entrenamiento para un ejemplo dado es el producto de su nombre explícito sample_weight
(o 1
si sample_weight
no se proporciona), y es class_weight
(o 1
si class_weight
no se proporciona).
Tengo un problema de desequilibrio de clase y he estado experimentando con un Random Forest ponderado usando la implementación en scikit-learn (> = 0.16).
Me he dado cuenta de que la implementación toma un parámetro class_weight en el constructor de árbol y el parámetro sample_weight en el método de ajuste para ayudar a resolver el desequilibrio de clase. Esos dos parecen multiplicarse para decidir el peso final.
Tengo problemas para entender lo siguiente:
- ¿En qué etapas de la construcción del árbol / entrenamiento / predicción se utilizan esos pesos? He visto algunos papeles para árboles pesados, pero no estoy seguro de qué es lo que scikit implementa.
- ¿Cuál es exactamente la diferencia entre class_weight y sample_weight?