Optimización del modelo

Optimización de hiperparámetros

① Qué son los hiperparámetros

Los hiperparámetros son parámetros cuyos valores se establecen antes de iniciar el proceso de aprendizaje, no datos de parámetros obtenidos a través del entrenamiento. La configuración de los hiperparámetros depende principalmente de la experiencia, el experimento o el valor óptimo después de la comparación. Los siguientes son algunos hiperparámetros comunes en el modelo:

  • La profundidad máxima del árbol modelo del árbol de decisión;
  • El número de árboles modelo de bosque aleatorio;
  • La cantidad de plegamiento en la validación cruzada;
  • La proporción de conjunto de entrenamiento / conjunto de prueba, etc.

La selección de hiperparámetros incluye principalmente búsqueda aleatoria, búsqueda de cuadrícula y otros métodos.

② Búsqueda de cuadrícula

La búsqueda en cuadrícula se refiere a generar diferentes combinaciones de parámetros principales y los valores principales de estos parámetros mediante un método exhaustivo, calculando y comparando los resultados de la predicción, para encontrar la combinación óptima de estos parámetros.

El siguiente es un ejemplo del uso del método de búsqueda de cuadrícula para encontrar los hiperparámetros óptimos de SVM:

# 网格搜索示例
# 网格搜索:将所有参数以及这些参数可能的取值进行
#           组合,寻找性能最好的参数组合
import numpy as np
import sklearn.svm as svm
import sklearn.metrics as sm
import matplotlib.pyplot as mp
import sklearn.model_selection as ms

x, y = [], []

with open('../data/multiple2.txt', 'r') as f:
    for line in f.readlines():
        data = [float(substr) for substr in line.split(',')]
        x.append(data[:-1])  # 输入
        y.append(data[-1])  # 输出

x = np.array(x)
y = np.array(y, dtype=int)
# 定义带筛选的参数(放入列表中)
params = [
    {
    
    
        'kernel': ['linear'],
        'C': [1, 10, 100, 1000]
    },
    {
    
    
        'kernel': ['poly'],
        'C': [1],
        'degree': [2, 3]
    },
    {
    
    
        'kernel': ['rbf'],
        'C': [1, 10, 100, 1000],
        'gamma': [1, 0.1, 0.01, 0.001]
    }
]
# 定义模型
model = ms.GridSearchCV(svm.SVC(),  # 待验证模型
                        params,  # 待验证参数
                        cv=5)  # 折叠数量
model.fit(x, y)  # 训练
# 打印最好成绩、最优参数组合
print('best_score_:', model.best_score_)
print('best_params_:', model.best_params_)
l, r, h = x[:, 0].min() - 1, x[:, 0].max() + 1, 0.005
b, t, v = x[:, 1].min() - 1, x[:, 1].max() + 1, 0.005
grid_x = np.meshgrid(np.arange(l, r, h), np.arange(b, t, v))
flat_x = np.c_[grid_x[0].ravel(), grid_x[1].ravel()]
flat_y = model.predict(flat_x)
grid_y = flat_y.reshape(grid_x[0].shape)

mp.figure('SVM RBF Classifier', facecolor='lightgray')
mp.title('SVM RBF Classifier', fontsize=14)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.pcolormesh(grid_x[0], grid_x[1], grid_y, cmap='gray')
C0, C1 = (y == 0), (y == 1)
mp.scatter(x[C0][:, 0], x[C0][:, 1], c='orangered', s=80)
mp.scatter(x[C1][:, 0], x[C1][:, 1], c='limegreen', s=80)
mp.show()

Inserte la descripción de la imagen aquí
③ Búsqueda aleatoria

La idea de la búsqueda aleatoria es similar a la búsqueda en cuadrícula, excepto que ya no se prueban todos los valores entre los límites superior e inferior, pero los puntos de muestra se seleccionan al azar en el rango de búsqueda. Su base teórica es que si el conjunto de puntos muestrales es lo suficientemente grande, entonces el valor óptimo global o su valor aproximado se puede encontrar con alta probabilidad mediante muestreo aleatorio. La búsqueda aleatoria es generalmente más rápida que la búsqueda en cuadrícula, pero al igual que la versión rápida de la búsqueda en cuadrícula, sus resultados no están garantizados.

Supongo que te gusta

Origin blog.csdn.net/weixin_49304690/article/details/112962176
Recomendado
Clasificación