Kotlin para aprendizaje automático: posibilidades y limitaciones — parte 2
En la primera parte analizamos los conceptos básicos del uso de Kotlin en Data Science. Hoy, en la parte 2, profundizaremos en aspectos prácticos: revisaremos bibliotecas, trabajo con redes neuronales y errores típicos. Este material será útil tanto para quienes estudian Kotlin para principiantes como para desarrolladores experimentados que deseen ampliar los horizontes de la programación en JVM.
Bibliotecas clave de Kotlin para aprendizaje automático
El ecosistema de Kotlin se desarrolla activamente. Aquí hay tres herramientas principales que vale la pena dominar en el marco del aprendizaje de ML en Kotlin:
1. KotlinDL (Deep Learning)
Biblioteca de JetBrains para crear redes neuronales. Está completamente escrita en Kotlin y no requiere cambiar a Python.
import org.jetbrains.kotlinx.dl.api.core.Sequentialimport org.jetbrains.kotlinx.dl.api.core.layer.*import org.jetbrains.kotlinx.dl.dataset.*
fun main() { val model = Sequential.of( Dense(128, activation = "relu"), Dropout(0.2f), Dense(10, activation = "softmax") ) model.compile(loss = "categorical_crossentropy", optimizer = "adam") println("Modelo creado. ¡Listo para entrenar!")}2. Smile (Statistical Machine Intelligence & Learning Engine)
Biblioteca universal para ML clásico: regresión, agrupamiento, SVM. Ideal para programación en Kotlin sin abstracción innecesaria.
import smile.classification.RandomForestimport smile.data.*
fun trainRandomForest(data: DataFrame) { val forest = RandomForest.fit(data, "target") println("Precisión: ${forest.accuracy()}")}3. Krangl (Data Wrangling)
Biblioteca para trabajar con datos tabulares, análoga a pandas. Hace que Kotlin para principiantes sea más accesible en tareas de preprocesamiento.
import krangl.*
fun cleanData() { val df = DataFrame.fromCSV("data.csv") df.filter { it["age"] gt 18 } .groupBy("city") .summarize("avg_salary") { it["salary"].mean() } .print()}Limitaciones de Kotlin en ML: lo que hay que saber
A pesar del progreso, Kotlin para aprendizaje automático tiene varias limitaciones que es importante considerar en el aprendizaje y en proyectos reales:
- Comunidad más pequeña — encontrar soluciones listas es más difícil que para Python.
- Soporte limitado de GPU — KotlinDL usa TensorFlow Java, que es más lento que los bindings nativos de Python.
- Falta de soluciones maduras para NLP — bibliotecas como Hugging Face aún no han sido portadas.
- Dificultad con la visualización — no hay análogos de matplotlib con la misma flexibilidad.
Ejemplo práctico: predicción de precios de vivienda
Unamos los conocimientos adquiridos. Escribamos un pipeline completo en Kotlin usando Smile y Krangl. Este es un excelente ejemplo de programación para un problema real.
import krangl.*import smile.regression.LinearRegression
fun main() { // 1. Carga de datos val rawData = DataFrame.fromCSV("housing.csv") // 2. Preprocesamiento val cleanData = rawData.dropNA() .filter { it["medv"] gt 5 } .mutate("rooms_sq") { it["rooms"] map { it.toDouble() * it.toDouble() } } // 3. Preparación de la matriz de características val features = cleanData.select("rooms", "age", "rooms_sq").toMatrix() val target = cleanData["medv"].toDoubleArray() // 4. Entrenamiento val model = LinearRegression.fit(features, target) // 5. Evaluación val predictions = model.predict(features) val mse = target.zip(predictions) { a, b -> (a - b) * (a - b) }.average() println("MSE: $mse")}