Learning Machine Learning
febrero 17, 2013
Llevo un tiempo intentando meterme en el mundo de Machine Learning, el año pasado hice un máster en el que se tocaba el tema de soslayo y me quede bastante intrigado sobre que algoritmos habría detrás. Así que una vez acabado el máster me puse a leer sobre el tema. Lo primero que hice fue comprarme un libro http://www.manning.com/pharrington/ pensando, iluso de mi, que sería capaz de tener una visión bastante consistente del tema, como lo había hecho con otros temas (no pondré ninguno para no herir sensibilidades, pero puedes coger 4 al azar de http://pragprog.com/).
Lo cierto es que no es un campo que puedas aprender leyendo un libro, tengo comprados varios sobre machine learning, no sabría decir lo que tardo en leer un libro de estos porque creo que no he acabado ninguno. Me suele pasar que empiezo a leer un libro, los primeros capítulos siempre son de cosas más o menos básicas a modo de resumen sobre lo que es machine learning, después empiezan los contenidos de verdad y en estos es donde me “pierdo”, no en el sentido literal de no saber donde estoy sino que las ganas de profundizar en ese tema me llevan a un montón de artículos, a otros libros, a hacer pruebas (flopezluis.github.com/MachineLearning o https://github.com/flopezluis/MachineLearning) y al final me encuentro que estoy leyendo el mismo tema en 4 libros diferentes y que llevo 4 meses con ello. No sé si es que los libros técnicos que leía hasta hace bien poco eran muy sencillos o si estos son demasiado complejos. Tener tantos libros empezados me genera mal rollo, como si necesitará leerlos ya todos, como si tuviera prisa por leemos xD .
Después de 6 meses empapándome sobre Machine Learning todavía tengo la sensación de que no sé prácticamente nada
. Pero bueno algunas conclusiones si que puedo sacar después de este tiempo.
- No es un tema que puedas dominar rápidamente (o al menos yo), es una carrera de fondo.
- Se constante.
- Necesitas matemáticas y estadístcia, pero no te dejes acojonar por lo que se ve en las reviews de muchos libros, no son tan tan complejas. El problema está en que la mayoría de libros dan por hecho que deberías saberlas.
- Machine Learning es muy muy muy grande, céntrate en un tema primero, a ser posible simple, por ejemplo kNN y luego pasa el siguiente más simple.
- Si lo necesitas aplicar algún algoritmo para un caso concreto no necesitas profundizar en casi nada, hay un montón de software que te permite hacer todo sin pensar mucho en que estás haciendo. Hay libros que tocan bastante métodos de una forma muy general que te pueden ayudar, por ejemplo Machine Learning in action.
Por si alguien tiene curiosidad estos son los libros que tengo sobre el tema:
- Machine Learning in Action http://www.manning.com/pharrington/
- Learning from Data http://www.amazon.com/Learning-From-Data-Yaser-Abu-Mostafa/dp/1600490069
- Machine Learning http://www.amazon.com/Machine-Learning-Tom-M-Mitchell/dp/0070428077/ref=sr_1_1?s=books&ie=UTF8&qid=1361100724&sr=1-1&keywords=Machine+Learning
- Data mining http://www.amazon.com/Data-Mining-Concepts-Methods-Algorithms/dp/0470890452
- Introduction to the Math of Neural Networks http://www.heatonresearch.com/book/introduction-neural-network-math.html
- Statistics in plain English http://www.amazon.com/Statistics-Plain-English-Third-Timothy/dp/041587291X/ref=sr_1_1?s=books&ie=UTF8&qid=1361100845&sr=1-1&keywords=statistics+in+plain+english
Hay alguno más que he usado a modo de consulta alguna vez, pero no los “tengo”.
BTW: No es que lleve 6 meses a piñón con esto, el trabajo me absorbe el 99% de mi tiempo libre, así que hay semanas enteras que no puedo ni leer una página. Que veo que se desanima la gente
Poner BigCouch en marcha en amazon
enero 18, 2013
Como he tenido bastantes problemas en poner en marcha BigCouch en funcionamiento dentro de amazon, pongo aquí los pasos que seguido para que le pueda servir a otro:
Abre los siguientes puertos en tus instancias:
-
4369
-
5984
-
5986
- Abre un rango de puertos para que los nodos (erlang) puedan comunicarse entre ellos, por ejemplo: 10000-11000
Instala bigCouch (http://bigcouch.cloudant.com/use). En ubuntu:
- echo “deb http://packages.cloudant.com/ubuntu `lsb_release -cs` main” | sudo tee /etc/apt/sources.list.d/cloudant.list
- sudo apt-get update
- sudo apt-get install bigcouch
Configura cada nodo (http://bigcouch.cloudant.com/use):
- En /opt/bigcouch/etc/vm.args:
- Añade el nombre del nodo (ojo porque aquí está uno de los problemas). Tienes que añadir el internal hostname.
-name bigcouch@i000.us-west-2.compute.internal - Establece la cookie, tiene que ser la misma en todos los nodos:
-setcookie xxxxxxxxxxxxxxxxxx - Establece el rango de puertos que pueda usar erlang:
-kernel inet_dist_listen_min 10000
-kernel inet_dist_listen_max 11000
- Añade el nombre del nodo (ojo porque aquí está uno de los problemas). Tienes que añadir el internal hostname.
- En /opt/bigcouch/etc/default.ini:
- Busca [httpd] y cambia bid_address para que pueda ser accesible desde fuera:
port = 5986
bind_address = 0.0.0.0
- Busca [httpd] y cambia bid_address para que pueda ser accesible desde fuera:
- Para y arranca de nuevo bigcouch:
- sudo sv stop bigcouch
- sudo sv start bigcouch
Estos pasos los haces en todos tus nodos y ahora ya puedes añadir nodos:
-
curl -X PUT http://000.us-west-2.compute.amazonaws.com:5986/nodes/bigcouch@001.us-west-2.compute.internal -d {}
Para comprobar que realmente se han añadido bien:
-
curl http://000.us-west-2.compute.amazonaws.com:5984/_membership
Aquí deberías ver cada nodo que añadas dentro de all_nodes.
Si quieres borrar un nodo, recuerda que cada nodo está dentro de una base de datos, así que lo borras como un documento normal:
curl -X DELETE http://000.us-west-2.compute.amazonaws.com:5986/nodes/bigcouch@ 001.us-west-2.compute.internal/?rev=revision
Compromiso
diciembre 24, 2012
La marcha de un amigo de una empresa en la que trabajé con él, me ha hecho pensar en los motivos por los que he salido de las empresas en las que he trabajado.
Creo que en casi todas el motivo ha sido el mismo, la falta de compromiso por mi parte, o mejor dicho la perdida del mismo, así como dejar de creer en el proyecto.
Echando la vista atrás, veo los mismos errores en casi todas las empresas. No saben gestionar/aprovechar el compromiso del equipo. Tener personas comprometidas es, en mi opinión, una de las piezas más importantes en una empresa de producto, sobre todo si está empezando. Es curioso como he visto una y otra vez el mismo error, muchos acaban confundiendo compromiso con exigencia y empiezan a tomar como una obligación lo que hasta entonces eran gestos voluntarios o de compromiso. He visto casos bastante sangrantes, como “pedir” a una persona que trabajará el día del bautizo de su hijo. Suele empezar con pequeños detalles, llamadas a las 22:00, reuniones en días festivos, en vacaciones, etc.. y en esos casos ocurre un cambio muy interesante, lo que en principio era compromiso se convierte en hastío y se pierde completamente la ilusión y la fe en el proyecto, hasta el punto que al menos en mi caso es irrecuperable.
Creo que el problema está en que a menudo se pierde la medida y el significado del compromiso. Seamos sinceros los unos con los otros, por mucho que te guste un proyecto, nadie puede estar igual de comprometido que el que se lleva la mejor parte, por qué existe el equity? porque se intenta mantener a la gente comprometida en base a expectativas futuras, pero se debe mantener un equilibrio, agradecer y fomentar el que la gente esté comprometida, pero no abusar del compromiso.
Querer es empezar
agosto 21, 2012
Suelo ser muy pesado con esta frase, solo hay una pequeña diferencia con la frase “Querer es poder” pero tiene un trasfondo muy diferente. Querer es el primer paso para poder hacer algo, pero solo es eso un comienzo, después viene el esfuerzo, la dedicación, la constancia, etc, pero en otras ocasiones hay otros condicionantes determinantes sobre los que tenemos poco control, por poner un ejemplo tonto, por mucho que todo el mundo se esfuerce, no todos serán astronautas. Uno de estos factores es lo que me ha inspirado a escribir este post. El lugar donde nacemos y las oportunidades que éste nos da, es por desgracia, a menudo, el factor más determinante. Éste es tristemente el caso de Samia Yusuf Omar http://www.elmundo.es/elmundodeporte/2012/08/20/masdeporte/1345448676.html.
Quien me conoce bien, sabe que no suelo quejarme mucho de la vida, intento aprovechar todas las oportunidades y tomarme todos los problemas con cierta relatividad, la mayoría de problemas “del primer mundo” da hasta vergüenza comentarlos cuando vemos la realidad del mundo.
Deducciones de mi timeline
junio 7, 2012
Pequeña recopilación de algunas de las conclusiones a las que puedes llegar leyendo mi timeline en twitter.
- Nadie vota al PP, al parecer les votan desde Portugal.
- Si tienes Linkedin eres un loser. (De esta misma semana).
- Si te gusta el fútbol parece ser que eres menos listo.
- La F1 es guay y la tv es una mierda, no da casi métricas.
- Hay tantos gurús/ heroes developers en javascript en España como en el resto del mundo.
- No importa que estés desarrollando un software que ayuda contra el cáncer, lo importante es que uses github.
- Hay dos clases de programadores los que presumen y los que hacen. Los primeros dicen que los segundos no existen porque no están twitter.
- Para ser cool cada semana hay que decir algo del estilo: “Me he dado de baja de X red social”, “X es una mierda”
- Nunca es suficiente culto musicalmente, siempre hay otra persona que dice que es lo más molón
- Si dices Agile, molas.
- Si dices TDD, molas mucho más.
- Agile es un término nuevo, esto ocurre cada año.
- Si no programas en JS ahora mismo ya mejor que te dediques a la ebanistería by @Ethervoid
Seguirá creciendo….
No estoy seguro de lo que creo que es seguro
abril 3, 2012
Prácticamente desde que tengo recuerdos, los tengo con el asma presente (la tengo desde los 6 meses), casi igual que con los perros. De pequeño la enfermedad me daba bastante guerra debido a la alergia que tenía a polen, polvo, animales… sí animales, no sé como se le ocurrió a mi padre comprar un perro, pero el caso es que asombrosamente mi alergia al perro mejoró mucho. Durante toda mi vida he vivido con la sensación de no llegar a llenar los pulmones, con un catarro casi constante y algún que

otro síntoma. Todos siempre los había achacado al asma y como algo crónico, pues lo tomaba y lo tomo con normalidad, de hecho no creo que mucha gente que me conoce sepa que tengo asma. Hace unos meses me mude a New York y el perro se quedo en nuestra casa con mi novia, durante mi estancia en New York no he tenido prácticamente nada de Asma, no le había dado importancia porque últimamente me encuentro bastante bien, pero lo cierto es que al volver a casa, me he dado cuenta de que han vuelto algunos de los síntomas sin motivo aparente. Ojo que los síntomas son muy muy muy leves y no pasan de molestia eh
Por lo que he relacionado tener el perro con mis síntomas constantes, quizá no es que yo fuese así, sino que estaba así por un hecho concreto, tener perro.
La cuestión más allá de mi perro es que esto me hace plantearme, si nuestras creencias (en cualquier entorno, no precisamente el religioso), las cosas que damos por sentadas, por conocimiento valido, no son más que una asunción de lo que es. Y me planteo cuantas cosas cambiarían en nuestro día a día, si nos planteásemos si lo que es, puede ser de otra manera.
Menuda rallada xDDDDDDDD
Funcionalidades las justas y necesarias.
octubre 18, 2011
Estoy seguro de que todos a estas alturas conocéis la roomba, ese robot que nos limpia la casa mientras estamos trabajando o en el sofá.
Es un robot que ha tendió un éxito espectacular de ventas y del que ya han empezado a salir bastantes productos simulares de la competencia.
Cuando ves su éxito de ventas, tiendes a pensar que la clave está en que el producto es muy bueno y das por sentado bastantes cosas, por ejemplo: ¿cómo pensáis que es su algoritmo de limpieza?
- Limpia una habitación pasando por todos los puntos, sin repetir prácticamente ninguno y cuando acaba se va a su base.
- Limpia de forma aleatoria haciendo círculos, repitiendo puntos sin límite y que pase por un punto concreto es una cuestión de tiempo más que algo calculado.
Yo también pensé en la primera opción, para mi la más eficiente, pero no, su algoritmo es el segundo. Éste confía en estar tanto tiempo en ejecución como para que acabe pasando para todos los puntos, así que al final que limpie una habitación entera es una cuestión de tiempo. ¿Qué hubierais hecho vosotros si hubiese estado en vuestra mano?
Este es un claro ejemplo de funcionalidad que se podría hacer y que muchos querrían hacer a cualquier precio para tener el mejor producto posible pero que no es estrictamente necesaria, como demuestra el éxito de la roomba.
Además si analizas con más detalle esta funcionalidad verás que probablemente una de las claves del éxito del producto esté precisamente aquí. Si hubieran hecho un algoritmo más eficiente que conozca los puntos por donde ha pasado para no repetirlos, probablemente necesitaría mejor hardware para almacenar las posiciones por las que ha pasado, para hacer un plano de la habitación y conocer su posición en él o cualquier otra técnica. Todas ellas a buen seguro hubieran incrementado el precio y probablemente las ventas no habrían sido las mismas, máxime teniendo en cuenta que era un producto pionero.
Moraleja diferencia lo posible, de lo probable y necesario.
