Ajuste del modelo de aprendizaje automático

Ajuste del modelo de aprendizaje automático




Parámetros de ajuste

1. El objetivo del ajuste de parámetros

  • El ajuste de parámetros consiste en ajustar los parámetros del modelo para encontrar los parámetros con el mejor rendimiento del modelo. ¡El objetivo del ajuste de parámetros es lograr una gran armonía entre la desviación y la varianza del modelo general!
  • Los parámetros se pueden dividir en dos categorías: parámetros influenciados por el proceso y parámetros influenciados por el submodelo.
  • Específicamente, los parámetros influenciados por el proceso son para ajustar parámetros como "número de submodelos (n_estimadores)" y "aprendizaje_rage (aprendizaje_rage)" bajo la premisa de que el submodelo permanece sin cambios, y cambiar el proceso de entrenamiento para mejorar el rendimiento del modelo general. Los parámetros de clase de influencia del submodelo son para ajustar parámetros como "profundidad máxima del árbol (max_ depth)" y "criterio de división (criterio)" para cambiar el rendimiento del submodelo. Mejorando así el rendimiento del modelo general. El proceso de entrenamiento de embolsado tiene como objetivo reducir la varianza, mientras que el proceso de entrenamiento de impulso tiene como objetivo reducir el sesgo, y los parámetros del proceso que afectan a la clase pueden causar grandes cambios en el rendimiento general del modelo.

2. Influencia de los parámetros en el rendimiento general del modelo

* Reducir la complejidad, seleccionar parámetros que tengan un gran impacto en la complejidad, estudiar su monotonicidad, y luego enfocarse en ajustar aquellos parámetros que puedan reducir la complejidad en la mayor medida, para aquellos parámetros que no sean monótonos o aumenten la complejidad, dependiendo de la situación, la mayoría de las veces incluso puedes retroceder. (De arriba hacia abajo en la tabla, el grado de ajuste de parámetros recomendado disminuye gradualmente).

3. Búsqueda de cuadrícula

Grid Search es un método de ajuste de parámetros para una búsqueda exhaustiva. Entre todas las selecciones de parámetros candidatos, todas las posibilidades se prueban a través del recorrido del bucle, y el parámetro con el mejor rendimiento es el resultado final. Su principio es como encontrar el valor máximo en una matriz. Tomando un modelo con dos parámetros como ejemplo, hay 3 posibilidades para el parámetro a y 4 posibilidades para el parámetro b. La lista de todas las posibilidades se puede expresar como una tabla de 3 x 4, donde cada celda es una cuadrícula. El proceso de bucle es como atravesar y buscar en una cuadrícula, de ahí el nombre de búsqueda en cuadrícula.
El siguiente es un ejemplo simple de búsqueda de cuadrícula. Utilizando el conjunto de datos del iris, se realiza un ajuste de búsqueda de cuadrícula en los parámetros del modelo SVC. El proceso se muestra en la siguiente tabla:

c=0,001 do=0,01 do=0,1 C=1 C=10
gamma=0.001 CVS(C=0.001, gamma=0.001) CVS(C=0.01, gamma=0.001) CVS(C=0.1, gamma=0.001) CVS(C=1, gamma=0.001) CVS(C=10, gamma=0.001)
gamma=0.01 CVS(C=0.001, gamma=0.01) CVS(C=0.01, gamma=0.01) CVS(C=0.1, gamma=0.01) CVS(C=1, gamma=0.01) CVS(C=10, gamma=0.01)
gamma=0.1 CVS(C=0.001, gamma=0.1) CVS(C=0.01, gamma=0.1) CVS(C=0.1, gamma=0.1) CVS(C=1, gamma=0.1) CVS(C=10, gamma=0.1)
gamma=1 CVS(C=0.001, gamma=1) CVS(C=0.01, gamma=1) CVS(C=0.1, gamma=1) CVS(C=1, gamma=1) CVS(C=10, gamma=1)
gamma=10 CVS(C=0.001, gamma=10) CVS(C=0.01, gamma=10) CVS(C=0.1, gamma=10) CVS(C=1, gamma=10) CVS(C=10, gamma=10)
gamma=100 CVS(C=0.001, gamma=100) CVS(C=0.01, gamma=100) CVS(C=0.1, gamma=100) CVS(C=1, gamma=100) CVS(C=10, gamma=100)
  • El código específico y los resultados de ajuste son los siguientes:
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, stratify=iris.target, random_state=0)  # stratify=y 是根据 y 值对训练和数据集各类别进行训练数据和测试数据等比划分,避免出现训练集和测试集种某种类别失衡
print(f"Size of training set:{
      
      X_train.shape[0]}\nSize of testing set:{
      
      X_test.shape[0]}")

