[Clasificación SkLearn, algoritmo de regresión] Clasificador de bosque aleatorio RandomForestClassifier



RandomForestClassifier

class sklearn.ensemble.RandomForestClassifier (n_estimators=10, criterion=’gini’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,
max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,
n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)

El bosque aleatorio es un algoritmo de ensamble de Bagging muy representativo. Todos sus evaluadores base son árboles de decisión. El bosque compuesto por árboles de clasificación se llama clasificador de bosque aleatorio y el bosque integrado por árboles de regresión se llama regresor de bosque aleatorio.


Ⅰ. Parámetros básicos

parámetro sentido
criterio Una medida de impureza, hay dos opciones: coeficiente de Gini y entropía de información
máxima profundidad La profundidad máxima del árbol, se cortarán las ramas que superen la profundidad máxima.
min_samples_leaf Cada nodo hijo de un nodo después de la bifurcación debe contener al menos min_samples_leaf muestras de entrenamiento, de lo contrario no se producirá la bifurcación.
min_samples_split Un nodo debe contener al menos min_samples_split muestras de entrenamiento antes de que se permita la ramificación de este nodo; de lo contrario, no se producirá la ramificación
max_features Limite el número de características consideradas al realizar la ramificación. Las características que excedan el límite serán descartadas. El valor predeterminado es la raíz cuadrada del número total de características.
min_impurity_decrease Limite el tamaño de la ganancia de información, la rama con la ganancia de información menor que el valor establecido no ocurrirá

El significado de estos parámetros en el bosque aleatorio es exactamente el mismo que explicamos cuando subimos el árbol de decisión. Cuanto mayor sea la precisión de un árbol de decisión único, mayor será la precisión del bosque aleatorio, porque el método de ensacado depende de la Valor medio o La minoría obedece al principio de mayoría para determinar el resultado de la integración.

Volver arriba


Ⅱ. Parámetros importantes n_estimators

Este es 随机森林中树木的数量el número de evaluadores básicos.Este parámetro tiene un efecto monótono en la precisión del modelo de bosque aleatorio. Cuanto más grandes sean los n_estimadores, mejor será el efecto del modelo.. Pero después de acuerdo con esto, el modelo tiene ninguna frontera de decisión, n_estimators hasta cierto punto, la exactitud de los bosques aleatorios tienden a no subir o comenzó a fluctuar, y, n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越长. Para este parámetro, la demanda está ansiosa por encontrar un equilibrio entre la dificultad del entrenamiento y el efecto del modelo.

Volver arriba


Ⅲ. Conjunto de datos de vino de exploración forestal aleatoria

import pandas as pd
from matplotlib import pyplot as plt
from sklearn.datasets import load_wine
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier

# 加载数据集
wine = load_wine()
x = wine.data
y = wine.target

# 划分测试、训练集
from sklearn.model_selection import train_test_split
xtrain,xtest,ytrain,ytest = train_test_split(x,y,test_size=0.3)

# 构建模型训练数据集
clf = DecisionTreeClassifier(random_state = 0)
rfc = RandomForestClassifier(random_state = 0)
clf = clf.fit(xtrain,ytrain)
rfc = rfc.fit(xtrain,ytrain)

# 进行模型评估
score_clf = clf.score(xtest,ytest)
score_rfc = rfc.score(xtest,ytest)

print("决策树的分类评分:",score_clf)
print("随机森林的分类评分:",score_rfc)
决策树的分类评分: 0.8888888888888888
随机森林的分类评分: 0.9814814814814815

Se puede ver en los resultados que la evaluación del modelo del bosque aleatorio es más alta que la del árbol de decisión. Esto se debe a que el bosque aleatorio está compuesto por múltiples árboles de decisión diferentes y sus resultados a menudo están integrados por múltiples árboles de decisión, y los resultados correspondientes Sea preciso.

Volver arriba


Ⅳ. La validación cruzada dibuja la curva de aprendizaje y compara el árbol de decisiones y el bosque aleatorio

Validación cruzada: es un método para dividir el conjunto de datos en n partes, tomando cada uno como un conjunto de prueba y cada n-1 como un conjunto de entrenamiento, y entrenando el modelo muchas veces para observar la estabilidad del modelo.

