Kotlin pour l'apprentissage automatique : possibilités et limites — partie 2
Dans la première partie, nous avons abordé les concepts de base de l'utilisation de Kotlin en Data Science. Aujourd'hui, dans la partie 2, nous approfondissons les aspects pratiques : nous examinons les bibliothèques, le travail avec les réseaux de neurones et les erreurs typiques. Ce matériel sera utile aussi bien pour ceux qui étudient Kotlin pour débutants que pour les développeurs expérimentés souhaitant élargir leurs horizons de programmation sur JVM.
Bibliothèques clés de Kotlin pour l'apprentissage automatique
L'écosystème Kotlin se développe activement. Voici trois outils principaux à maîtriser dans le cadre de l'apprentissage du ML avec Kotlin :
1. KotlinDL (Deep Learning)
Bibliothèque de JetBrains pour créer des réseaux de neurones. Elle est entièrement écrite en Kotlin et ne nécessite pas de passer à 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("Modèle créé. Prêt pour l'apprentissage !")}2. Smile (Statistical Machine Intelligence & Learning Engine)
Bibliothèque polyvalente pour le ML classique : régression, clustering, SVM. Idéale pour la programmation en Kotlin sans abstraction excessive.
import smile.classification.RandomForestimport smile.data.*
fun trainRandomForest(data: DataFrame) { val forest = RandomForest.fit(data, "target") println("Précision : ${forest.accuracy()}")}3. Krangl (Data Wrangling)
Bibliothèque pour travailler avec des données tabulaires, analogue à pandas. Elle rend Kotlin pour débutants plus accessible dans les tâches de prétraitement.
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()}Limites de Kotlin en ML : ce qu'il faut savoir
Malgré les progrès, Kotlin pour l'apprentissage automatique présente plusieurs limites importantes à prendre en compte dans l'apprentissage et les projets réels :
- Communauté plus restreinte — trouver des solutions toutes faites est plus difficile qu'avec Python.
- Support GPU limité — KotlinDL utilise TensorFlow Java, ce qui est plus lent que les bindings Python natifs.
- Absence de solutions matures pour le NLP — les bibliothèques comme Hugging Face ne sont pas encore portées.
- Difficulté de visualisation — il n'existe pas d'équivalent de matplotlib avec la même flexibilité.
Exemple pratique : prédiction des prix de l'immobilier
Combinons les connaissances acquises. Écrivons un pipeline complet en Kotlin utilisant Smile et Krangl. C'est un excellent exemple de programmation pour un problème réel.
import krangl.*import smile.regression.LinearRegression
fun main() { // 1. Chargement des données val rawData = DataFrame.fromCSV("housing.csv") // 2. Prétraitement val cleanData = rawData.dropNA() .filter { it["medv"] gt 5 } .mutate("rooms_sq") { it["rooms"] map { it.toDouble() * it.toDouble() } } // 3. Préparation de la matrice de caractéristiques val features = cleanData.select("rooms", "age", "rooms_sq").toMatrix() val target = cleanData["medv"].toDoubleArray() // 4. Apprentissage val model = LinearRegression.fit(features, target) // 5. Évaluation val predictions = model.predict(features) val mse = target.zip(predictions) { a, b -> (a - b) * (a - b) }.average() println("MSE : $mse")}