¿Qué es Scikit-learn?
Scikit-learn [1] es una biblioteca para aprendizaje automático de software libre para el lenguaje de programación Python. Incluye varios algoritmos de clasificación, regresión y análisis de grupos entre los cuales están SVM [2], Random Forest [3], Gradient boosting [4], K-means [5] y DBSCAN [6]. Está diseñada para interoperar con las bibliotecas numéricas y científicas NumPy [7] y SciPy [8].
¿Por qué contribuir a un proyecto open source, i.e., scikit-learn?
Pero, ¿cuál es la razón para contribuir?. Contribuir a un proyecto de código abierto, scikit-learn, ayuda a mejorarlo basándose en la experiencia del mundo real y en soluciones de trabajo probadas. En ai-consulting, tenemos amplia experiencia en soluciones de Machine Learning, y es importante retornar este expertise a la comunidad. A continuación enumeramos tres principales razones para contribuir
- La primera, contribuir a un proyecto de código abierto ayuda a obtener un conocimiento mucho más profundo sobre el software, scikit-learn en este caso particular. Actualmente, la mayoría, si no todos, los desarrollos de Machine Learning aplicados a negocio utilizan, de una manera u otra, scikit-learn; por consiguiente, entrar en las tripas de esta librería nos sirve para ayudar a introducir nuevas necesidades de negocio, y, al mismo tiempo, estar al tanto de potenciales nuevos desarrollos.
- Por otro lado, contribuir a scikit-learn, una librería que ai-consulting utiliza en nuestros proyectos, nos permite afrontar mejor los riesgos potenciales y planificar el futuro; consolidando así las soluciones desarrolladas y por desarrollar con nuestros clientes.
¿Cómo contribuir a scikit-learn?
Existen varias maneras de contribuir a scikit-learn. Listamos a continuación algunas de ellas:
- Enviar un bug report o solicitar un nueva funcionalidad [9]
- Contribuyendo con código [10]
- Ayudando con la documentación [11]
- Probar y mejorar la cobertura de tests [12]
En este post daremos unas pinceladas del segundo punto.
Contribuyendo con código
El código fuente de scikit-learn está disponible en GitHub [13]. La comunidad recomienda, para no duplicar trabajos, que busquemos en el issue tracker [14] y la lista de Pull Requests [15].
En el issue tracker podemos ver la lista de issues abiertos que requieren intervención por parte de los desarrolladores. Mientras que en la lista de Pull Requests, vemos todas las contribuciones, de los desarrolladores, pendientes de validar e integrar en la rama principal de scikit-learn.
Manos a la obra
A continuación enumeramos los pasos necesarios para comenzar a contribuir
- Configurar tu entorno de desarrollo, anaconda, python, git, etc., con sus correspondientes versiones
- Crear una cuenta de GitHub, si es que no la tienes creada anteriormente.
- Realizar un fork del repositorio de proyecto [13], este proceso puede tomar unos minutos.
- Clonar el repositorio que acabas de «forkear»
- git clone git@github.com:YourUserName/scikit-learn.git
- cd scikit-learn
- Instalar las dependencias de desarrollo
- pip install cython pytest pytest-cov flake8 mypy
- Install scikit-learn in editable mode
- pip install -e .
- Revisar que la versión instalada tiene la versión terminada en .dev0
- python -c «import sklearn; sklearn.show_versions()»
- Instalar la librería pre-commit para ejecutar los checks del estilo de código antes de cada commit
- pip install pre-commit
- pre-commit install
- Revisar los remotes
- git remote -v
- Añadir mi upstream
- git remote add upstream https://github.com/scikit-learn/scikit-learn.git
- git pull upstream master
- Visitar el issue tracker, seleccionar un issue. Es recomendable escoger los issues con la etiqueta «good first issue».
- Una vez seleccionado el issue con el cual se va a trabajar. Escribir un mensaje indicando que vas a trabajar sobre él. Se suele utilizar el texto «Can I take this». De esta manera, el boot asignará el issue a nuestra cuenta.
- Una vez seleccionado el código, tenemos que crear un branch en el cual vamos a desarrollar, es recomendable nombrar el branch con una buena descripción, e.g.,
- git checkout -b sklearn_gp_ytrainstd_0_18318
- Desarrollar los cambios necesarios en el branch que se acaba de crear
- Una vez terminado, ejecutar los tests asociados al módulo / parte del código que acabamos de modificar, e.g.,
- pytest sklearn/_config.py
- Una vez que se ha verificado que hemos pasado los tests, tenemos que añadir el código, i.e., los ficheros asociados a nuestra contribución, a la rama en la que trabajamos
- git add modified_files
- git commit -m «Mensaje en inglés muy bien autocontenido con la descripción de los cambios»
- Realizar un push de los cambios
- git push -u origin sklearn_gp_ytrainstd_0_18318
- Como resultado de la anterior acción, aparecerá una url donde tenemos que acceder para realizar el pull request.
- Para la realización del pull request es necesario revisar el pull request checklist [16]
- Una vez realizado el pull request se debe quedar a la espera de que lo revisen y nos notifiquen.
Como referencia esclarecedora, se puede encontrar aquí [17][18], dos ejemplos de pull request realizados por un lead data scientist de nuestro equipo.
Esperamos que este post os haya servido de guía inicial, y estamos disponibles para ayudaros en lo que sea necesario.
Referencias
[1] https://scikit-learn.org/
[2] https://es.wikipedia.org/wiki/M%C3%A1quinas_de_vectores_de_soporte
[3] https://es.wikipedia.org/wiki/Random_forest
[4] https://es.wikipedia.org/wiki/Gradient_boosting
[5] https://es.wikipedia.org/wiki/K-medias
[6] https://es.wikipedia.org/wiki/DBSCAN
[7] https://numpy.org/
[8] https://www.scipy.org/
[9] https://scikit-learn.org/stable/developers/contributing.html#submitting-a-bug-report-or-a-feature-request
[10] https://scikit-learn.org/stable/developers/contributing.html#contributing-code
[11] https://scikit-learn.org/stable/developers/contributing.html#documentation
[12] https://scikit-learn.org/stable/developers/contributing.html#testing-and-improving-test-coverage
[13] https://github.com/scikit-learn/scikit-learn
[14] https://github.com/scikit-learn/scikit-learn/issues
[15] https://github.com/scikit-learn/scikit-learn/pulls
[16] https://scikit-learn.org/stable/developers/contributing.html#pull-request-checklist
[17] https://github.com/scikit-learn/scikit-learn/pull/18315
[18] https://github.com/scikit-learn/scikit-learn/pull/18388