Aprendizaje automático fácil de entender: implementación de código de aprendizaje integrado de sklearn

Este artículo ha participado en el evento "Ceremonia de Creación de Nuevos Talentos"

Comparación de árboles de decisión ordinarios y bosques aleatorios

Generar conjunto de datos de círculos

X,y = datasets.make_moons(n_samples=500,noise=0.3,random_state=42)
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.show()
复制代码

inserte la descripción de la imagen aquí

función de dibujo

def plot_decision_boundary(model, X, y):
    x0_min, x0_max = X[:,0].min()-1, X[:,0].max()+1
    x1_min, x1_max = X[:,1].min()-1, X[:,1].max()+1
    x0, x1 = np.meshgrid(np.linspace(x0_min, x0_max, 100), np.linspace(x1_min, x1_max, 100))
    Z = model.predict(np.c_[x0.ravel(), x1.ravel()]) 
    Z = Z.reshape(x0.shape)
    
    plt.contourf(x0, x1, Z, cmap=plt.cm.Spectral)
    plt.ylabel('x1')
    plt.xlabel('x0')
    plt.scatter(X[:, 0], X[:, 1], c=np.squeeze(y))
    plt.show()
复制代码

Predicción usando árboles de decisión

Cree un árbol de decisión y entrénelo

from sklearn.tree import DecisionTreeClassifier

dt_clf = DecisionTreeClassifier(max_depth=6)
dt_clf.fit(X, y)
plot_decision_boundary(dt_clf,X,y)
复制代码

dibujar

Dado que al árbol de decisión le gusta ir en línea recta, los resultados de la predicción son los siguientesinserte la descripción de la imagen aquí

Validación cruzada

from sklearn.model_selection import cross_val_score
print(cross_val_score(dt_clf,X, y, cv=5).mean()) #cv决定做几轮交叉验证

#分折交叉验证,会按照原始类别比例分割数据集
from sklearn.model_selection import StratifiedKFold

strKFold = StratifiedKFold(n_splits=5,shuffle=True,random_state=0)
print(cross_val_score(dt_clf,X, y,cv=strKFold).mean())

#留一法交叉验证
from sklearn.model_selection import LeaveOneOut

loout = LeaveOneOut()
print(cross_val_score(dt_clf,X, y,cv=loout).mean())

#可以控制划分迭代次数、每次划分时测试集和训练集的比例(也就是说:可以存在既不在训练集也不再测试集的情况)
from sklearn.model_selection import ShuffleSplit

shufspl = ShuffleSplit(train_size=.5,test_size=.4,n_splits=8) #迭代8次;
print(cross_val_score(dt_clf,X, y,cv=shufspl).mean())
复制代码

inserte la descripción de la imagen aquí

Votar con Voting Classifier

Construyendo un clasificador de votaciones

La votación del clasificador de votaciones es una especie de votación dura, es decir, votar después de obtener el resultado de la predicción.

from sklearn.ensemble import VotingClassifier

voting_clf = VotingClassifier(estimators=[
    ('knn_clf',KNeighborsClassifier(n_neighbors=7)),
    ('gnb_clf',GaussianNB()),
    ('dt_clf', DecisionTreeClassifier(max_depth=6))
],voting='hard')
voting_clf.fit(X_train,y_train)
voting_clf.score(X_test,y_test)
复制代码

inserte la descripción de la imagen aquí

dibujar

plot_decision_boundary(voting_clf,X,y)
复制代码

inserte la descripción de la imagen aquí

Clasificador de votación suave

El clasificador Soft Voting es un tipo de voto suave, vota con referencia a la probabilidad generada por cada clasificador.

Construyendo un clasificador de votaciones

