Requisito previo: comprensión de
la regresión logística La regresión logística es el tipo de análisis de regresión que se utiliza para encontrar la probabilidad de que ocurra un determinado evento. Es el tipo de regresión más adecuado para los casos en los que tenemos una variable dependiente categórica que solo puede tomar valores discretos.
El conjunto de datos:
en este artículo, predeciremos si un estudiante será admitido en una universidad en particular, en función de sus puntajes de gmat, gpa y experiencia laboral. La variable dependiente aquí es una variable logística binaria , que se espera que tome estrictamente una de dos formas, es decir, admitida o no admitida .
Construcción del modelo de regresión logística:
Statsmodels es un módulo de Python que proporciona varias funciones para estimar diferentes modelos estadísticos y realizar pruebas estadísticas.
- Primero, definimos el conjunto de variables dependientes ( y ) e independientes ( X ). Si la variable dependiente está en formato no numérico, primero se convierte a numérico utilizando dummies. El archivo utilizado en el ejemplo para entrenar el modelo se puede descargar aquí .
- Statsmodels proporciona una función Logit() para realizar una regresión logística. La función Logit() acepta y y X como parámetros y devuelve el objeto Logit . Luego se ajusta el modelo a los datos.
Python3
# importing libraries import statsmodels.api as sm import pandas as pd # loading the training dataset df = pd.read_csv('logit_train1.csv', index_col = 0) # defining the dependent and independent variables Xtrain = df[['gmat', 'gpa', 'work_experience']] ytrain = df[['admitted']] # building the model and fitting the data log_reg = sm.Logit(ytrain, Xtrain).fit()
Producción :
Optimization terminated successfully. Current function value: 0.352707 Iterations 8
En el resultado, ‘ Iteraciones ‘ se refiere a la cantidad de veces que el modelo itera sobre los datos, tratando de optimizar el modelo. De forma predeterminada, el número máximo de iteraciones realizadas es 35, después de lo cual falla la optimización.
La tabla resumen:
La siguiente tabla de resumen nos brinda un resumen descriptivo sobre los resultados de la regresión.
Python3
# printing the summary table print(log_reg.summary())
Producción :
Logit Regression Results ============================================================================== Dep. Variable: admitted No. Observations: 30 Model: Logit Df Residuals: 27 Method: MLE Df Model: 2 Date: Wed, 15 Jul 2020 Pseudo R-squ.: 0.4912 Time: 16:09:17 Log-Likelihood: -10.581 converged: True LL-Null: -20.794 Covariance Type: nonrobust LLR p-value: 3.668e-05 =================================================================================== coef std err z P>|z| [0.025 0.975] ----------------------------------------------------------------------------------- gmat -0.0262 0.011 -2.383 0.017 -0.048 -0.005 gpa 3.9422 1.964 2.007 0.045 0.092 7.792 work_experience 1.1983 0.482 2.487 0.013 0.254 2.143 ===================================================================================
Explicación de algunos de los términos de la tabla resumen:
- coef : los coeficientes de las variables independientes en la ecuación de regresión.
- Log-Verosimilitud: el logaritmo natural de la función Estimación de máxima verosimilitud (MLE). MLE es el proceso de optimización de encontrar el conjunto de parámetros que dan como resultado el mejor ajuste.
- LL-Null: el valor de log-verosimilitud del modelo cuando no se incluye ninguna variable independiente (solo se incluye una intersección).
- Pseudo R-squ. : un sustituto del valor R-cuadrado en la regresión lineal de mínimos cuadrados. Es la relación entre la verosimilitud logarítmica del modelo nulo y la del modelo completo.
Predicción sobre nuevos datos:
Ahora probaremos nuestro modelo con nuevos datos de prueba. Los datos de prueba se cargan desde este archivo csv.
La función predict() es útil para realizar predicciones. Las predicciones obtenidas son valores fraccionarios (entre 0 y 1) que denotan la probabilidad de ser admitido. Por lo tanto, estos valores se redondean para obtener los valores discretos de 1 o 0.
Python3
# loading the testing dataset df = pd.read_csv('logit_test1.csv', index_col = 0) # defining the dependent and independent variables Xtest = df[['gmat', 'gpa', 'work_experience']] ytest = df['admitted'] # performing predictions on the test datdaset yhat = log_reg.predict(Xtest) prediction = list(map(round, yhat)) # comparing original and predicted values of y print('Actual values', list(ytest.values)) print('Predictions :', prediction)
Producción :
Optimization terminated successfully. Current function value: 0.352707 Iterations 8 Actual values [0, 0, 0, 0, 0, 1, 1, 0, 1, 1] Predictions : [0, 0, 0, 0, 0, 0, 0, 0, 1, 1]
Prueba de la precisión del modelo:
Python3
from sklearn.metrics import (confusion_matrix, accuracy_score) # confusion matrix cm = confusion_matrix(ytest, prediction) print ("Confusion Matrix : \n", cm) # accuracy score of the model print('Test accuracy = ', accuracy_score(ytest, prediction))
Producción :
Confusion Matrix : [[6 0] [2 2]] Test accuracy = 0.8
Publicación traducida automáticamente
Artículo escrito por cosine1509 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA