использовать
Scala для ML!
Юрий Артамонов
Haulmont
Наш план
1. Что за язык
2. Где тут код писать
3. Какие есть библиотеки
2
Не этот мужик
3
Язык программирования
4
История развития
● Дизайн языка разработан в 2001 (EPFL)
● Автор - Martin Odersky
● 2006 - Scala 2.0
● 2011 - Typesafe Inc.
(сейчас Lightbend Inc.)
5
Кто пользуется этим всем
6
Лучше всего подходит для
● Big Data
● Data Science
● Web Applications
● Distributed Systems
● Concurrency and Parallelism
● Scientific Computations: NLP, Numerical
Computing, Data Visualization
7
Сильная статическая типизация
Динамическая
Слабая Сильная
Статическая
8
Multiplatform
● JVM
● JavaScript - Scala.js
● Native - Scala Native
(LLVM based)
9
Functional + Object Oriented
1. Высокоуровневый язык сочетающий OOP и FP
2. Краткий синтаксис без мусора
3. Статическая типизация и вывод типов
10
Type Inference
● Компилятор выводит
тип переменных
● Тип фиксируется
первым
присваиванием
● IDE это всё понимает!
11
Разные штуки
● Case Classes
● Type Aliases
● Implicit Conversions
● Extension Methods
12
Pattern Matching
● Сравнение по
образцу - switch на
стероидах
● Поддерживает
деконструкцию
● Полезно вместе с
case classes
13
Concurrency & Asynchronous
● Future & Promise
● Async / Await
● Akka !
● java.util.concurrent
14
Scalaz / Tagless Final / ZIO / etc
● Scalaz - для пуристов Читать
● Неразмеченные нечитаемый
код
Конечные
Интепретаторы
● ZIO - хитрый и
Писать
асинхронный IO нечитаемый
код
16
Задачи
● классификация
● кластеризация
● регрессия
● восстановление
плотности
распределения
● ...
17
18
Инструменты
Ну не на листочке же матрицы умножать
19
Чернющий REPL
> sbt console
20
VS Code and Language Server
● Scala syntax
● sbt plugin
● autocompletion
Рефакторинг не
поддерживается :(
21
IntelliJ IDEA + Scala plugin
● sbt / Gradle /
Maven
● Syntax
highlighting
● Inspections
● Refactoring !
● Worksheets
22
IntelliJ IDEA Worksheets
● Интерактивный REPL
● Можно править код
● Интегрирован в IDE !
● Доступны все
библиотеки и код
проекта
23
Интерактивные консоли
● Apache Zeppelin
● Scala Notebook
● Spark Notebook
● Databricks
24
Библиотеки
Как нанести непоправимую пользу окружающим
25
Akka
● Actor model
● Concurrency
● Parallel computations
● Distributed systems
26
Breeze NLP
● Breeze - linear algebra,
numerical computing
and optimization
● Epic - structured text
processor
● Puck - GPU powered
parser
27
ND4J
● ND Arrays - multidimensional arrays
in memory with flat layout
● Off-heap and memory effective
● Native libraries interop
28
Apache Spark
● In-Memory
● Big Data Processing
● Distributed Computations
● DataFrames
● Spark SQL
29
Spark ML
Run ML pipelines on Spark
Check ML guides:
https://spark.apache.org/docs/1.2.2/ml-guide.html
30
Apache PredictionIO
● Machine Learning Server
● Batch Processing
● Real-time
● Predefined Models:
Clustering,
Recommenders,
Regression, NLP, ...
31
Deeplearning4j
● Neural networks - tons of nertworks
● Deep learning
● Image / Data processing
● Optimized performance (OpenBLAS)
● GPU supported
32
Smile
Statistical Machine Intelligence and Learning Engine
● Preprocessing
● Feature selection
● Supervised learning
● Unsupervised learning
● Reinforcement learning
33
Визуализация данных
● Breeze-viz
● Vegas
● Plotly
34
Vegas
35
Задачка #1
Классификация - Smile
Пример:
K-nearest neighbours
36
Задачка #2 - Cloud Load Balancing
Регрессия - Deeplearning4j
37
Scala vs Python
● Статическая типизация
vs динамическая
● Сложность vs простота
● Продакшен vs
прототипы
38
Scala 3 coming soon...
● Intersection & Union
types
● Enumerations
● Null safety
● Opaque types
ETA 2020
39
Вместо заключения
● https://www.scala-exercises.org/
● Functional Programming in Scala (Coursera)
● Big Data Analysis with Scala and Spark (Coursera)
● Programming Reactive Systems (Edx)
40