Curva de aprendizaje y curva de validación

Curva de aprendizaje y curva de validación




curva de aprendizaje

  • La curva de aprendizaje consiste en observar el rendimiento del modelo en datos nuevos dibujando la tasa de precisión en el conjunto de entrenamiento del modelo y el conjunto de validación cruzada cuando el tamaño del conjunto de entrenamiento es diferente, y luego juzgar si la varianza o desviación del modelo es demasiado alto, y si aumentar el conjunto de entrenamiento se puede reducir el sobreajuste.
  • La diferencia entre el extremo izquierdo y el extremo derecho depende de si la tasa de precisión converge por encima de 0,5.
    inserte la descripción de la imagen aquí
  • código de la curva de aprendizaje
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import ShuffleSplit
from sklearn.linear_model import SGDRegressor
from sklearn.model_selection import learning_curve

plt.figure(figsize=(18,10),dpi=150)


def plot_learning_curve(estimator, title, x, y, ylim=None, cv=None, n_jobs=1, train_sizes=np.linspace(.1, 1.0, 5)):
    plt.figure()
    plt.title(title)
    if ylim is not None:
        plt.ylim(*ylim)
    plt.xlabel("Training examples")
    plt.ylabel("Score")
    train_sizes,train_scores,test_scores=learning_curve(estimator,X,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)
    train_scores_mean=np.mean(train_scores,axis=1)
    train_scores_std=np.std(train_scores,axis=1)
    test_scores_mean=np.mean(test_scores,axis=1)
    test_scores_std=np.std(test_scores,axis=1)
    plt.grid()

    plt.fill_between(train_sizes,test_scores_mean-train_scores_std,train_scores_mean+test_scores_std,alpha=0.1,color="r")
    plt.fill_between(train_sizes,test_scores_mean-train_scores_std,train_scores_mean+test_scores_std,alpha=0.1,color="g")
    plt.plot(train_sizes,train_scores_mean,"o-",color="r",label="Training score")
    plt.plot(train_sizes,test_scores_mean,"o-",color="g",label="Cross-validation score")
    plt.legend(loc="best")
    return plt


train_data2 = pd.read_csv('./data/zhengqi_train.txt', sep='\t')
test_data2 = pd.read_csv('./data/zhengqi_test.txt', sep='\t')

X = train_data2[test_data2.columns].values
y = train_data2["target"].values
title = "LinearRegression"
cv = ShuffleSplit(n_splits=100, test_size=0.2, random_state=0)
estimator = SGDRegressor()
plot_learning_curve(estimator, title, X, y, ylim=(0.7,1.01), cv=cv, n_jobs=-1)
  • La imagen dibujada por el programa es la siguiente:
    inserte la descripción de la imagen aquí

Curva de verificación

  • A diferencia de la curva de aprendizaje, el eje horizontal de la curva de validación es un rango de valores de un hiperparámetro, lo que compara la precisión del modelo bajo diferentes configuraciones de parámetros (en lugar de diferentes tamaños de conjuntos de entrenamiento).
  • Como se puede ver en la curva de verificación de la figura a continuación, a medida que cambia la configuración del hiperparámetro, el modelo puede tener un proceso de ajuste insuficiente a adecuación y sobreajuste, y luego se puede seleccionar una configuración adecuada para mejorar el rendimiento del modelo.
    inserte la descripción de la imagen aquí
  • Verificar código de curva
# 验证曲线
from sklearn.linear_model import SGDRegressor
from sklearn.model_selection import validation_curve
import matplotlib as mpl

mpl.rcParams.update({
    
    
"text.usetex": False,
"font.family": "stixgeneral",
"mathtext.fontset": "stix",
})
X = train_data2[test_data2.columns].values
y = train_data2["target"].values

param_range = [0.1,0.01,0.001,0.0001,0.00001,0.000001]
train_scores, test_scores = validation_curve(SGDRegressor(max_iter=1000, tol=1e-3, penalty="L1"), X, y, param_name="alpha", param_range=param_range, cv=10, scoring="r2", n_jobs=1)

train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)

test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)

plt.title("Validation Curve with SGDRegressor")
plt.xlabel("alpha")
plt.ylabel("Score")
plt.ylim(0.0, 1.1)
plt.semilogx(param_range, train_scores_mean, label="Training score", color="r")
plt.fill_between(param_range,
                train_scores_mean-train_scores_std,
                train_scores_mean+train_scores_std,
                alpha=0.2,
                color="r")
plt.semilogx(param_range,test_scores_mean,
            label="Cross-validation score",
            color="g")
plt.fill_between(param_range,
                test_scores_mean-test_scores_std,
                test_scores_mean+test_scores_std,
                alpha=0.2,
                color="g")
plt.legend(loc="best")
plt.show()
  • La imagen dibujada por el programa es la siguiente:inserte la descripción de la imagen aquí

curva de error

  • Cuando el entrenamiento es insuficiente, la capacidad de ajuste del alumno no es lo suficientemente fuerte y la perturbación de los datos de entrenamiento no es suficiente para hacer que el alumno cambie significativamente. En este momento, la desviación domina la tasa de error de generalización, ya que el grado de entrenamiento se profundiza, la capacidad de ajuste del alumno aumenta gradualmente., el alumno puede aprender gradualmente la perturbación de los datos de entrenamiento, y la varianza domina gradualmente la tasa de error de generalización; después de que el nivel de entrenamiento es suficiente, la capacidad de ajuste del alumno es Ya es muy fuerte, y una ligera perturbación de los datos de entrenamiento hará que el alumno obviamente, si el alumno aprende las características no globales propias de los datos de entrenamiento, se producirá un sobreajuste.
    inserte la descripción de la imagen aquí

La relación entre el sesgo, la varianza y la complejidad del modelo

  • La varianza y el sesgo no se pueden evitar, entonces, ¿hay alguna forma de minimizar su impacto en el modelo?
  • Un buen enfoque es elegir correctamente la complejidad del modelo. Un modelo de alta complejidad suele tener una buena capacidad de ajuste a los datos de entrenamiento, pero no necesariamente a los datos de prueba. Sin embargo, un modelo con una complejidad demasiado baja no puede ajustarse bien a los datos de entrenamiento, y mucho menos a los datos de prueba. Por lo tanto, la complejidad del modelo y el sesgo y la varianza del modelo tienen una relación como se muestra en la siguiente figura.

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_51524504/article/details/130092326
Recomendado
Clasificación