Машинное обучение на Kotlin: от математики до глубоких нейросетей
Kotlin — современный, лаконичный и безопасный язык, который всё активнее используется не только для Android-разработки, но и для серверных проектов, анализа данных и машинного обучения. Благодаря полной совместимости с Java и собственной экосистеме библиотек, Kotlin позволяет писать чистый и выразительный код для ML-задач. В этой статье мы рассмотрим ключевые библиотеки для машинного обучения на Kotlin: от низкоуровневых математических операций до готовых нейросетевых фреймворков.
1. KMath — математическая основа для ML
KMath (Kotlin Mathematics) — это библиотека для научных вычислений, созданная JetBrains. Она предоставляет мощные инструменты для линейной алгебры, оптимизации, статистики и работы с тензорами. KMath идеально подходит для реализации собственных алгоритмов машинного обучения без привязки к Java.
Основные возможности KMath:
- Работа с векторами, матрицами и многомерными массивами (тензорами);
- Линейная алгебра (LU-разложение, SVD, собственные значения);
- Статистические распределения и тесты;
- Автоматическое дифференцирование (для градиентного спуска);
- Интеграция с NumPy через экспорт в ndarray.
// Пример: линейная регрессия с использованием KMath
import space.kscience.kmath.operations.*
import space.kscience.kmath.structures.*
import space.kscience.kmath.linear.*
fun main() {
// Данные: x = [1, 2, 3], y = [2, 4, 6] (целевая функция y = 2x)
val x = Matrix.real(3, 2) { i, j -> if (j == 0) 1.0 else (i + 1).toDouble() }
val y = Matrix.real(3, 1) { i, _ -> (2 * (i + 1)).toDouble() }
// Решение нормального уравнения: w = (X^T * X)^(-1) * X^T * y
val xt = x.transpose()
val xtx = xt dot x
val invXtx = xtx.inverse() // LU-разложение
val w = invXtx dot (xt dot y)
println("Коэффициенты: intercept = ${w[0, 0]}, slope = ${w[1, 0]}")
}
KMath — это выбор для тех, кто хочет контролировать каждый шаг вычислений и не зависеть от Java-библиотек.
2. Smile — классические алгоритмы ML на Kotlin
Smile (Statistical Machine Intelligence & Learning Engine) — одна из самых полных библиотек машинного обучения на JVM, написанная на Java, но с отличной поддержкой Kotlin. Она включает десятки алгоритмов: от линейной регрессии и SVM до случайного леса и нейронных сетей.
Ключевые особенности Smile:
- Кластеризация (K-Means, DBSCAN, GMM);
- Классификация (SVM, Decision Trees, Random Forest, Naive Bayes);
- Регрессия (линейная, гребневая, LASSO);
- Снижение размерности (PCA, t-SNE, UMAP);
- Визуализация (встроенные графики для Swing).
// Пример: классификация с Random Forest в Smile
import smile.classification.RandomForest
import smile.data.DataFrame
import smile.data.`type`.DataTypes
import smile.io.Read
fun main() {
// Загрузка данных (пример с iris dataset)
val iris = Read.arff("data/iris.arff")
// Разделение на признаки и целевую переменную
val x = iris.select("sepal_length", "sepal_width", "petal_length", "petal_width").toArray()
val y = iris.stringVector("class").toArray()
// Обучение Random Forest (100 деревьев)
val model = RandomForest.fit(x, y)
// Предсказание
val testSample = doubleArrayOf(5.1, 3.5, 1.4, 0.2)
val prediction = model.predict(testSample)
println("Предсказанный класс: $prediction")
}
Smile отлично подходит для быстрого прототипирования и production-задач, где нужны проверенные временем алгоритмы.
3. KotlinDL — глубокое обучение от JetBrains
KotlinDL — это библиотека глубокого обучения, созданная JetBrains специально для Kotlin. Она предоставляет высокоуровневый API для построения, обучения и развертывания нейронных сетей. В основе лежит движок TensorFlow Java, но код остаётся идиоматичным для Kotlin.
Возможности KotlinDL:
- Слои: Dense, Conv2D, Max