Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Aprende Machine
Learning
en Español
Privacy - Terms
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 1/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
PRÁCTICA
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 2/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 3/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Para nuestro ejercicio he creado un archivo csv con datos de entrada a modo de ejemplo
para clasificar si el usuario que visita un sitio web usa como sistema operativo Windows,
Macintosh o Linux.
Nuestra información de entrada son 4 características que tomé de una web que utiliza
Google Analytics y son:
0 – Windows
1 – Macintosh
2 -Linux
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 4/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
La muestra es pequeña: son 170 registros para poder comprender el ejercicio, pero
recordemos que para conseguir buenos resultados siempre es mejor contar con un
número abundante de datos que darán mayor exactitud a las predicciones y evitarán
problemas de overfitting u underfitting. (Por decir algo, de mil a 5 mil registros no estaría
mal).
Requerimientos técnicos
Para ejecutar el código necesitas tener instalado Python -tanto la versión 2.7 o 3.6- y varios
paquetes usados comúnmente en Data Science. Recomiendo tener instalada la suite
Anaconda o Canopy, muy sencillas y con los paquetes para “Data Science” ya pre-
instalados y funcionan en todas las plataformas.
Para este ejemplo he creado un block de notas Jupyter donde se muestra paso a paso el
ejercicio. Se puede descargar desde aqui o se puede seguir online desde el Jupyter
Notebook Viewer.
Para comenzar hacemos los Import necesarios con los paquetes que utilizaremos en el
Ejercicio.
1 import pandas as pd
2 import numpy as np
3 from sklearn import linear_model
4 from sklearn import model_selection
5 from sklearn.metrics import classification_report
6 from sklearn.metrics import confusion_matrix
7 from sklearn.metrics import accuracy_score
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 5/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
8 import matplotlib.pyplot as plt
9 import seaborn as sb
10 %matplotlib inline
Leemos el archivo csv (por sencillez, se considera que estará en el mismo directorio que el
archivo de notebook .ipynb) y lo asignamos mediante Pandas a la variable
dataframe. Mediante el método dataframe.head() vemos en pantalla los 5 primeros
registros.
1 dataframe = pd.read_csv(r"usuarios_win_mac_lin.csv")
2 dataframe.head()
1 dataframe.describe()
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 6/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Luego analizaremos cuantos resultados tenemos de cada tipo usando la función groupby
y vemos que tenemos 86 usuarios “Clase 0”, es decir Windows, 40 usuarios Mac y 44 de
Linux.
1 print(dataframe.groupby('clase').size())
Visualización de Datos
Primero visualizamos en formato de historial los cuatro Features de entrada con nombres
“duración”, “páginas”,”acciones” y “valor” podemos ver gráficamente entre qué valores se
comprenden sus mínimos y máximos y en qué intervalos concentran la mayor densidad
de registros.
1 dataframe.drop(['clase'],1).hist()
2 plt.show()
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 7/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Y también podemos interrelacionar las entradas de a pares, para ver como se concentran
linealmente las salidas de usuarios por colores: Sistema Operativo Windows en azul,
Macintosh en verde y Linux en rojo.
1 sb.pairplot(dataframe.dropna(), hue='clase',size=4,vars=["duracion", "paginas","acciones","valor"],kind
1 X = np.array(dataframe.drop(['clase'],1))
2 y = np.array(dataframe['clase'])
3 X.shape
(170, 4)
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 8/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Y creamos nuestro modelo y hacemos que se ajuste (fit) a nuestro conjunto de entradas X
y salidas ‘y’.
1 model = linear_model.LogisticRegression()
2 model.fit(X,y)
<
Una vez compilado nuestro modelo, le hacemos clasificar todo nuestro conjunto de
entradas X utilizando el método “predict(X)” y revisamos algunas de sus salidas y vemos
que coincide con las salidas reales de nuestro archivo csv.
1 predictions = model.predict(X)
2 print(predictions)[0:5]
[2 2 2 2 2]
Y confirmamos cuan bueno fue nuestro modelo utilizando model.score() que nos devuelve
la precisión media de las predicciones, en nuestro caso del 77%.
1 model.score(X,y)
0.77647058823529413
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 9/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Volvemos a compilar nuestro modelo de Regresión Logística pero esta vez sólo con 80%
de los datos de entrada y calculamos el nuevo scoring que ahora nos da 74%.
1 name='Logistic Regression'
2 kfold = model_selection.KFold(n_splits=10, random_state=seed)
3 cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')
4 msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
5 print(msg)
Y ahora hacemos las predicciones -en realidad clasificación- utilizando nuestro “cross
validation set”, es decir del subconjunto que habíamos apartado. En este caso vemos que
los aciertos fueron del 85% pero hay que tener en cuenta que el tamaño de datos era
pequeño.
1 predictions = model.predict(X_validation)
2 print(accuracy_score(Y_validation, predictions))
0.852941176471
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 10/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
1 print(classification_report(Y_validation, predictions))
Tiempo Duración: 10
Paginas visitadas: 3
Acciones al navegar: 5
Valoración: 9
Lo probamos en nuestro modelo y vemos que lo clasifica como un usuario tipo 2, es decir,
de Linux.
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 11/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
array([2])
Los invito a jugar y variar estos valores para obtener usuarios de tipo Windows o
Macintosh.
Conclusiones
Durante este artículo vimos cómo crear un modelo de Regresión Logística en Python para
poder clasificar el Sistema Operativo de usuarios a partir de sus características de
navegación en un sitio web. A partir de este ejemplo, se podrá extender a otro tipos de
tareas que pueden surgir durante nuestro trabajo en el que deberemos clasificar
resultados en valores discretos. Si tuviéramos que predecir valores continuos, deberemos
aplicar Regresión Lineal.
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 12/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
leerlos.
Como siempre los invito a suscribirse al blog y a compartir las entradas en Redes Sociales
para que podamos aumentar nuestra comunidad de “estudiantes” aprendiendo Machine
Learning!
ENVIAR
Hasta la próxima!
Libro Relacionado
Libros Relacionados
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 13/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
QUÉ ES OVERFITTING Y UNDERFITTING Y CÓMO SOLUCIONARLO
42 comments
Muchas gracias
Reply
Hola Juan Ignacio…. Lo felicito porque está muy bien explicado este tema…. siga
así…. !!!!
Reply
Hola efraín, muchas gracias por tus palabras!. Espero poder escribir
un nuevo artículo sobre Redes Neuronales con Python pronto!.
Saludos y seguimos en contacto
Reply
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 15/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Juan Ignacio, de verdad muchas gracias por ayudarnos a todos los que estamos
aprendiendo.
Reply
Hola Juan Ignacio, muchas gracias, y muchas felicidades también por tan loable
labor de compartir este conocimiento tan útil, me esta siendo de muchísima
ayuda. Tengo una pregunta, en tu dataset en la variable objetivo “clase”, no
están niveladas las categorías (86,40,44), al parecer en este caso no afecta en
gran medida al resultado porque son pocos datos, pero si tuviéramos el mismo
escenario pero con más datos ej. (8725,1230,2300), ¿nos serviría también este
algoritmo, o tendríamos que prescindir de algunos datos para nivelar el
numero?
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 16/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Gracias
Reply
Na8 · August 24, 2018
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 17/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Hola Nacho. Muy buen artículo. Bastante bien explicado, aunque he tenido que
buscar ayuda externa de k-fold cross validation, ya que no sabía lo que era (por
si la vale a alguien, aquí lo explican muy bien en inglés:
https://magoosh.com/data-science/k-fold-cross-validation/). Tengo una
preguntilla: si al principio entrenamos el modelo con todos los datos, ¿cómo es
que al predecir sobre esos mismos datos obtenemos sólo un 77% de acierto en
vez de un 100%? Muchas gracias y un saludo
Reply
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 18/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Hola Nacho.
Al ejecutar este código:
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 19/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
predictions = model.predict(X)
print(predictions)[0:5]
me sale este error:
a
print(predictions[0:5])
Reply
para felicitarte por tu blog, te comento estoy haciendo una predicción con
imágenes usando inteligencia artificial, si me puede colaborar con una guía por
que camino me debo ir , ya que es un tema sobre procesamiento de imagen de
cáncer
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 20/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
agradezco tu atención.
Reply
Hola buenas noches, para consultar cual es el mejor algoritmo que me permite
analizar imágenes con inteligencia artificial, agradecería tu colaboración
guiándome con el tema, te comento es sobre el análisis de imagen de cáncer
para clasificar su porcentaje de efectividad
Reply
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 21/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
* La fecha.
* Franja horaria
* Si fue o no fue un accidente
Para predecir en donde y cuando va a ocurrir un accidente automovilistico. Te
agradecieria tu opinion y consejos. Gracias!
Reply
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 23/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Reply
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 24/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Hola Juan Ignacio, muchas gracias por todas tus publicaciones, son super faciles
de comprender.
Te quería preguntar que me aconsejas para hacer una regresion logistica para
determinar la probabilidad de 9 clases, teniendo en cuenta que tengo variables
categoricas y numericas, mi variable a predecir es categórica, intente convertir
toda la variable en dummie, pero el algoritmo que indicas no me funciona. Tal
vez sera porque son demasiadas clases?
O como defino mi variable a predecir y las predictorias?
gracias Juan Ignacio
Saludos,
Reply
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 25/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
estimado,
hay algo que me cuesta comprender, al ingresar un conjunto de datos y solicitar
que nos determine a que clase pertenece, por que nos da solo 3 resultados?
bajo qué parametros determina los distintos resultados?
Reply
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 26/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Hola Juan Ignacio, que sentencia utilizarías en el ejemplo para hacer un K-S test,
y el p-value test? Gracias
Reply
model.fit(X_train, Y_train)
Gracias
Reply
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 27/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
buenas, te felicito por la pagina. Consulta, el dataset solo tiene que tener
variables cuantitativas o dummies?
Reply
hola men, gracias por compartir tu conocimiento, una consulta sabes por que el
valor que tome el RANDOM_STATE influye mucho en el valor del score?
Por ejemplo usaste un valor de random_state=7 y con ese lograste superar el
score que se uso sin dividir la data en train/test, pero si le ponemos otros
valores al random_state el valor del score cambia, sabes como influye mucho el
valor del random_state? como elegir el mejor valor del random_state? se que si
no lo usas te cambia la data por lo que es mecesario darle un valor pero como
saber cual es el mejor valor?
Reply
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 28/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
He visto que podemos tomar un rango y graficar los scores, para ver en cual es
el mas alto: algo asi
scores=[]
for i in range(1,100):
X_train,X_test,y_train,y_test=train_test_split(X,Y,test_size=0.20,random_state=i)
kfold = KFold(n_splits=10, random_state=42)
cv_results = model_selection.cross_val_score(modelo, X_train, y_train, cv=kfold,
scoring=’accuracy’)
predicciones2 = modelo.predict(X_test)
scores.append([i,accuracy_score(y_test, predicciones2)])
for i in range(1,100):
plt.plot(scores[i-1][0],scores[i-1][1],marker=’x’)
el cambio se da por el RANDOM_STATE en el train_split, en el kfold no influye el
valor del random:state
Reply
Leave a Reply
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 29/30
2/1/23, 8:30 PM Regresión Logística en Python | Aprende Machine Learning
Search …
Contacto
Suscripción
Recibe los artículos de Aprende Machine Learning en tu casilla de correo. Cada 15 días y sin Spam!
ENVIAR
https://www.aprendemachinelearning.com/regresion-logistica-con-python-paso-a-paso/ 30/30