Машинное обучение на Kotlin: современные библиотеки и инструменты
Kotlin — это статически типизированный язык программирования, который работает поверх JVM и полностью совместим с Java. Благодаря лаконичному синтаксису, null-безопасности и мощной экосистеме, Kotlin всё активнее используется в Data Science и машинном обучении. В этой статье мы рассмотрим ключевые библиотеки, которые позволяют решать задачи ML непосредственно на Kotlin, без перехода на Python.
1. KotlinDL — библиотека для глубокого обучения от JetBrains
KotlinDL — это официальная библиотека от создателей Kotlin (JetBrains), предназначенная для построения и обучения нейронных сетей. Она поддерживает как высокоуровневый API (Keras-like), так и низкоуровневые операции с тензорами.
Основные возможности:
- Построение моделей: Sequential, Functional API
- Слои: Dense, Conv2D, MaxPooling, Dropout, LSTM и др.
- Оптимизаторы: Adam, SGD, RMSprop
- Функции потерь: CrossEntropy, MSE, MAE
- Загрузка предобученных моделей (ONNX, TensorFlow SavedModel)
- Работа с изображениями, текстом и табличными данными
Пример: простая нейросеть для классификации
import org.jetbrains.kotlinx.dl.api.core.Sequential
import org.jetbrains.kotlinx.dl.api.core.layer.core.Dense
import org.jetbrains.kotlinx.dl.api.core.layer.reshaping.Flatten
import org.jetbrains.kotlinx.dl.api.core.optimizer.Adam
import org.jetbrains.kotlinx.dl.dataset.mnist
fun main() {
val model = Sequential.of(
Flatten(inputShape = longArrayOf(28, 28)),
Dense(128, activation = "relu"),
Dense(10, activation = "softmax")
)
model.use {
it.compile(optimizer = Adam(), loss = "categoricalCrossEntropy")
val (train, test) = mnist()
it.fit(train, epochs = 5, batchSize = 32)
val accuracy = it.evaluate(test)
println("Точность: $accuracy")
}
}
2. Smile — универсальная библиотека для статистики и ML
Smile (Statistical Machine Intelligence & Learning Engine) — это мощная Java/Kotlin библиотека, охватывающая практически все классические алгоритмы машинного обучения. Она включает реализацию более 200 алгоритмов.
Ключевые модули:
- Классификация: SVM, Random Forest, Decision Trees, Naive Bayes
- Регрессия: Linear, Ridge, LASSO, Gaussian Process
- Кластеризация: K-Means, DBSCAN, Hierarchical, GMM
- Снижение размерности: PCA, t-SNE, MDS
- Обработка естественного языка (NLP): токенизация, стемминг, N-граммы
- Визуализация: графики, scatter plots, heatmaps
Пример: линейная регрессия на Smile
import smile.regression.OLS
import smile.data.DataFrame
import smile.data.type.DataTypes
import smile.data.vector.DoubleVector
fun main() {
// Создаём DataFrame с данными
val x = doubleArrayOf(1.0, 2.0, 3.0, 4.0, 5.0)
val y = doubleArrayOf(2.1, 4.2, 6.0, 7.9, 10.1)
val df = DataFrame.of(DoubleVector.of("x", x), DoubleVector.of("y", y))
// Обучаем модель OLS (обычный метод наименьших квадратов)
val model = OLS.fit(df, "y", "x")
println("Коэффициенты: ${model.coefficients()}")
println("Предсказание для x=6: ${model.predict(doubleArrayOf(6.0))}")
}
3. Koma — матричные вычисления и научные расчёты
Koma — это библиотека для работы с многомерными массивами и матрицами, вдохновлённая NumPy из Python. Она идеально подходит для численных расчётов, статистики и предобработки данных перед ML.
Возможности:
- Создание матриц: zeros, ones, eye, rand
- Операции: сложение, умножение, транспонирование, обратная матрица
- Линейная алгебра: SVD, собственные значения, QR-разложение
- Статистика: среднее, дисперсия, корреляция
- Интеграция с KotlinDL и Smile
Пример: работа с матрицами в Koma
import koma.*