No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Proyecto final y siguientes pasos

16/17
Recursos

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 18

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

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.

Bueno mis locos, como siempre Carlos es el mejor profesor por el que he pasado en Platzi. Me han cambiado de 4 profesores en 1 a帽o de estudio de DS, pero Carlos es, por lejos, el mejor.
Aqu铆 les dejo los apuntes del curso con material extra y videos que les pueden ayudar.

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 鈥榠d鈥 y 鈥楿nnamed: 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 鈥楳鈥 (maligno), 鈥楤鈥 (benigno), por lo que se reemplaza los valores de 鈥楳鈥 y 鈥楤鈥 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 鈥榣ogistic_model鈥 con par谩metros de entrada 鈥楥_鈥, 鈥榮olver_鈥, 鈥榤ulticlass_鈥, 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!

gran curso y explicaci贸n :)
Profesor Alarc贸n, muchas gracias por todo

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.