# 交叉验证
from sklearn.model_selection import cross_val_score

rfc = RandomForestClassifier(n_estimators=25)
rfc_cross = cross_val_score(rfc,x,y,cv=10)

clf = DecisionTreeClassifier()
clf_cross = cross_val_score(clf,x,y,cv=10)

plt.plot(range(1,11),rfc_cross,label="RandomForestClassifier")
plt.plot(range(1,11),clf_cross,label="DecisionTreeClassifier")
plt.legend()
plt.show()

Inserte la descripción de la imagen aquí
El resultado de verificar a través de un conjunto de horquillas de precios no es suficiente para explicarlo, por lo que continuamos con la validación cruzada, realizamos diez conjuntos, cada conjunto se multiplica por diez y tomamos el promedio de los resultados para comparar los resultados con el árbol de decisión nuevamente.

rfc_l = []
clf_l = []
for i in range(10):
    rfc = RandomForestClassifier(n_estimators=25)
    rfc_cross = cross_val_score(rfc,x,y,cv=10).mean()
    rfc_l.append(rfc_cross)
    clf = DecisionTreeClassifier()
    clf_cross = cross_val_score(clf,x,y,cv=10).mean()
    clf_l.append(clf_cross)  
plt.plot(range(1,11),rfc_l,label="RandomForestClassifier")
plt.plot(range(1,11),clf_l,label="DecisionTreeClassifier")
plt.legend()
plt.show()

La figura evidentes por la siguiente, sustancialmente al azar bosques calificación es mucho más alto que el árbol de decisión, el árbol de decisiones y el cambio del bosque al azar es muy similar, ya que: 随机森林是多个决策树的集成结果,单个决策树的准确率越高,随机森林的准确率也会越高且装袋法是依赖于平均值或者少数服从多数原则来决定集成的结果的. Entonces, la tendencia de un solo evaluador básico también puede afectar la tendencia del resultado general de integración forestal aleatoria.
Inserte la descripción de la imagen aquí

Volver arriba


Ⅴ. Dibuja la curva de aprendizaje de n_estimator

# n_estimator学习曲线
superpa = []
for i in range(200):
    rfc = RandomForestClassifier(n_estimators=i+1,n_jobs=-1)
    rfc_s = cross_val_score(rfc,x,y,cv=10).mean()
    superpa.append(rfc_s)
print("最高准确率:",max(superpa),"此时的列表索引为:"superpa.index(max(superpa)))
plt.figure(figsize=[20,5])
plt.plot(range(1,201),superpa)
plt.show()

最高准确率:0.9888888888888889 此时的列表索引为:44

Se puede ver que cuando n_estimator alcanza un cierto valor, el resultado general 0.96-0.98fluctúa entre arriba y abajo y tiende a ser estable. Y hemos obtenido el resultado de evaluación de clasificación más alto, el índice en superpa es 44, es decir, en n_estimator=45ese momento, el modelo de clasificación forestal aleatoria funciona mejor.

Cualquier modelo tiene un límite de decisión. Una vez que n_estimators alcanza un cierto nivel, la precisión del bosque aleatorio a menudo no aumenta ni comienza a fluctuar. Además n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越长, este gráfico se ha estado ejecutando durante más de 3 minutos ~
Inserte la descripción de la imagen aquí

Volver arriba


Ⅵ. Parámetros, atributos e interfaces importantes

La esencia del bosque aleatorio es un algoritmo de ensacado El algoritmo de ensacado es promediar los resultados de predicción del evaluador base o usar el principio de votación por mayoría para determinar el resultado del evaluador integrado. En el ejemplo del vino tinto de ahora, hemos establecido 25 árboles Para cualquier muestra, bajo el principio de votación promedio o mayoritaria, si y solo si hay más de 13 árboles incorrectos, el bosque aleatorio juzgará el error. La precisión de un solo árbol de decisión en el conjunto de datos de vino tinto es de aproximadamente 0,85. Suponiendo que la probabilidad de error de juicio de un árbol es 0,2 (E), la probabilidad de un error de juicio de más de 20 árboles es:
Inserte la descripción de la imagen aquí
donde i es el juicio El número de errores es también el número de árboles que se juzgan incorrectos. E es la probabilidad de que un árbol se juzgue incorrectamente y (1-E) es la probabilidad de juzgar correctamente. Hay 25-i juicios correctos en total. La combinación se usa debido a los 25 árboles, cualquier árbol se juzga incorrectamente.

