Red de conocimiento informático - Material del sitio web - Cómo implementar una clasificación de bosque aleatoria en Python

Cómo implementar una clasificación de bosque aleatoria en Python

Cómo se pueden hacer predicciones en el algoritmo de bosque aleatorio utilizando métodos de clase del paquete scikit-learn. Uno de los mejores puntos es el uso específico de cada parámetro.

Lo siguiente es mi comprensión y traducción parcial:

Descripción del parámetro:

Los dos parámetros más importantes son n_estimators y max_features.

n_estimators: Indica el número de árboles que hay en el bosque. En teoría, más es mejor. Pero lo que sigue es un aumento en el tiempo de computación. Sin embargo, más grande no siempre es mejor. La mejor predicción se producirá con un número razonable de árboles.

max_features: seleccione aleatoriamente un subconjunto del conjunto de características para dividir los nodos. Cuanto menor es el número de subconjuntos, más rápido disminuye la varianza, pero al mismo tiempo aumenta el sesgo. Basado en una mejor experiencia práctica.

Si es un problema de regresión, max_features = n_features; si es un problema de clasificación, max_features = sqrt(n_features).

Si desea obtener mejores resultados, debe configurar max_ Depth=None, min_sample_split=1.

Recuerde también la validación cruzada y recuerde también que en bosques aleatorios, bootstrap=True.

Aquí hay otro artículo escrito por un extranjero: Ajuste de parámetros del modelo de bosque aleatorio/blog/2015/06/tuning-random-forest-model/

Aquí, utilicé scikit -learn los datos de iris incorporados para la predicción aleatoria de bosques:

]?

print?'instance?0?prediction;',rf.prediction(instance[0])?< / p>

¿Imprimir? '¿instancia?1?predicción;',rf.predict(instancia[1])?

print?iris.target[100],iris.target[109]?

Los resultados devueltos son los siguientes:

(150,)

[[ 6.3 ?3.3 ?6. ? 2.5] [ 7.2 ?3.6 ?6.1 ?2.5]]

predicción de instancia 0 [ 2.]

instancia 1 predicción; [ 2.

2 2

Estoy un poco confundido porque en el paquete de algoritmos scikit-learn, un bosque aleatorio es en realidad un árbol de decisión. Pero en mi blog anterior sobre árboles de decisión, pude mostrar árboles de decisión. Pero los bosques aleatorios son cajas negras. No conocemos la estructura interna del árbol de decisión, ni siquiera cuáles son las características de selección del nodo padre. Por lo tanto, proporcioné el siguiente código (no es original para mí) que muestra la contribución de todas las funciones. Por lo tanto, para aquellas características que contribuyen poco o incluso negativamente, podemos considerar eliminar los valores de las características en esta columna para evitar una clasificación inútil.

[python]?ver plano?copiar

desde?sklearn.cross_validation?import?cross_val_score,?ShuffleSplit?

X?=?iris["datos "] ?

Y = iris["target"] ?

Nombres?=?iris["feature_names"] ?

rf?=?RandomForestRegressor( )?

puntuaciones?=?[]?

para?

puntuaciones =?

cv=ShuffleSplit(len(X) ,?3,? .3))?

puntuaciones.append((round(np.mean(puntuación),?3),?nombres[i])?

imprimir ?

Los resultados mostrados son los siguientes:

[(0.934, 'Ancho del pétalo (cm)'), (0.929, 'Longitud del pétalo (cm)'), (0.597, 'Longitud del sépalo (cm)'), (0.276, 'Ancho del sépalo (cm)')]

Aquí podemos ver que el ancho y el largo de los pétalos son los que más contribuyen a las características, seguidos by es la longitud del sépalo, y el menos afectado es el ancho del sépalo