Concepto de validación cruzada de modelos y resumen de código

Concepto de validación cruzada de modelos y resumen de código




Resumen de varios conceptos comunes de validación cruzada

Cross Validation (Cross Validation) es un método de análisis estadístico para verificar el desempeño de clasificadores, su idea básica es agrupar los datos originales en cierto sentido, una parte se usa como conjunto de entrenamiento, y la otra parte se usa como validación. colocar. Primero, entrene al clasificador con el conjunto de entrenamiento y luego use el conjunto de verificación para probar el modelo entrenado, que se usa como índice de rendimiento para evaluar el clasificador. Los métodos comunes de validación cruzada incluyen la validación cruzada simple, la validación cruzada de K-fold, la validación cruzada de dejar uno fuera y la validación cruzada de dejar uno fuera.

1. El concepto de validación cruzada simple

  • La validación cruzada simple (validación cruzada) es dividir aleatoriamente los datos originales en dos grupos, un grupo se usa como conjunto de entrenamiento y el otro grupo se usa como conjunto de verificación, usando el conjunto de entrenamiento para entrenar el clasificador, y luego usando el conjunto de verificación para verificar el modelo, y la clasificación final es precisa. La tasa se usa como índice de rendimiento de este clasificador, y el 30% de los datos generalmente se divide como el conjunto de datos de verificación.
  • Método de llamada:
from sklearn.model_selection import train_test_split

train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, test_size=0.4, random_state=0)  # random_stage 为随机种子

2. Concepto de validación cruzada de K-fold

  • La validación cruzada K-fold (Validación cruzada K-Fold) consiste en dividir los datos originales en K grupos (generalmente divididos uniformemente) y luego hacer un conjunto de validación para cada subconjunto de datos, y el grupo K-1 restante de subconjunto datos como un conjunto de entrenamiento, de modo que se obtendrán modelos K, y la precisión de clasificación del conjunto de verificación final de modelos K se promediará como el índice de rendimiento del clasificador de validación cruzada K-fold. Por lo general, establezca K para que sea mayor o igual a 3.
  • Método de llamada:
from sklearn.model_selection import KFold

kf = KFold(n_splits=5)  # 5 折交叉验证实例化

3. Concepto de validación cruzada de dejar uno fuera

  • La validación cruzada Leave-One-Out (LOO-CV) significa que cada conjunto de entrenamiento se compone de las muestras restantes excepto una muestra, y la muestra restante constituye el conjunto de verificación. De esta manera, para un conjunto de datos de N muestras, se pueden componer N conjuntos de entrenamiento diferentes y N conjuntos de verificación diferentes, por lo que LOO-CV obtendrá N modelos, y la precisión de clasificación promedio del conjunto de verificación final de N modelos El número es utilizado como el índice de rendimiento del clasificador.
  • Método de llamada:
from sklearn.model_selection import LeaveOneOut

loo = LeaveOneOut()

4. Salir del concepto de validación cruzada del método P

  • La validación cruzada Leave-P-Out (Validación cruzada Leave-P-Out, LPO-CV), similar a la validación cruzada dejar uno fuera, consiste en eliminar p muestras del conjunto de datos completo para generar todos los conjuntos de entrenamiento posibles. N muestras, puede generar (N, p) pares de entrenamiento-validación.
  • Método de llamada:
from sklearn.model_selection import LeavePOut

lpo = LeavePOut(p=5)

Código de ejemplo de varios métodos comunes de llamada de validación cruzada en sklearn

1. Código simple de validación cruzada

  • Use el método simple de validación cruzada para validar el modelo y dividir los datos, donde los datos de entrenamiento son 80 % y los datos de verificación son 20 %. El código es el siguiente 简单交叉验证(1折交叉验证)用到了 train_test_split() 函数:
## 简单交叉验证
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split  # 导入切分数据包
# 切分数据,训练数据为80%,验证数据为20%
train_data, test_data, train_target, test_target = train_test_split(train, target, target_size=0.8, random_state=0)

# 定义分回归器,拟合预测数据
clf = SGDRegressor(max_iter=1000, tol=1e-3)
clf.fit(train_data, train_target)

score_train = mean_squared_error(train_target, clf.predict(train_data))
score_test = mean_squared_error(test_target, clf.predict(test_data))

print("SGDRegressor train MSE: ", score_train)
print("SGDRegressor test MSE: ", score_test, "\n")

2. Código de validación cruzada K-fold

  • Utilice el método de validación cruzada K-fold para validar el modelo, K=5, el código es el siguiente:
## 5折交叉验证
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import KFold

kf = KFold(n_splits=5)
for k, (train_index, test_index) in enumerate(kf.split(train)):
	train_data, test_data, train_target, test_target = (
		train.values[train_index], 
		train.values[test_index],
		target[train_index],
		target[test_index])

	clf = SGDRegressor(max_iter=1000, tol=1e-3)
	clf.fit(train_data, train_target)

	score_train = mean_squared_error(train_target, clf.predict(train_data))
	score_test = mean_squared_error(test_target, clf.predict(test_data))

	print(k, "折", "SGDRegressor train MSE: ", score_train
	print(k, "折", "SGDRegressor test MSE: ", score_test, '\n')

3. Código de validación cruzada de dejar uno fuera

  • Use la validación cruzada de dejar uno fuera para validar el modelo, el código es el siguiente:
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import LeaveOneOut

loo = LeaveOneOut()
# num = 100

for k, (train_index, test_index) in enumerate(loo.split(train)):
	train_data, test_data, train_target, test_target = train.values[train_index], train.values[test_index], target[train_index], target[test_index]
	
	clf = SGDRegressor(max_iter=1000, tol=1e-3)
	clf.fit(train_data, train_target)
	
	score_train = mean_squared_error(train_target, clf.predict(train_data))
	score_test = mean_squared_error(test_target, clf.predict(test_data))

	print(k, "个", "SGDRegressor train MSE: ", score_train)
	print(k, "个", "SGDRegressor test MSE: ", score_test)

	if k >= 9:
		break

4. Deje el código de validación cruzada del método P

  • Utilice el método de validación cruzada de dejar-P para validar el modelo, el código es el siguiente:
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import LeavePOut

lpo = LeavePOut(p=10)
num = 100

for k, (train_index, test_index) in enumerate(lpo.split(train)):
	train_data, test_data, train_target, test_target = train.values[train_index], train.values[test_index], target[train_index], target[test_index]

	clf = SGDRegressor(max_iter=1000, tol=1e-3)
	clf.fit(train_data, train_target)

	score_train = mean_squared_error(train_target, clf.predict(train_data))
	score_test = mean_squared_error(test_target, clf.predict(test_data))

	print(k, "10个", "SGDRegressor train MSE: ", score_train)
	print(k, "10个", "SGDRegressor test MSE: ", score_test, "\n")

Supongo que te gusta

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