import numpy as np
from scipy.special import comb
np.array([comb(25,i)*(0.2**i)*((1-0.2)**(25-i)) for i in range(13,26)]).sum()

0.00036904803455582827

Puede verse que la probabilidad de error de juicio es muy pequeña, lo que hace que el rendimiento del bosque aleatorio en el conjunto de datos de vino tinto sea mucho mejor que el de un solo árbol de decisión.
Ahora hay un problema: decimos que el método de ensacado obedece al principio de votación por mayoría o promedia los resultados del clasificador base, lo que significa que por defecto cada árbol del bosque debe ser diferente y arrojará resultados diferentes. Imagine que si los resultados del juicio de todos los árboles en el bosque aleatorio son los mismos (todos los juicios son correctos o todos los juicios son incorrectos), entonces no importa qué principio de integración se aplique al bosque aleatorio para obtener el resultado, no debería ser mejor que un solo árbol de decisiones. El efecto es correcto. Pero usamos la misma clase DecisionTreeClassifier, los mismos parámetros, el mismo conjunto de entrenamiento y conjunto de pruebas, ¿por qué muchos árboles en el bosque aleatorio tienen diferentes resultados de juicio?

Hizo esta pregunta, muchas pequeñas socios podrían pensar: sklearnDecision中的分类树 TreeClassifier自带随机性,所以随机森林中的树天生就都是不一样的. Mencionamos cuando explicamos el árbol de clasificación,El árbol de decisión selecciona aleatoriamente una característica de las características más importantes para ramificar, por lo que el árbol de decisión generado es diferente cada vez, esta función está controlada por el parámetro random_state. De hecho, también hay random_state en el bosque aleatorio, y su uso es similar al de los árboles de clasificación, exceptoEn el árbol de clasificación, un estado aleatorio solo controla la generación de un árbol, y el estado aleatorio en los controles del bosque aleatorio 生成森林的模式, en lugar de tener solo un árbol en un bosque.


Parámetro estado_aleatorio, estimadores de atributos_

# 重要属性和接口
rfc = RandomForestClassifier(n_estimators=25,random_state=2)
rfc = rfc.fit(x,y)

# 随机森林重要的属性之一:estimators_ 用来查看森林中的数的情况
rfc.estimators_

Se puede ver que la función de este atributo es verificar el número en el bosque aleatorio. Básicamente, la información del número no es muy diferente. La principal diferencia es que random_state es diferente.
Inserte la descripción de la imagen aquí
El recorrido del árbol obtiene 25 semillas de números aleatorios:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
se puede observar que cuando se random_statefija, 随机森林中生成是一组固定的树,但每棵树依然是不一致的este es un enfoque de "rama de características seleccionadas al azar" para obtener aleatoriedad. Y podemos demostrar que el efecto del método de embolsado generalmente mejorará cada vez más cuando la aleatoriedad sea mayor. Cuando se utiliza el método de ensacado para la integración, los clasificadores base deben ser independientes entre sí y no son iguales. Pero la limitación de este enfoque es muy fuerte: cuando necesitamos miles de árboles, es posible que los datos no puedan proporcionar miles de características que nos permitan construir tantos árboles diferentes como sea posible. Por lo tanto, además del estado aleatorio, también necesitamos otra aleatoriedad.

Volver arriba


Parámetro bootstrap, parámetro oob_score, atributo oob_score_

Para hacer que los clasificadores base sean lo más diferentes posible, un método fácil de entender es usar diferentes conjuntos de entrenamiento para el entrenamiento, y el método de ensacado usa técnicas de muestreo aleatorio con reemplazo para formar diferentes datos de entrenamiento bootstrap就是用来控制抽样技术的参数.

