Conjunto de datos de iris de predicción de fusión multimodelo de aprendizaje automático

1. Fusión multimodelo

Como todos sabemos, el aprendizaje automático puede mejorar el rendimiento del modelo a través de la fusión de múltiples modelos. En las diversas competencias de algoritmos en los últimos años, los primeros son casi todos fusiones de múltiples modelos. Por ejemplo, los modelos que ganaron el campeonato y los segundos puestos en el desafío de clasificación de productos otto en kaggle son "gigantes" que integran más de 1000 modelos. En cierto nivel, la fusión de modelos múltiples es una solución "violenta" a los datos. Se utilizan varios modelos para mejorar el rendimiento. Por supuesto, algunos maestros pueden lograr el mismo efecto de modelo múltiple a través del preprocesamiento de datos + modelo único. Sin embargo, el póster sigue siendo flojo, demasiado flojo para analizar la relación entre los datos y el análisis de características. Sin más preámbulos, ¡vamos a nuestro tema!

2. El camino de la fusión multimodelo

1, Votación/Promedio

etiqueta real 1 0 1 0 1 1 0 1 1 1
clasificador 1 1 0 1 0 1 0 0 0 1 1
clasificador 2 1 1 1 0 1 1 1 1 1 1
Clasificador 3 1 1 0 0 1 1 1 1 1 0

En la tabla anterior, podemos ver que
la precisión del clasificador 1 = 0,8,
la precisión del clasificador 2 = 0,8 y
la precisión = 0,6 del clasificador 3.
Si se sigue el principio de que la minoría obedece a la mayoría, la precisión después de la fusión del modelo = 0,8

1.1 Encontrado el problema

Es posible que después de usar la fusión de varios modelos, el rendimiento del modelo no mejore. Por un lado, es posible que haya muy pocos modelos votando y algunos modelos simplemente clasifiquen incorrectamente una determinada muestra, lo que da como resultado una mejora de rendimiento no evidente después de la fusión del modelo. Por otro lado, también puede estar relacionado con la pequeña diferencia entre los modelos. Veamos otro ejemplo.

etiqueta real 1 0 1 0 1 1 0 1 1 1
clasificador 1 1 0 1 0 1 0 0 0 1 1
clasificador 2 0 1 1 0 1 1 0 1 0 1
Clasificador 3 1 0 0 0 1 1 1 0 1 0

En la tabla anterior, podemos ver que
la precisión del clasificador 1 = 0,8,
la precisión del clasificador 2 = 0,7
y la precisión del clasificador 3 = 0,6.
Si se sigue el principio de que la minoría obedece a la mayoría, la precisión después de la fusión del modelo = 0,9

1.2 por qué

A través de la observación, encontramos que en los siguientes experimentos, la diferencia entre los modelos fue mayor. Es decir, el modelo cometió errores en diferentes muestras. La razón de la baja precisión o la no mejora en el primer experimento fue que la correlación entre los modelos era alta. Los errores ocurrieron en la misma o varias muestras, lo que conduciría a una no mejora o incluso a una disminución en el rendimiento del modelo de fusión.

1.3 Conclusión

Para la fusión de modelos, cuanto mayor sea la diferencia entre los modelos, mejor será el resultado de la fusión. La diferencia entre los modelos a los que se hace referencia aquí no se refiere a la diferencia en la tasa correcta, sino a la diferencia en la correlación entre los modelos.

3. Use el conjunto de datos de iris que viene con el aprendizaje automático para la fusión de múltiples modelos

A través de los experimentos anteriores, usamos el paquete Voting en sklearn para implementar un ejemplo de fusión de múltiples modelos.

1. Importe los paquetes requeridos

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split, StratifiedKFold
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score

2. Lectura de datos

iris = load_iris()
data = iris.data
labels = iris.target

3. Divida el conjunto de entrenamiento, el conjunto de prueba y la validación cruzada de 10 veces

x_train, x_test, y_train, y_test = train_test_split(data, labels, test_size=0.3, random_state=10)
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=10)

4. Construcción de modelos

# 模型
cls_knn = KNeighborsClassifier(n_neighbors=3)
cls_gnb = GaussianNB()
cls_dt = DecisionTreeClassifier(random_state=10)

Aquí solo se utilizan 3 clasificadores, a saber, K-Nearest Neighbor, Gaussian Bayesian y Decision Tree. La razón por la que no se seleccionan muchos clasificadores es que otros clasificadores tienen principios similares a estos 3 algoritmos y no pueden lograr las diferencias de modelo que mencionamos al principio.

Comparación de votaciones y rendimiento

# 投票
voting = VotingClassifier(estimators=[('knn', cls_knn), ('gnb', cls_gnb),
                                      ('dt', cls_dt)], voting='hard', weights=[2, 1, 1])

# 比较性能(10折交叉验证)
acc_list = []
for clf in (cls_knn, cls_gnb, cls_dt, voting):
    for k, (train, test) in enumerate(kfold.split(x_train, y_train)):
        clf.fit(x_train[train], y_train[train])
        y_pred = clf.predict(x_test)
        acc = accuracy_score(y_test, y_pred)
        acc_list.append(acc)
    print(clf.__class__.__name__, np.mean(acc_list))
    acc_list.clear()

4. Resultados

KNeighborsClassifier 0.9577777777777777
GaussianNB 0.9533333333333334
DecisionTreeClassifier 0.9333333333333333
VotingClassifier 0.9488888888888889

Los resultados dados por primera vez son los que se muestran arriba. Descubrimos que el ACC después de la votación no fue tan bueno como K-Vecino más cercano y Gaussian Bayesian. Esto aún puede ser un problema porque la diferencia entre los clasificadores es demasiado pequeña. Todos cometieron errores en algunos datos colectivamente. Entonces, para cambiar la forma de pensar, ahora cambio el peso del voto, le doy prioridad a entrenar a KNN para maximizar el ACC, y luego le doy un mayor peso. Esto es un poco como los buenos estudiantes de la clase. los hiperparámetros del modelo al mismo tiempo para mejorar aún más el rendimiento del modelo.

KNeighborsClassifier 0.9844444444444445
GaussianNB 0.9888888888888889
DecisionTreeClassifier 0.96
VotingClassifier 0.9911111111111112

De acuerdo con el peso de 2: 1: 1, descubrimos que la precisión de la fusión del modelo ha mejorado, ¡y se ha logrado el objetivo!

Supongo que te gusta

Origin blog.csdn.net/JaysonWong/article/details/125097257
Recomendado
Clasificación