voting_clf = VotingClassifier(e![请添加图片描述](https://img-blog.csdnimg.cn/88798644fbc0458d88d4f1a97d4f7e17.png)
stimators=[
    ('knn_clf',KNeighborsClassifier(n_neighbors=7)),
    ('gnb_clf',GaussianNB()),
    ('dt_clf', DecisionTreeClassifier(max_depth=6))
],voting='soft')
voting_clf.fit(X_train,y_train)
voting_clf.score(X_test,y_test)
复制代码

inserte la descripción de la imagen aquí

dibujar

inserte la descripción de la imagen aquí

harpillera

Analizar gramaticalmente

Cree múltiples modelos, seleccione aleatoriamente algunos datos de los datos para entrenar diferentes modelos y determine el resultado de predicción final a través de los resultados de predicción de los múltiples modelos.

Modelos de árboles de decisiones múltiples

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier

bagging_clf = BaggingClassifier(DecisionTreeClassifier(),n_estimators=500,max_samples=100,bootstrap=True)

bagging_clf.fit(X_train,y_train)
bagging_clf.score(X,y)
复制代码

inserte la descripción de la imagen aquí

dibujar

inserte la descripción de la imagen aquí

Personalmente, creo que el resultado de la predicción de esto es similar al resultado de un solo árbol de decisión, y también es sencillo.

fuera de bolsa-oob

De manera similar al embolsado, la única diferencia es que después de que cada modelo selecciona una parte de los datos, la siguiente selección de modelo solo selecciona el conjunto de datos de los datos no seleccionados.

Código

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier

bagging_clf = BaggingClassifier(DecisionTreeClassifier(),#分类器
                                n_estimators=500,#分类器个数
                                max_samples=100,#每个模型训练取样本数
                                bootstrap=True,#放回取样
                                oob_score=True)#out of bag

bagging_clf.fit(X,y)
bagging_clf.oob_score_
复制代码

inserte la descripción de la imagen aquí

dibujar

inserte la descripción de la imagen aquí

Los resultados de predicción de esto también son similares, tal vez sea mejor cambiar a otros conjuntos de datos

bosque aleatorio

El efecto del bosque aleatorio es el mismo que el del aprendizaje conjunto compuesto por árboles de decisión múltiple.

Código

from sklearn.ensemble import RandomForestClassifier

rf_clf = RandomForestClassifier(n_estimators=500,random_state=666,oob_score=True)

rf_clf.fit(X,y)
rf_clf.oob_score_
复制代码

inserte la descripción de la imagen aquí

dibujar

inserte la descripción de la imagen aquí

árbol extremo

El algoritmo de árbol aleatorio extremo y el algoritmo de bosque aleatorio se componen de muchos árboles de decisión. La principal diferencia entre los árboles extremos y los bosques aleatorios Los bosques aleatorios usan el modelo de embolsado.Todas las muestras utilizadas por los árboles extremos, pero las características se seleccionan al azar, porque la división es aleatoria, por lo que, en cierta medida, los resultados obtenidos por los bosques aleatorios son más Bueno.

Código

from sklearn.ensemble import ExtraTreesClassifier
et_clf = ExtraTreesClassifier(n_estimators=500,random_state=666,bootstrap=True,oob_score=True)
et_clf.fit(X,y)
et_clf.oob_score_
复制代码

inserte la descripción de la imagen aquí

dibujar

inserte la descripción de la imagen aquí

Hay un impulso

Al ponderar los resultados de predicción generados por el entrenamiento de cada modelo, se incrementará el peso de los datos que no lograron predecir el modelo anterior y los datos utilizados por el siguiente modelo son los datos ponderados.

Código

from  sklearn.ensemble import AdaBoostClassifier

ada_clf = AdaBoostClassifier(DecisionTreeClassifier(max_depth=6),n_estimators=500)
ada_clf.fit(X_train,y_train)
ada_clf.score(X_test,y_test)
复制代码

inserte la descripción de la imagen aquí

dibujar

inserte la descripción de la imagen aquí

Aumento de gradiente

Entrenar solo con datos mal predichos

Código

from  sklearn.ensemble import GradientBoostingClassifier

gd_clf = GradientBoostingClassifier(max_depth=6,n_estimators=500)

gd_clf.fit(X_train,y_train)
gd_clf.score(X_test,y_test)
复制代码

inserte la descripción de la imagen aquí

dibujar

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin juejin.im/post/7078459913273344037
Recomendado
Clasificación