Вы находитесь на странице: 1из 40

Вам стоит

использовать
Scala для ML!
Юрий Артамонов
Haulmont
Наш план
1. Что за язык
2. Где тут код писать
3. Какие есть библиотеки

И где то там про Machine


Learning ещё будет

2
Не этот мужик
3
Язык программирования

акроним от Scalable Language

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 нечитаемый
код

Это не наш случай!


15
Машинное
обучение
обширный подраздел искусственного интеллекта, изучающий методы
построения алгоритмов, способных обучаться

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