Mejorando el modelo
Clase 15 de 18 • Curso de Regresión Lineal con Python y scikit-learn
Contenido del curso
Clase 15 de 18 • Curso de Regresión Lineal con Python y scikit-learn
Contenido del curso
FELIX DAVID CORDOVA GARCIA
Luis Fernando Laris Pardo
Tomas Dale
César Isaac González Naranjo
Jose Manuel Rivas Márquez
Sebastian Alejandro Gómez Ardila
Maria Linares
Jhon Freddy Tavera Blandon
César Isaac González Naranjo
Patricia Carolina Perez Felibert
Saúl Regalado
Ignacio Milesi
Yonatan Efraín Jara Boza
Javier Arrieta
Gerardo Mayel Fernández Alamilla
Juan Jose Sepulveda Calderon
Cristian Enrique Cuevas Mercado
Alejandro Collado Valverde
Andrés Fernández
Ángel Samuel Suesca Ríos
sebastián Giraldo Vargas
José Fernando Aguilar Arredondo
Andres Sanchez
Yonatan Efraín Jara Boza
Francisco Alberto Cervantes Rodríguez
Alberto Gonzalez
Gerardo Mayel Fernández Alamilla
Jeinfferson Bernal G
Daniel Felipe Niño Sanabria
Marcos Ireneo Barbas
Bueno, como estoy obsesionado con las redes neuronales, a este proyecto le metí tensorflow usando todas las columnas, sin eliminar ni crear ninguna nueva( además de las que se crearon con get_dummies) y me salió esto:
Nótese que este modelo predice mejor que el primer modelo creado, casi igual que el tercero pero no tan bien como el segundo
:O quedó interesante tu gráfico de los residuales ¡gracias por compartir! Yo siendo curioso, me pregunto si beneficiaría al modelo que usaras dropout entre las capas :thinking:
MUCHISIMAS GRACIAS, MUY BUEN APORTE, PREGUNTA, COMO SE PODRIA HACER UNA PREDICCION? NO LOGRO HACER EL COMANDO PARA QUE DEVUELVA UN 'Y' CON PREDICCION
por qué edad al cuadrado ? para qué sirve ? , darle más peso a la edad ?
tengo la misma duda
Pensé algo similar, pero cuando realizamos
sc_y = StandardScaler().fit(y) y_train = sc_y.transform(y_train)
los valores se normalizan, tengo la misma duda, si alguien puede ayudar a resolverla, genial
Es una buena práctica crear una copia de tu data frame con .copy() para poder trabajar con modelos alternativos sin arruinar tus datos originales.
Para mejorar el modelo de regresión lineal, puedes considerar las siguientes estrategias:
Feature Engineering:
Selección de características:
Regularización:
Manejo de valores atípicos:
Validación cruzada:
Regularización de hiperparámetros:
Me pueden explicar un poco sobre la gráfica de residuales ? no entiendo para que es o como interpretarla :D
tambien me quedo esa duda
El modelo toma el valor 0.0 y cada punto es el valor real del dataset. Por lo que la "distancia" entre cada punto y la línea del 0 representa que tanto le faltó/sobró al modelo para predecir el valor real, en otras palabras el residuo
Se puede verificar la relacion bien marca entre un pasiente con sobrepeso y fumador con los costos:
La grafica se puede obtener con:
sns.scatterplot(data = df_second[['age', 'charges', 'sobrepeso*fumador' ]],
x = "age",
y = "charges",
hue= 'sobrepeso*fumador')
Buenas, sobre la tabla resumen, a partir de que se muestra en columnas el estadìstico t y el valor p, entiendo que esto esta relacionado con la parte inferencial de la estadìstica, en la que el 0.05 es por el nivel de significancia 5% y que cuando el p-value era menor que este 0.05 se rechazaba una hipótesis nula. La pregunta es: Cómo entender intuitivamente que al ver estos valores-p algunos me servirán y otros no sabiendo esta base estadística? Cuál es la hipótesis nula aquí si es que la hay? Qué quiere decir que una variable es igual a 0 (se menciona en 9:05)?
Vale pero como puedo pasarle datos para que realice una prediccion? porque a mi pensar falta explicar eso, nose como pasarle los datos necesarios para que el modelo haga su trabajo y me haga una preccion, por ejemplo un paciente con 60 años, que fuma pero no es obeso, y ademas tiene 2 hijos
muy buena pregunta, lo que mencionas sería poner a tu modelo en producción hay varias maneras, una es un batch, es decir podrías tener los nuevos datos que quieres predecir en un archivo cdv, cargarlos y hacer la predicción, el modelo puede exportarse como archivo .pkl , es decir el modelo entrenado, y después cargarlo com la librería job lib, una vez cargado puedes empezar a hacer predicciones en nuevos datos, es importante que esos nuevos datos tengan la misma estructura que los datos con los que entrenaste el modelo, te dejo un ejemplo de una nueva predicción considerando los datos que mencionaste en el.ejemplo y complete los otros datos que no mencionaste , este código puedes incorporarlo a tu notebook ara empezar a hacer nuevas predicciones en mi caso el segundo modelo entrenado lo llamé model_2
model_2.predict([[60, 30.64, 2, 3600, 0, 1, 1, 0, 1, 0, 0]])
se obtiene el resultado:
array([[254.14142089]])
¿Con qué criterio se debe crear nuevas variables?
aun así existe presencia de heterocedasticidad en los residuos
Como es posible que con los mismos datos y el mismo codigo me esten dando valores distintos en los coeficientes?
La mejor clase del curso!
Es fundamental entender estadística inferencial para poder saber qué tan aceptable es cada uno de los coeficientes, y qué tan buena es su estimación.
Por qué al utilizar metrics el r2 me da negativo, pero en el summary me lo muestra positivo?. afecta en algo?
Hola Sebastián, podrías mostrarme tu código, por favor :) Y ver que es lo que paso.
¿Con qué criterio sé cuáles variables elevar al cuadrado y cuáles no?
Otra cuestión, el contexto es que yo he estandarizado X_train y X_test ambos a partir de ajustar el modelo de estandarización a solo X_train (no a todo X), y no he estandarizado ni Y_train ni Y_test, esto por los aportes de mis compañeros y lecturas por foros sobre que practicas usa la comunidad. . Entonces he seguido los pasos explicados del video para mejorar el modelo y me resulta todo muy similar incluyendo que elijo las mismas variables para el modelo final, la diferencia es en el p-value del intercepto pues me da 0.000000 (no 0.85 o 0.66 como en el video). . Esto qué significado tiene? Cuál es el análisis que se le puede dar? . Por si acaso, también he probado con la ruta de estandarizaciones de variables del docente y me dió valores similares a los del video para todos los p-value, o sea parece que las estandarizaciones fueron las determinantes.
Una vez hecho el segundo modelo (antes de eliminar las variables) decidí graficar la relación entre la Edad y el Cargo:
plt.scatter(X_test[:,5], y_test, label='test') plt.scatter(X_test[:,5], y_predict, label='predict') plt.xlabel('Edad normalizada') plt.ylabel('Cargo normalizado') plt.legend(loc=(1.02,0.5)) plt.show()
Me sorprendió lo parecido que son los datos predecidos con los del test! Ver este tipo de cosas sólo me hacen querer continuar más en esto. Muchas gracias profesor!!
Voy a probar el código que muestras en tu aporte, me ha interesado bastante! Esta área del análisis de lbig data con machine learning es bien interesante.
por qué la edad al cuadrado podría ayudar al modelo:
Podría haber una relación cuadrática entre la edad y la variable de respuesta. Por ejemplo, si se trata de un conjunto de datos de seguros, los costos podrían aumentar a un ritmo acelerado a medida que las personas envejecen debido a un mayor riesgo de problemas de salud
Interesante conclusion!
Me quedo la duda de como utilizar el modelo 2 ya en la practica con valores "x" que necesitemos utilizar, lo probé de la siguiente forma, aunque me sale un mensaje de advertencia, si alguno me puede corroborar que esa es la forma adecuada de hacerlo le agradezco:
# Paso 1: Preparar los nuevos datos new_data = pd.DataFrame({ 'feature1': [1,1,0], # Reemplaza con los valores reales 'feature2': [1,0,1], 'feature3': [900,400,500], 'feature4': [2,0,1], # Agrega aquí las demás características }) # Paso 2: Aplicar el escalado utilizando el StandardScaler entrenado previamente new_data_scaled = sc_x.transform(new_data) # Paso 3: Realizar la predicción con el modelo entrenado predicted_scaled = model.predict(new_data_scaled).reshape(-1, 1) # Paso 4: Invertir la transformación de escalado para obtener las predicciones en su escala original predicted = sc_y.inverse_transform(predicted_scaled) # Las predicciones se encuentran ahora en la variable 'predicted' print(predicted)
El mensaje de adverttencia que me genera es el siguiente: X has feature names, but StandardScaler was fitted without feature names.
Les dejo algunos algunos features nuevos que realmente dan un buen aporte al modelo
second_df['bmi2'] = second_df['bmi'] **2 second_df['age2'] = second_df['age'] **2 second_df['sobrepeso'] = (second_df['bmi'] >= 30).astype(int) second_df['sobrepeso_region_sudeste'] = second_df['sobrepeso'] * second_df['region_southeast'] second_df['sobrepeso_fumador'] = second_df['sobrepeso'] * second_df['smoker_yes'] second_df['fumador_con_riesgo'] = second_df['smoker_yes'] * (second_df['age'] > 34).astype(int)