Selección de features y la maldición de la dimensionalidad
Clase 25 de 32 • Curso de Machine Learning Aplicado con Python
Contenido del curso
Clase 25 de 32 • Curso de Machine Learning Aplicado con Python
Contenido del curso
Wilson Fernando Antury Torres
Pedro Enrique González Valdivieso
Darvin Orozco
Juan Martín Suárez Sunción
Nicolas Enrique Duque Aguirre
Usuario anónimo
Jhon Freddy Puentes Nuñez
Ariel Sharpe
Nallely House
Usuario anónimo
Usuario anónimo
Cristian Orozco Benjumea
Darvin Orozco
Usuario anónimo
Jimmy Buriticá Londoño
Usuario anónimo
Carlos Jacob Carrasco Rodriguez
Darvin Orozco
Usuario anónimo
Usuario anónimo
Usuario anónimo
Usuario anónimo
Usuario anónimo
Usuario anónimo
Usuario anónimo
Usuario anónimo
Geraldine León
Conocimientos para machine learning:
Creo que no debimos usar el score IMBD para entrenar los algoritmos ya esa información lo la tendríamos a la hora de realizar una predicción sobre una película que aún no se ha hecho.
Si, justo en éste punto de la clase de puede llegar a esa conclusión. Sin embargo, no sé si en muchos proyectos tenemos que actuar con la poca data que tenemos y eso podría afectar la certeza del modelo.
Sí, tienens razó, pero igual si lo tomamos en cuenta solo faltaría una variable y así podemos aplicar el .predict() para cada valor del IMDB y así tener cuánto sería la ganacia total en función de una sola varible.
Fue un ejercicio interesante analizar el rendimiento del modelo, en mi caso tuve un nuevo score R2 de 0.89599, mejorando el score del primer módelo que fue de 0.85 cuando se hizo en clase, para el ejercicio decidí no hacer mas modificaciones como creación de features o selección automática de features pues considero que si durante el desarrollo del ejercicio estos cambios no aportaron mejoras sustanciales a la predicción en este caso tampoco lo harán(aunque tal vez mas adelante si lo haga).
Para poder incluir archivo csv opening_df se debe hacer un merge como se hizó con finnancials aprovechando que éste trae la columna title_movies, pero como X no contiene esta columna, basicamente volví hacer toda la preparación de datos de las primeras clases, volviendo hacer toda la separación de datos númericos de textos (objects), haciendo de nuevo el merge de finnancials y haciendo esta vez un segundo merge con opening_df, en este caso, la reducción de datos si es de un 50% ya que opening_df tiene 2272 lineas y otra cosa es que al parecer en opening_df se incluyen nuevas peliculas pues si bien está tiene 2272 lineas, al hacer el merge con movies queda con 2304 lineas, por lo que si bien mejoró el score y además también lo validé con el analisís visual y tanto el scatter normalizado como la función cumulativa obtuvieron mejor rendimiento y menos error, me queda la duda con respecto a lo que dijo el profesor, también como se hizo en clase rellené los datos faltantes con el imputer, pero no vi necesario eliminar datos pues en este caso worldwide_gross no tenia datos faltantes, solo nulos.
Les dejo el código utilizado, yo trabajé en google colab.
# -*- coding: utf-8 -*- # %matplotlib inline import numpy as np import pandas as pd import matplotlib.pyplot as plt from google.colab import files from IPython.display import Image new_data = pd.read_csv('https://github.com/JuanPabloMF/datasets-platzi-course/raw/master/datasets/peliculas.csv', encoding = 'utf-8') new_data new_data.dtypes == float new_data.dtypes == int (new_data.dtypes == float) | (new_data.dtypes == int) new_data.dtypes == object num = (new_data.dtypes == float) | (new_data.dtypes == int) num_cols = [c for c in num.index if num[c]] obj = new_data.dtypes == object obj_cols = [c for c in obj.index if obj[c]] new_data_num = new_data[num_cols] financials = pd.read_csv('https://github.com/JuanPabloMF/datasets-platzi-course/raw/master/datasets/thenumbers.csv') financials = financials[['movie_title', 'production_budget', 'worldwide_gross']] new_data_num = pd.concat([new_data_num, new_data['movie_title']], axis=1) new_data_num.shape additional_data = pd.read_csv('https://github.com/JuanPabloMF/datasets-platzi-course/raw/master/datasets/opening_df.csv', encoding = 'utf-8') additional_data.shape movies_v2 = pd.merge(financials,new_data_num,on='movie_title',how='left') new_movies = pd.merge(additional_data,movies_v2,on='movie_title',how='left') new_movies new_movies.notnull().apply(pd.Series.value_counts) (new_movies != 0).apply(pd.Series.value_counts) from sklearn.impute import SimpleImputer as Imputer imputer = Imputer(missing_values=np.nan, strategy='mean') new_movies = new_movies.drop('movie_title',axis=1) new_movies = new_movies.drop('Unnamed: 0',axis=1) new_movies = new_movies.drop('duration.1',axis=1) new_movies values = imputer.fit_transform(new_movies) values.shape X = pd.DataFrame(values) X.columns = new_movies.columns X.index = new_movies.index X X.notnull().apply(pd.Series.value_counts) (X != 0).apply(pd.Series.value_counts) """**Se procede a entrenar y evaluar el modelo con la informacion nueva**""" y = X['worldwide_gross'] X = X.drop('worldwide_gross',axis=1) from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.4) print(len(X)) print(len(X_train)) print(len(X_test)) from sklearn.linear_model import Lasso model = Lasso() model.fit(X_train,y_train) predicted = model.predict(X_test) model.score(X_test,y_test) residuals = y_test - predicted plt.scatter(y_test,residuals) ap_residuals = np.abs(residuals) / y_test plt.scatter(y_test,ap_residuals) lap_residuals = np.log(ap_residuals) plt.scatter(y_test,lap_residuals) plt.hist(lap_residuals,bins=100, density=1, histtype='step', cumulative=True); plt.hist(lap_residuals,bins=100, density=1, histtype='step', cumulative=True); plt.axis((-2,0,0,1)) # Axis desde -2 hasta 1 np.power(np.exp(1)*np.ones(5),np.linspace(-2,0,5))```
ML consta de tres conocimientos claves:
Importante aquí: Recordar la calidad y limpieza de los datos, volver a los capitulos 5 y 6 de preparación, modelado y evaludacion de datos para que no se nos pase esto.
no pude lograr el desafió de agregar las columnas, y no encuentro el vídeo en donde nos enseña a hacerlo alguien me podría echar una mano. gracias (:
tienes que usar pd.merge() el nombre de las películas funcionaran como llave, tienes que verificar la cantidad de columnas del otro archivo, ya que si no se encuentra la llave se agregaran columnas vacías, o puede que encuentre la llave pero no se tienen los datos que se desean agregar. al final se recomendaría remover esas filas, y eso fue lo que hizo el profesor con la ultima versión del csv.
el archivo csv esta en los materiales del curso en el link de drive.
pd.merge([archivo1.csv,archivo2,csv,on=['movie_tittle']], axis =1)
Nivel de importancia
Me falta mucho por aprender
Como en todo campo es importante la experiencia previa para tener un mejor resultado. Los datos son los que ayudan a mejorar de igual forma esa experiencia.
Finalmente como que el machine learning "depende" mucho del factor humano al elegir otros datos de otras features. ¿Qué piensas?
Si es correcto y no solo los datos sino también la calidad de dichos datos.
Generar features con la ayuda de un experto, mejora la calidad de mi modelo.
Si se puede, pero como vimos en los vídeos anteriores, trabajar con 7 o mas o menos no es mucha la diferencia de los resultados. Solo si estos nuevos datos son como los que indicas, datos futuros con los que no cuenta el ente gubernamental en el ejercicio.
Excelente capitulo, muy importante lo que se explica en un principio, el conocimiento experto es algo que se debe construir paso a paso, he involucrándose en problemas.
No tenía idea sobre la pirámide de maslow, me ayuda agregar peso para saber dónde buscar la solución.
Además aquí se explica por que en el principio del curso hay unas columnas que no entendía de donde aparecian y aquí se explica muy bien.
Gracias
La base del ML no son los datos, es la calidad de los features a elegir. Que gran principio el que hemos aprendido en ésta clase, Saludos.
La experticia se acumula con bastante tiempo de conocimiento y desarrollo de habilidades en la respectiva área de trabajo.
Nivel de importancia interesante según la Pirámide de Maslow
El ML consta de tres conocimientos claves: 1. Matemática 2. Computación 3. Experiencia de dominio (conocimiento de alguna especialidad de saberes).
Niveles de importancia a tener en cuenta según la Pirámide de Maslow:
Imagen de la pirámide de Maslow: ![](
¿Como puede influenciar la experticia del experto al realizar el algoritmo y el análisis de los resultados obtenidos?
Excelente la clarida sobre el conocimiento experto y la piramide de Maslow!
Faltaron los datos o el Scrapper parabajar los datos o la pagina para hacer el scrapper y bajar los datos algo para continuar con el ejercicio
Excelente información, seguimos.
Hola a todos! En el archivo opening_df.csv no me aparece 'movie_title'. Cómo se supone que puedo hacer un merge con nuestros datos si no sé a qué película pertecence cada línea de datos? Hay algo que no estoy viendo? Si me pueden ayudar por favor, me parece super interesante y quisiera lograr el reto!