Kotlin para Machine Learning: possibilidades e limitações — parte 2
Na primeira parte, abordamos os conceitos básicos do uso de Kotlin em Data Science. Hoje, na parte 2, vamos nos aprofundar nos aspectos práticos: bibliotecas, trabalho com redes neurais e erros típicos. Este material será útil tanto para quem está aprendendo Kotlin para iniciantes, quanto para desenvolvedores experientes que desejam expandir os horizontes da programação na JVM.
Principais bibliotecas Kotlin para Machine Learning
O ecossistema Kotlin está em constante evolução. Aqui estão três ferramentas principais que vale a pena dominar no aprendizado de ML com Kotlin:
1. KotlinDL (Deep Learning)
Biblioteca da JetBrains para criação de redes neurais. Ela é totalmente escrita em Kotlin e não requer mudança para 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 criado. Pronto para treinamento!")}2. Smile (Statistical Machine Intelligence & Learning Engine)
Biblioteca versátil para ML clássico: regressão, clusterização, SVM. Ideal para programação em Kotlin sem abstração excessiva.
import smile.classification.RandomForestimport smile.data.*
fun trainRandomForest(data: DataFrame) { val forest = RandomForest.fit(data, "target") println("Precisão: ${forest.accuracy()}")}3. Krangl (Data Wrangling)
Biblioteca para trabalhar com dados tabulares, análoga ao pandas. Ela torna o Kotlin para iniciantes mais acessível em tarefas de pré-processamento.
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()}Limitações do Kotlin em ML: o que você precisa saber
Apesar do progresso, o Kotlin para Machine Learning tem algumas limitações importantes a serem consideradas no aprendizado e em projetos reais:
- Comunidade menor — encontrar soluções prontas é mais difícil do que para Python.
- Suporte limitado a GPU — KotlinDL usa TensorFlow Java, que é mais lento que os bindings nativos do Python.
- Falta de soluções maduras para NLP — bibliotecas como Hugging Face ainda não foram portadas.
- Dificuldade com visualização — não há análogos do matplotlib com a mesma flexibilidade.
Exemplo prático: previsão de preços de imóveis
Vamos combinar o conhecimento adquirido. Escreveremos um pipeline completo em Kotlin usando Smile e Krangl. Este é um ótimo exemplo de programação para um problema real.
import krangl.*import smile.regression.LinearRegression
fun main() { // 1. Carregamento dos dados val rawData = DataFrame.fromCSV("housing.csv") // 2. Pré-processamento val cleanData = rawData.dropNA() .filter { it["medv"] gt 5 } .mutate("rooms_sq") { it["rooms"] map { it.toDouble() * it.toDouble() } } // 3. Preparação da matriz de features val features = cleanData.select("rooms", "age", "rooms_sq").toMatrix() val target = cleanData["medv"].toDoubleArray() // 4. Treinamento val model = LinearRegression.fit(features, target) // 5. Avaliação val predictions = model.predict(features) val mse = target.zip(predictions) { a, b -> (a - b) * (a - b) }.average() println("MSE: $mse")}