Maravilloso curso, hace tiempo que no estudiaba 7 horas seguidas , pero este curso lo valía
Fundamentos de regresión logística
¿Qué es la regresión logística?
Tu primera clasificación con regresión logística
¿Cuándo usar regresión logística?
Fórmula de regresión logística
Regresión logística binomial
Preparando los datos
Análisis de correlación y escalabilidad de los datos
Análisis exploratorio de datos
Entrenamiento con regresión logística binomial
Evaluando el modelo (MLE)
Análisis de resultados de regresión logística
Regularizers
Regresión logística multinomial
Cómo funciona la regresión logística multiclase
Carga y preprocesamiento de datos multiclase
Análisis exploratorio y escalamiento de datos multiclase
Entrenamiento y evaluación de regresión logística multiclase
Conclusiones
Proyecto final y siguientes pasos
Comparte tu proyecto de regresión logística y certifícate
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Nombre del curso: Curso de Regresión Logística con Python y scikit-learn
Dean: Sebastián Delmont
Faculty Manager: Ricardo Celis
School Director: Carlos Alarcón
School Owner: Miguel Torres
Profesor: Carlos Alarcón
Dirección: Miguel Torres
Producción OPS: Lizeth Cáceres y Rocío Martínez
Creación audiovisual: César A. Pinilla
Edición de video: Diana Capote
Postproducción de audio: Diana Capote
Diseño gráfico: Eduardo Molea
Coordinación General: Andrés Arizmendy, Daniel Gutierrez, Carol Baquero, Carlos Céspedes, Sura Cedeño y Sara Hernández
Revisión: Axel Yaguana Cruz y Brandon Verdeja
Aportes 17
Preguntas 1
Maravilloso curso, hace tiempo que no estudiaba 7 horas seguidas , pero este curso lo valía
Me encanta y ya me estoy imaginanado todos los proyectos en los que puedo aplicar lo que he aprendido, muchas gracias.
Dejo aquí mis resultados de este proyecto
En 1ra instancia, se carga el dataset que se descargó de Kaggle
df = pd.read_csv('data/cancer_data.csv')
df.head()
En 2da instancia, se procede a checar si hay valores nulos (en este caso no los hay, de acuerdo con la información de Kaggle, pero aún así se checa)
df.isnull().sum()
En 3ra instancia, se hace una copia del dataset original y se hace un drop de las columnas ‘id’ y ‘Unnamed: 52’ y se obtienen las columnas de las features que quedaron
df_copy = df.copy()
df_copy.drop(['id', 'Unnamed: 32'], axis = 1, inplace=True)
df_copy.columns
En 4ta instancia, debido a que se trata de predecir si el tumor es benigno o maligno, las clases están divididas entre ‘M’ (maligno), ‘B’ (benigno), por lo que se reemplaza los valores de ‘M’ y ‘B’ por 1 y 0 respectivamente
df_copy['diagnosis'].replace(to_replace='M', value = 1, inplace=True)
df_copy['diagnosis'].replace(to_replace='B', value = 0, inplace=True)
En 5ta instancia, se realiza una matriz de correlaciones para observar si existe multicolinealidad entre las variables explicativas
fig = plt.figure(figsize=(18,18))
matrix_corr = df_copy.corr()
sns.heatmap(matrix_corr, annot=True, cmap='coolwarm')
plt.show()
Como se pudo observar anteriormente, existe multicolinealidad entre variables explicativas, lo que representaría un overfitting dentro del próximo modelo a utilizar (se observa claramente que las variables con multicolinealidad tienen bastante relación debido a su fundamento matemático [ejemplo: la media del area y la media del radio]) por lo que se procede a eliminar dichas features.
En 6ta instancia 1ra parte, se escalarán los datos para luego comprobar la multicolinealidad entre las variables con vif (variance inflation factor)
st_x = StandardScaler()
X = df_copy.drop(['diagnosis'], axis = 1)
y = df_copy['diagnosis']
df_scaled = st_x.fit_transform(X)
cols = [cname for cname in X.columns if X[cname].dtype in ['int64', 'float64']]
df_scaled = pd.DataFrame(df_scaled, columns=cols)
df_scaled.head()
En 6ta instancia 2da parte, se calculará el factor de varianza inflada para ver la multicolinealidad entre las variables
X_data = pd.DataFrame()
X_data['Feature'] = X.columns
X_data['VIF']= [variance_inflation_factor(df_scaled.values, i) for i in range(len(X.columns))]
print(X_data)
print(list(X_data['Feature']))
Como se puede ver anteriormente hay ciertas variables con un factor de varianza inflada muy grande lo que supone, primeramente, un overfitting del modelo que se puede utilizar y, segundo, sensibilidad que puede llegar a tener el modelo, por tanto se optará por eliminar las variables que influyen al factor de varianza inflada
Cabe aclarar que el valor de VIF debe de estar entre 1 y 5, no ahondaré en el tema pero pueden leer más aquí
En 7ma instancia, se hace drop de las variables con un VIF mayor a 5 y se recalcula el VIF para ver cómo fueron afectadas las demás variables (esto depende mucho del dataset y las variables implicadas, este es un ejemplo ilustrativo)
X_vif = df_scaled.drop(['radius_mean','texture_mean','fractal_dimension_mean','texture_worst','compactness_worst','compactness_mean','concavity_mean','concave points_mean','radius_se', 'texture_se', 'perimeter_se', 'area_se', 'smoothness_se', 'compactness_se', 'concavity_se', 'concave points_se', 'symmetry_se', 'fractal_dimension_se','concave points_worst'], axis = 1)
X_data = pd.DataFrame()
X_data['Feature'] = X_vif.columns
X_data['VIF']= [variance_inflation_factor(X_vif.values, i) for i in range(len(X_vif.columns))]
print(X_data)
Como se puede ver anteriormente, se eliminaron las variables que tenían un alto valor de factor de varianza inflada. Ya conociendo esto, se procederá a hacer el split entre entrenamiento y test del dataframe con las features que quedaron
En 8va instancia, se define la función ‘logistic_model’ con parámetros de entrada ‘C_’, ‘solver_’, ‘multiclass_’, como se vio en clase, después se procede a hacer el split entre entrenamiento y test, y finalmente se entrena con diferentes solvers y multiclass (en este caso sólo es una regresión logística binomial entonces no es necesario la multiclase pero aún así se entrena por motivos ilustrativos)
def logistic_model(C_,solver_,multiclass_):
logistic_regression_model = LogisticRegression(random_state=42, solver=solver_, multi_class=multiclass_, n_jobs=-1, C=C_)
return logistic_regression_model
X_train, X_test, y_train, y_test = train_test_split(X_vif,y, test_size=0.33, random_state=42) #Para terminos de reproducibilidad se eligirá un random state de 42
multiclass = ['ovr', 'multinomial']
solver_list = ['liblinear', 'newton-cg', 'lbfgs', 'sag', 'saga']
scores = []
params = []
for i in multiclass:
for j in solver_list:
try:
model = logistic_model(1,j,i)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
params.append(i + ' ' + j)
accuracy = accuracy_score(y_test, predictions)
scores.append(accuracy)
except:
None
for i in range(len(scores)):
print(f'El solver {params[i]} tuvo un score de {scores[i]}')
Como se puede observar anteriormente, los resultados para cada solver son similares, por tanto se puede elegir cualquiera de los solvers
El aporte queda muy largo entonces seguiré en los comentarios de este mismo aporte
TEST reeesultados
Resumen
1.
¿Para qué tipo de tareas funciona el algoritmo de regresión logística?
Clasificación
2.
¿Cuál es la función base en la regresión logística?
Sigmoid
3.
NO es una ventaja de la regresión logística:
Recibe variables categóricas.
4.
Una desventaja de la regresión logística es que se degrada su performance ante datasets linealmente no separables. ¿Esto es verdadero o falso?
Verdadero
5.
¿Con qué tipo de datasets es preferible usar regresión logística?
Binomial
6.
El rate de probabilidad de ocurrencia sobre probabilidad de no ocurrencia tipo (0.80 / 0.20 = 4) se denomina:
Odds
7.
¿Cuál es la fórmula de la regresión logística?
Untitled design.png
8.
¿Cómo se denomina al proceso para llevar todos los datos de un dataset a una misma escala numérica?
Normalización
9.
Eliminar valores nulos hace parte del proceso de preparación de datos en regresión logística:
Verdadero
10.
¿Por qué es necesario realizar un análisis exploratorio de datos antes de entrenar un modelo de machine learning?
Ayuda a entender el comportamiento de los datos y cómo trabajarlos.
11.
Un dataset en cuya variable objetivo es true o false en cuanto a detección de spam en un mail es considerado:
Binomial
12.
¿Evaluando el MLE es preferible un resultado menor o mayor?
Menor
13.
La función de coste evalúa las diferencias en la predicción del modelo y el valor real a predecir. ¿Esto es verdadero o falso?
Verdadero
14.
Para importar la librería necesaria para la regresión logística desde sklearn se debe usar la siguiente línea de código:
from sklearn.linear_model import LogisticRegression
¿Qué se busca evitar al aplicar regularizers en regresión logística?
Overfitting
16.
¿Cuál es la técnica de regularización basada en el valor absoluto de los pesos?
L1
17.
¿Cómo se usa en scikit-learn la técnica de regresión logística multiclase que separa una clase y la evalúa contra el resto para clasificar?
ovr (One vs Rest)
18.
Todos los solvers en logistic regression funcionan con todas las combinaciones de regulatizers y tipo de regresion multiple:
Falso
19.
Para realizar la predicción de la clase puedo utilizar el método:
predict
20.
¿Qué retorna el método predict_proba?
La probabilidad para cada clase.
Ver menos
Resuelto el proyecto con LogisticRegression() sin el seteo de ningun parametro:
Resuelto el proyecto usando LogisticRegression() en GridSearchCV():
Igual presento la prueba
Muchas gracias profe, todo estuvo muy interesante
Muchas gracias profesor Carlos, estos cursos de Machine learning son lo mejor!
Genial curso!!
Excelente curso, Gracias Carlos!!
El profesor Carlos Explica los temas super bien, ¡se nota la gran vocación por enseñar!
¡Excelente Curso!
Carlos el curso esta genial, muchas gracias, siempre quedo con ganas de mas 😃)
Hermoso curso! aprendi mucho, ahora a empezar el siguiente 😄
Otro gran curso de Carlos Alarcón, eres un crack bro.
Genial el curso , muchas gracias
Disdruté bastante y aprendí mucho más.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?