Cómo calcular python svm en papel auc
Orden
Las curvas Roc (características operativas del receptor) y AUC se utilizan a menudo para evaluar clasificadores binarios. Este artículo presentará brevemente ROC y AUC, y luego demostrará con ejemplos cómo dibujar curvas ROC y calcular AUC en Python.
Introducción a AUC
AUC (área bajo la curva) es un índice de evaluación muy utilizado en dos tipos de modelos de aprendizaje automático. En comparación con F1-Score, AUC es más tolerante al desequilibrio de proyectos. Actualmente, las bibliotecas comunes de aprendizaje automático (como scikit-learn) generalmente integran el cálculo de este indicador, pero a veces el modelo es independiente o está escrito por sí mismo. En este momento, si desea evaluar la calidad del modelo de capacitación, debe crear usted mismo un módulo de cálculo de AUC. Este artículo encontró que libsvm-tools tiene un cálculo de AUC muy fácil de entender al consultar información, por lo que lo seleccionó para uso futuro.
Cálculo del AUC
El cálculo del AUC se divide en los siguientes tres pasos:
1. Preparación de los datos de cálculo si solo hay un conjunto de entrenamiento. entrenamiento del modelo, generalmente calculado mediante el método de validación cruzada. Si hay un conjunto de evaluación, se puede calcular directamente. El formato de datos generalmente es la puntuación de predicción y su categoría objetivo (tenga en cuenta que es la categoría objetivo, no la categoría de predicción).
2. Obtenga puntos horizontales (X: tasa de falsos positivos) y verticales (Y: tasa de verdaderos positivos) según el umbral.
3. Después de conectar los puntos de coordenadas en una curva, calcule el área bajo la curva, que es el valor AUC.
Ingrese el código Python directamente
#!-*-encoding=utf-8 -*-
Importar pylab como pl
Importar iniciar sesión desde matemáticas, exp, sqrt
evaluate_result= "la ruta de su archivo"
db = [] #[score, nonclk, clk]
positivo, negativo = 0, 0
Utilice open(evaluate_result, 'r') como fs:
Para filas en fs:
nonclk, clk, score = line. banda(). split(' \t ')
nonclk = int(nonclk)
clk = int(clk)
Fracción = punto flotante (fracción)
p>
db.append([score, nonclk, clk])
pos += clk
negativo += no reloj
db = ordenado (db, key=lambda x:x[0], reverse=True)
#Calcular puntos de coordenadas ROC
xy_arr = []
tp, fp = 0. , 0.
Para I(len(db)) en el rango:
tp += db[i][2]
fp += db [i][1]
xy_arr.append([fp/neg, tp/pos])
#Calcular el área bajo la curva
auc = 0.
prev_x = 0
Para x en xy_arr, y:
Si x! = prev_x:
auc += (x - prev_x) * y
prev_x = x
Imprimir "auc es % s".
% AUC
x = [_v[0] para _v en xy_arr]
y = [_v[1] para _v en xy_arr]
pl título. ("Curva ROC de % s (AUC = %.4f)" % ('svm ',AUC))
pl.xlabel("Tasa de falsos positivos")
pl. ylabel("Tasa de verdaderos positivos")
pl.plot(x, y)#Utilice pylab para dibujar x e y
pl.show()#Muestre el gráfico en la pantalla
p>El conjunto de datos de entrada puede hacer referencia a los resultados de la predicción de svm.
Su formato es:
non-clock\tclock\tscore
que incluye:
1, nonclick: no se hace clic Los datos Puede considerarse como el número de muestras negativas.
2.clk: el número de clics se puede considerar como el número de muestras positivas.
3. Puntuación: puntuación prevista, que se puede utilizar como estadística previa de muestras positivas y negativas en este grupo para reducir el cálculo del AUC.
El resultado de la operación es:
Si pylab no está instalado en esta máquina, puede marcar directamente las dependencias y las partes del dibujo.
Nota
El código publicado arriba:
1, solo puede calcular los resultados de la clasificación binaria (en cuanto a las etiquetas de la clasificación binaria, puede manejarlo por casualidad).
2. En el código anterior, cada puntuación tiene un umbral, pero en la práctica, esto es bastante ineficiente. Puede tomar muestras y también calcular las coordenadas del eje horizontal.