En un conjunto de entrenamiento original que contiene n muestras, realizamos un muestreo aleatorio, muestreamos una muestra a la vez y devolvemos la muestra al conjunto de entrenamiento original antes de extraer la siguiente muestra, lo que significa que la muestra aún se puede muestrear la próxima vez. por lo que recopiló n veces y finalmente obtuvo una composición de n muestras tan grande como el conjunto de entrenamiento original 自助集. Debido a que se trata de un muestreo aleatorio, el conjunto de autoservicio es diferente del conjunto de datos original cada vez, y también es diferente de otros conjuntos de muestreo. De esta manera, podemos crear libremente conjuntos de autoayuda inagotables y diferentes. Usando estos conjuntos de autoayuda para entrenar nuestros clasificadores base, nuestros clasificadores base serán naturalmente diferentes.

El parámetro bootstrap tiene el valor predeterminado True, que representa el uso de esta técnica de muestreo aleatorio con reemplazo. Por lo general, nosotros no configuraremos este parámetro como Falso (como se muestra en el modelo de pelota a continuación).
Inserte la descripción de la imagen aquí
Sin embargo, el muestreo con reemplazo también tiene sus propios problemas. Debido al reemplazo, algunas muestras pueden aparecer varias veces en el mismo conjunto de autoayuda, mientras que otras pueden ignorarse. En términos generales, el conjunto de autoayuda contiene aproximadamente el 63% de los datos originales en promedio. Debido a que cada muestra se bombea a una probabilidad de auto-enfoque es:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
cuando n足够大el tiempo, este 概率收敛于1-(1/e), 约等于0.632. Por lo tanto, se desperdiciará aproximadamente el 37% de los datos de entrenamiento,No participa en el modelado,EstosLos datos se llaman fuera de los datos de la bolsa (oob). Además del conjunto de prueba que dividimos desde el principio, estos datos también se pueden utilizar como conjunto de prueba del algoritmo integrado. Es decir, cuando usamos un bosque aleatorio, no podemos dividir el conjunto de prueba y el conjunto de entrenamiento, solo necesitamos usar datos fuera de la bolsa para probar nuestro modelo. Por supuesto, esto no es absoluto.Cuando ny n_estimators no son lo suficientemente grandes, es probable que no se salgan datos de la bolsa y, naturalmente, no será posible utilizar datos oob para probar el modelo. ( 如上图球模型二)

Si desea probar con datos fuera de la bolsa, debe oob_scoreajustar este parámetro a Verdadero al crear una instancia. Después del entrenamiento, podemos usar otro bosque aleatorio 重要属性:oob_ score_来查看我们的在袋外数据上测试的结果:

# 重要属性oob_score
rfc = RandomForestClassifier(n_estimators=25,oob_score=True)
rfc = rfc.fit(x,y)
out_score = rfc.oob_score_
out_score

0.9606741573033708

Volver arriba


feature_importance, interfaz importante

El uso y significado de feature_importances_ y .feature_importances_ en el árbol de decisiones son los mismos, y es la importancia de la característica devuelta.

Random Forests interfaz de árbol de decisión es exactamente el mismo, todavía había cuatro interfaces comunes: apply, fit, predicty score. Además, también debe prestar atención al bosque aleatorio predict_proba接口, esta interfazDevuelve la probabilidad de que cada muestra de prueba se asigne a cada categoría de etiquetas. Si hay varias categorías de etiquetas, devuelve varias probabilidades. Si es un problema de dos categorías, si el valor devuelto por predict_proba es mayor que 0.5, se divide en 1, y si es menor que 0.5, se divide en 0 .

Inserte la descripción de la imagen aquí

El bosque aleatorio tradicional usa las reglas en el método de ensacado, el promedio o la minoría obedece a la mayoría para determinar el resultado de la integración, yEl bosque aleatorio en sklearn promedia la probabilidad devuelta por predict_proba correspondiente a cada muestra, y obtiene una probabilidad promedio para determinar la clasificación de la muestra de prueba.

Volver arriba


Supongo que te gusta

Origin blog.csdn.net/qq_45797116/article/details/113766822
Recomendado
Clasificación