# >>>网格搜索开始>>>
best_score = 0
for gamma in [0.001, 0.01, 0.1, 1, 10, 100]:
	for C in [0.001, 0.01, 0.1, 1, 10]:
		svm = SVC(gamma=gamma, C=C)  # 对于每种参数可能的组合,都进行一次训练
		svm.fit(X_train, y_train)
		score = svm.score(X_test, y_test)

		if score > best_score:  # 找到表现最好的参数
			best_score = score
			best_parameters = {
    
    'gamma': gamma, 'C': C}
# <<<网格搜索结束<<<

print("Best score: {:.2f}".format(best_score))
print("Best parameters: {}".format(best_parameters))

"""
Size of training set: 112
Size of testing set: 38
Best score: 0.97
Best parameters: {'gamma': 0.001', 'C': 100}
"""

4. Modelo de espacio de hiperparámetros y ajuste

1. Búsqueda web exhaustiva

  • Use los datos para entrenar el modelo de bosque aleatorio y use el método de búsqueda de cuadrícula para ajustar los parámetros. El código es el siguiente:
from sklearn.model_selection import GridSearchCV  # 导入网格搜索包
from sklearn.model_selection import train_test_split  # 导入数据集划分包
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_iris

# 切分数据,训练数据为80%,验证数据为20%
iris = load_iris()
train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, test_size=0.2, stratify=iris.target, random_state=0)

randomForestRegressor = RandomForestRegressor()
parameters = {
    
    'n_estimators': [50, 100, 200], 'max_depth': [1, 2, 3]}

clf = GridSearchCV(randomForestRegressor, parameters, cv=5)
clf.fit(train_data, train_target)
score_test = mean_squared_error(test_target, clf.predict(test_data))

print("Best parameters found by grid search are:", clf.best_params_)
print("RandomForestRegressor GridSearchCV test MSE: ", score_test)

"""
Best parameters found by grid search are: {'max_depth': 2, 'n_estimators': 100}
RandomForestRegressor GridSearchCV test MSE:  0.01656100655431517
"""

2. Optimización de parámetros aleatorios

  • Use los datos para entrenar el modelo de bosque aleatorio y use el método de optimización de parámetros aleatorios para ajustar los parámetros. El código es el siguiente:
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import train_test_split  # 导入数据集划分包
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

# 切分数据,训练数据为80%,验证数据为20%
train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)

randomForestRegressor = RandomForestRegressor()
parameters = {
    
    'n_estimators': [50, 100, 200, 300], 'max_depth': [1, 2, 3, 4, 5]}

clf = RandomizedSearchCV(randomForestRegressor, parameters, cv=5, n_iter=10, random_state=42)  # n_iter=10 表示随即搜索10次,参数是随机组合的。
clf.fit(train_data, train_target)
score_test = mean_squared_error(test_target, clf.predict(test_data))

print("Best parameters found by grid search are:", clf.best_params_)
print("RandomForestRegressor RandomizedSearchCV test MSE: ", score_test)

"""
Best parameters found by grid search are: {'n_estimators': 100, 'max_depth': 2}
RandomForestRegressor RandomizedSearchCV test MSE:  0.017649606213520908
"""

Afinación LGB

  • Use los datos para entrenar el modelo LGB y use el método de búsqueda de cuadrícula para ajustar los parámetros. El código es el siguiente:
import lightgbm as lgb
from sklearn.datasets import load_iris
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split

# 切分数据,训练数据为80%,验证数据为20%
iris = load_iris()
train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, stratify=iris.target, random_state=20)

clf = lgb.LGBMRegressor(num_leaves=31)
parameters = {
    
    'learning_rate': [0.01, 0.1, 1], 'n_estimators': [20, 40]}

clf = GridSearchCV(clf, parameters, cv=5)
clf.fit(train_data, train_target)
score_test = mean_squared_error(test_target, clf.predict(test_data))

print('Best parameters found by grid search are: ', clf.best_params_)
print("LGBMRegressor GridSearchCV test MSE: ", score_test)

"""
Best parameters found by grid search are: {'learning_rate': 0.1, 'n_estimators': 40}
LGBMRegressor GridSearchCV test MSE:  0.016501047890079536
"""

Supongo que te gusta

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