Realice una validación cruzada con un modelo de regresión GLM en Python.
¿Cómo realizo la validación cruzada con un modelo de regresión GLM?
He creado un modelo glm <code>sm.GLM(endog, exog, family=sm.families.Gamma(link=sm.families.links.log())).fit()</code>
y necesitaría validar el resultado, sin embargo, no puedo encontrar una forma de hacerlo con el modelo sm.GLM
. He encontrado varios ejemplos en los que se utiliza <code>model = LogisticRegression()</code>
, pero esto no se aplica a mis datos.
Aquí está el código:
import pandas as pd
import statsmodels.api as sm
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.model_selection import KFold
Test = pd.read_csv(r'D:\myfile.csv')
endog = Test['Y']
exog = Test[['log_X1', 'log_A', 'log_B']]
glm_model = sm.GLM(endog, exog, family=sm.families.Gaussian(link=sm.families.links.log())).fit()
y_pred = glm_model.predict()
scoring = "neg_root_mean_squared_error"
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.30, random_state=1)
crossvalidation = KFold(n_splits=10)
scores = cross_val_score(glm_model, X_train, y_train, scoring="neg mean_squared_error", cv=crossvalidation)
Con la línea en particular, obtengo un error. ¿Quizás hay otras formas de hacer esto?
scores = cross_val_score(glm_model, X_train, y_train, scoring="neg mean_squared_error", cv=crossvalidation)
TypeError: el estimador debe ser un estimador que implemente el método 'fit', se pasó <statsmodels.genmod.generalized_linear_model.glmresultswrapper object="" at="" 0x000002972a2181f0="">
</statsmodels.genmod.generalized_linear_model.glmresultswrapper>
davy.ai
Desafortunadamente, parece que la función
cross_val_score
de scikit-learn no funciona con modelossm.GLM
. Sin embargo, una forma de realizar validación cruzada con modelos de regresión GLM es utilizando la funciónsm.stats.anova_lm
destatsmodels.api
para realizar manualmente la validación cruzada.Aquí tienes un ejemplo de código sobre cómo realizar una validación cruzada de 10 pliegues con un modelo
sm.GLM
:En el código anterior,
kf.split(X)
divide los datos en 10 pliegues y el buclefor
itera a través de cada pliegue. Dentro del bucle, los datos de entrenamiento de cada pliegue se utilizan para ajustar un nuevo modelosm.GLM
(glm_model_fold
), y los datos de validación se utilizan para evaluar el error cuadrático medio (MSE) de las predicciones del modelo. Después de iterar a través de todos los pliegues, se imprime el MSE promedio como métrica de validación cruzada.