Conceptos básicos del aprendizaje automático 11: Comparación de algoritmos (basado en el conjunto de datos de los indios Pima sobre diabetes de la India)

Comparar la precisión de diferentes algoritmos y elegir un algoritmo apropiado es muy importante cuando se trata de problemas de aprendizaje automático. Esta sección presenta un patrón que se puede usar en scikit-learn para comparar diferentes algoritmos y elegir el apropiado. Puede utilizar este modelo como su propia plantilla para abordar problemas de aprendizaje automático; también puede mejorar esta plantilla comparando otros algoritmos diferentes.

En esta sección aprenderá lo siguiente:

  • Cómo diseñar un experimento para comparar diferentes algoritmos de aprendizaje automático.
  • Una plantilla reutilizable para evaluar el rendimiento del algoritmo.
  • Cómo visualizar los resultados de comparación de los algoritmos.

Elija el mejor algoritmo de aprendizaje automático

Cuando participo en un proyecto de aprendizaje automático, a menudo tengo dificultades para elegir un modelo de algoritmo apropiado. Cada modelo tiene sus propias características de datos adecuadas para el procesamiento. La precisión de cada modelo se puede obtener mediante validación cruzada y otros métodos de verificación de muestreo, y se puede seleccionar un algoritmo apropiado. De esta forma de evaluar, se pueden encontrar uno o dos algoritmos que sean más adecuados para el problema.

Cuando se obtiene un nuevo conjunto de datos, los datos deben examinarse a través de diferentes dimensiones para encontrar las características de los datos, y este método también es aplicable a la selección de modelos de algoritmos. También es necesario observar la precisión de los algoritmos de aprendizaje automático de diferentes dimensiones y métodos, y elegir uno o dos algoritmos que sean más efectivos para el problema. Un mejor método es mostrar atributos como la precisión promedio y la varianza de forma visual, para facilitar la selección de algoritmos. A continuación, presentaremos cómo comparar algoritmos mediante scikit-learn .

Comparación de algoritmos de aprendizaje automático

El método más apropiado de comparación de algoritmos es utilizar los mismos datos y el mismo método para evaluar diferentes algoritmos con el fin de obtener un resultado preciso. A continuación se utilizará el mismo conjunto de datos para comparar seis algoritmos de clasificación con el fin de elegir el algoritmo apropiado para resolver el problema.

  • Regresión logística (LR).
  • Análisis Discriminante Lineal (LDA).
  • K-Vecinos más cercanos (KNN).
  • Árboles de Clasificación y Regresión (CART).
  • Clasificador bayesiano.
  • Máquinas de vectores de soporte (SVM).

Seguimos utilizando el conjunto de datos de los indios Pima para mostrar cómo comparar algoritmos. Este conjunto de datos es un conjunto de datos de clasificación binaria y el resultado son solo dos clasificaciones; los datos utilizados para entrenar el modelo de algoritmo son ocho tipos de valores de características de atributos, todos compuestos por números. Se utilizó una validación cruzada de 10 veces para separar los datos y se utilizó la misma distribución de números aleatorios para garantizar que todos los algoritmos utilizaran los mismos datos. Para facilitar la organización de los resultados, se asigna un nombre corto a cada algoritmo.

El código se muestra a continuación:


import pandas as pd
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix

from sklearn.model_selection import cross_val_score, ShuffleSplit, train_test_split, KFold
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier

#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)

#将数据转成数组
array = data.values
#分割数据,去掉最后一个标签
X = array[:, 0:8]

Y = array[:, 8]
# 分割数据集
n_splits = 10

seed = 7

kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)

models = {
    
    }

models['LR'] = LogisticRegression()
models['LDA'] = LinearDiscriminantAnalysis()
models['KNN'] = KNeighborsClassifier()
models['CART'] = DecisionTreeClassifier()
models['SVM'] = SVC()
models['NB'] = GaussianNB()


results = []

for key in models:

  result = cross_val_score(models[key], X, Y, cv=kflod)
  results.append(result)
  print("%s: %.3f (%.3f)" % (key, result.mean(), result.std()))

#图表展示
import matplotlib.pyplot as plt

fig = plt.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
plt.boxplot(results)

ax.set_xticklabels(models.keys())
plt.show()



Resultados de la ejecución:
los resultados de la ejecución proporcionan la precisión promedio y la desviación estándar de cada algoritmo.

LR: 0.776 (0.045)
LDA: 0.767 (0.048)
KNN: 0.711 (0.051)
CART: 0.693 (0.059)
SVM: 0.760 (0.035)
NB: 0.759 (0.039)

Al mismo tiempo, la precisión del algoritmo y la distribución de cada resultado de verificación en la validación cruzada 10 veces también se pueden mostrar a través del diagrama de caja. El resultado de su ejecución se muestra en la figura.
inserte la descripción de la imagen aquí

Esta sección presenta un método para analizar y comparar varios algoritmos. A través de este método, se pueden encontrar uno o dos algoritmos para generar el modelo más preciso para un conjunto de datos determinado, a fin de seleccionar el algoritmo apropiado. Este enfoque también se puede aplicar a todos los problemas de aprendizaje automático. A continuación, aprenderemos cómo automatizar el procesamiento de procesos a través de Pipelines en scikit-learn.

Supongo que te gusta

Origin blog.csdn.net/hai411741962/article/details/132489464
Recomendado
Clasificación