Pipeline

Машинное обучение с PySpark

Andrew Collier

Data Scientist, Fathom Data

Утечка данных?

Метод fit()

Только для обучающих данных.

Метод transform()

Для тестовых и обучающих данных.

Машинное обучение с PySpark

Модель с утечкой данных

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

Машинное обучение с PySpark

Модель без утечки данных

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

Машинное обучение с PySpark

Pipeline

Pipeline состоит из последовательности операций.

Pipeline с несколькими этапами

Можно применять каждую операцию отдельно... или сразу применить весь pipeline!

Машинное обучение с PySpark

Модель Cars: шаги

indexer = StringIndexer(inputCol='type', outputCol='type_idx')

onehot = OneHotEncoder(inputCols=['type_idx'], outputCols=['type_dummy'])
assemble = VectorAssembler( inputCols=['mass', 'cyl', 'type_dummy'], outputCol='features' )
regression = LinearRegression(labelCol='consumption')
Машинное обучение с PySpark

Модель Cars: применение шагов

Обучающие данные

indexer = indexer.fit(cars_train)
cars_train = indexer.transform(cars_train)
onehot = onehot.fit(cars_train)
cars_train = onehot.transform(cars_train)
cars_train = assemble.transform(cars_train)
# Fit model to training data
regression = regression.fit(cars_train)

Тестовые данные

cars_test  = indexer.transform(cars_test)
cars_test  = onehot.transform(cars_test)
cars_test  = assemble.transform(cars_test)
# Make predictions on testing data
predictions = regression.transform(cars_test)
Машинное обучение с PySpark

Модель Cars: pipeline

Объединим шаги в pipeline.

from pyspark.ml import Pipeline

pipeline = Pipeline(stages=[indexer, onehot, assemble, regression])

Обучающие данные

pipeline = pipeline.fit(cars_train)

Тестовые данные

predictions = pipeline.transform(cars_test)
Машинное обучение с PySpark

Модель Cars: этапы

Доступ к отдельным этапам — через атрибут .stages.

# The LinearRegression object (fourth stage -> index 3)
pipeline.stages[3]

print(pipeline.stages[3].intercept)
4.19433571782916
print(pipeline.stages[3].coefficients)
DenseVector([0.0028, 0.2705, -1.1813, -1.3696, -1.1751, -1.1553, -1.8894])
Машинное обучение с PySpark

Pipeline упрощает рабочий процесс!

Машинное обучение с PySpark

Preparing Video For Download...