#60 No le veo mucho sentido a eso, la verdad. Quizá se me escape algo, pero no puedes saber si tu modelo hace overfit hasta que lo comparas con datos con los que no has hecho fit
#61 lo que hago es meter otra vez el x_trsin en el modelo. Algo así.
Y_resultados=modelo. Predict(x_trsin)
Compruebo los errores comparando y_res e y_train.
#62 asi lo que puedes ver es la precision, y un modelo que este jodidamente overfiteado te dara una precision muy alta, por eso esta overfit, porque es capaz de predecir los datos del entrenamiento demasiado bien. Es cuando le pasas datos que no ha visto nunca cuando empiezas a obtener resultados no tan buenos y es porque el modelo se ha aprendido de memoria las respuestas del examen y le han cambiado las preguntas a la hora de la verdad
#63 entonces no hay manera de saberlo? Es obvio que al meter le los test_dataset la precisión va a ser menor pero se puede descartar que este overfit solo con el train de alguna manera más?
#64 Que yo sepa no. Que la precision con test sea algo menor es normal, no significa que haya overfit. como digo en #63 por definición el overfit es un fenómeno en el que se ven los síntomas cuando usas datos nunca vistos por el modelo, asi que si existe, no se me ocurre ningun metodo para afirmar categóricamente si este modelo tiene overfit sin usar test data. Que alguien me corrija si es necesario.
Así como idea aparte lo unico que se me ocurre es que subdividas otra vez tu train data en train/validation/test y uses train-validation para comprobar un posible overfit, y luego con test ya haces metricas de precision
#66 si, exactamente, lo que haces con cross validation es subdividir el dataset tomando una pequeña muestra para ver que tal se comporta el modelo en datos no vistos
cual es el sentido de que digan de empezar siempre usando la regresion lineal en vez de modelos que sean capaces de detectar relaciones no lineales ? Por lo que llevo leyendo se asume muy a la ligera en ciencia de datos que las cosas son lineales y en mi experiencia practicamente nada lo es
#68 supongo que por sencillez y el tiempo de procesado. En estas cosas vas a terminar haciendo cien modelos con diversos parámetros y algoritmos y tendrás que comparar sus resultados contra un modelo base, en el caso de una regresión no hay mada más sencillo que una regresión lineal así que es un buen candidato para un baseline model, luego ya lo puedes ir complicando. Además es virtualmente imposible overfitear con un modelo lineal de lo simple que es.
#69 pero si aplicas una regresión lineal con algo que no lo es tampoco te va a servir de nada para comparar
#71 hombre, dará sus resultados, serán malos pero hará lo que pueda. Vamos que cuando tu te hagas tus modelos para tus cosas puedes empezar con una regresión polinomial de mil demonios si te apetece, el lobby de la regresión lineal no te va a poner una pistola en la sien
#60 IMHO el data leaking solo ocurre cuando usas los datos del dataset de test para el entrenamiento. Mientras el test_set solamente se utilice para comparar el rendimiento del modelo con respecto al rendimiento durante el entrenamiento, todo bien.
Para explicarme mejor. Durante el entrenamiento deberias observar el rendimiento del modelo entrenado con el dataset de entrenamiento y luego evaluarlo con el rendimiento en el dataset de test. Consiguiendo ver una grafica tal que así:
Y el punto óptimo donde el modelo estaría generalizando el resultado para todo tipo de dato, sería el del mínimo error en el dataset de test.
#68 Yo siempre he entendido que se hacia así porque al final cada neurona artificial es una pequeña suma de regresiones lineales seguida de una función de activación.
Output (antes de la función de activación) = w*X + b
Weight and Bias
Y todas ellas combinadas con las funciones de activación empiezan a moldear esa linealidad en algo más complejo
#74 realmente un producto y suma de sistemas lineales sigue siendo un sistema lineal, lo qie añade no linearidad al sistema son precisamente las funciones de activación
una pregunta my estupida, hay alguna manera de hacer que los archivos .IPYNB se abran sin tener que abrir la consola de anaconda, añadir la ruta y ejecutar el jupyter notebook?
Creo que me he venio muy arriba y a ver si me podeis aconsejar.
Me he bajao este dataset para hacer un clasificador : https://www.kaggle.com/datasets/mostafaabla/garbage-classification
El primer problema que me he encontrao esq las imagenes estan a color y cada una tiene un tamaño diferente y bastante grandes. Las he puesto en blanco y negro y dejandolas en 50x50 pixeles (muchas al comprimirlas tanta no se ve un carajo) y luego las he metio en un dataframe donde cada columna es un pixel(50x50=2500+1 columna para la clase y las 15000 filas ).
Despues de probar varios modelos y ajustar lo que mejores resultados daban no consigo que pase del 52% de precision.
Nota: habia 2 categorias que estaban desbalanceadas respecto a las demas, lo que he hecho ha sio reducir el numero de estas al mismo que el de las demas
#81 Con datasets 'grandes' y particularmente cuando son imagenes es mejor que uses un generador que se encargue de pillar las imagenes (la categoria la obtiene automaticamente de los nombres de las carpetas) y tu te olvidas. El generador te puede redimensionar las imagenes a algo mejor que 50x50 a medida que las vaya leyendo del directorio y usará mucha menos ram.
También según el generador podrás usar data augmentation, lo cual te ayudará a que tu modelo generalize mejor sobre los patrones de las imagenes en vez de aprenderse el dataset de memoria, además de crear nuevos data points para las categorias desbalanceadas. No creo que sea muy conveniente el borrar ninguna imagen con esta distribucion de categorias, pero podria estar equivocado
Hay cientos de cosas que puedes hacer para mejorar tus resultados pero ahi van 2 esenciales en mi opinion. 1) imagenes mas grandes, para lo cual necesitas el generador si no quieres quedarte sin ram y 2) data augmentation
#82 estoy usando sklearn y no tengo ni idea de como usar eso que pasas. Mis carpetas ya estaban ordenadas de esa forma y si uso esa funcion me tedecta el numero de imagens y las clases que hay pero luego npi de como se hace para hacer lo que siemrpe hago tipo:
X,Y=tf.keras.preprocessing.image_dataset_from_directory(....)
modelo=RandomForestClassifier()
modelo.fit(X,Y)
Algo asi
#83 Ahhh, nada, entonces descarta lo que he dicho, no se si sklearn tiene algo parecido al image generator de tensorflow. Asumi que si estabas con imagenes usarias CNN y por tanto tensorflow o pytorch.
Primera cosa que me sale en google pero puedes intentar usar image augmentation con skimage: https://towardsdatascience.com/image-augmentation-with-skimage-python-7f53f1b0eeb5
Pero vamos que no esperes grandes resultados con imagenes si no usas deep learning y mas concretamente redes convolucionales, un 52% con 12-15 categorias no esta tan mal imo
#84 eso estuve leyendo investigando que pasaba. Que para clasificar imágenes mejor redes neuronales mejor que sklearn.
Pero como lo de clasificar los números se hace en sklearn pues alomejor tmb funcionaba esto.
A 62% es lo máximo que he llegado usando varios modelos y votando. Ahí se queda hasta que empiece con redes neuronales
#85 procesamiento de imágenes es con RRNN como te dicen.
El dataset de los numeros de kaggle, imagino que te refieres al MNIST, es muy simple y saldran ejemplos con ML pero aún así los mejores resultados serán con redes neuronales xD
Alguien sabe por qué haciendo un PCA en R y otra en Python los signos (negativo/positivo) salen opuestos? XD
Imagino que da un poco igual porque depende del "eje", pero me pasó hace tiempo y por si alguien lo sabe.
Mañana hay una competición de Schneider Electric, igual a algún estudiante le interesa. Creo que hay que apuntarse hoy.
Dudé si participar por curiosidad pero no lo voy a hacer porque estoy con poco tiempo y el premio principal no me interesa (hacer prácticas con ellos).