Kotlin для машинного обучения: возможности и ограничения — часть 2
В первой части мы разобрали базовые концепции использования Kotlin в Data Science. Сегодня, в части 2, мы углубимся в практические аспекты: рассмотрим библиотеки, работу с нейросетями и типичные ошибки. Этот материал будет полезен как для тех, кто изучает Kotlin для начинающих, так и для опытных разработчиков, желающих расширить горизонты программирования на JVM.
Ключевые библиотеки Kotlin для машинного обучения
Экосистема Kotlin активно развивается. Вот три главных инструмента, которые стоит освоить в рамках обучения ML на Kotlin:
1. KotlinDL (Deep Learning)
Библиотека от JetBrains для создания нейросетей. Она полностью написана на Kotlin и не требует переключения на 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("Модель создана. Готов к обучению!")}2. Smile (Statistical Machine Intelligence & Learning Engine)
Универсальная библиотека для классического ML: регрессия, кластеризация, SVM. Идеально подходит для программирования на Kotlin без излишней абстракции.
import smile.classification.RandomForestimport smile.data.*
fun trainRandomForest(data: DataFrame) { val forest = RandomForest.fit(data, "target") println("Точность: ${forest.accuracy()}")}3. Krangl (Data Wrangling)
Библиотека для работы с табличными данными, аналог pandas. Она делает Kotlin для начинающих более доступным в задачах предобработки.
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()}Ограничения Kotlin в ML: что нужно знать
Несмотря на прогресс, Kotlin для машинного обучения имеет ряд ограничений, которые важно учитывать в обучении и реальных проектах:
- Меньше сообщество — найти готовые решения сложнее, чем для Python.
- Ограниченная поддержка GPU — KotlinDL использует TensorFlow Java, что медленнее нативных Python-биндингов.
- Отсутствие mature-решений для NLP — библиотеки вроде Hugging Face пока не портированы.
- Сложность с визуализацией — нет аналогов matplotlib с такой же гибкостью.
Практический пример: предсказание цен на жилье
Давайте объединим полученные знания. Напишем полный пайплайн на Kotlin с использованием Smile и Krangl. Это отличный пример программирования для реальной задачи.
import krangl.*import smile.regression.LinearRegression
fun main() { // 1. Загрузка данных val rawData = DataFrame.fromCSV("housing.csv") // 2. Предобработка val cleanData = rawData.dropNA() .filter { it["medv"] gt 5 } .mutate("rooms_sq") { it["rooms"] map { it.toDouble() * it.toDouble() } } // 3. Подготовка матрицы признаков val features = cleanData.select("rooms", "age", "rooms_sq").toMatrix() val target = cleanData["medv"].toDoubleArray() // 4. Обучение val model = LinearRegression.fit(features, target) // 5. Оценка val predictions = model.predict(features) val mse = target.zip(predictions) { a, b -> (a - b) * (a - b) }.average() println("MSE: $mse")}