Пример использования sklearn интерфейса поверх конвейера bosk#

Scikit-learn — это стандартный инструмент, который использует каждый специалист по обработке данных, поэтому, вероятно, Вы бы хотели иметь адаптер между конвейером bosk и моделью scikit-learn. Мы разработали такие классы для моделей классификации и регрессии.

Давайте сделаем классификационную bosk модель.

[1]:
from bosk.executor.sklearn_interface import BoskPipelineClassifier
from bosk.painter.graphviz import GraphvizPainter
from bosk.pipeline.builder.functional import FunctionalPipelineBuilder
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import ConfusionMatrixDisplay
from IPython.display import Image
[2]:
n_estimators = 20
b = FunctionalPipelineBuilder()
X, y = b.Input()(), b.TargetInput()()
rf_1 = b.RFC(n_estimators=n_estimators)(X=X, y=y)
et_1 = b.ETC(n_estimators=n_estimators)(X=X, y=y)
concat_1 = b.Concat(['X', 'rf_1', 'et_1'])(X=X, rf_1=rf_1, et_1=et_1)
rf_2 = b.RFC(n_estimators=n_estimators)(X=concat_1, y=y)
et_2 = b.ETC(n_estimators=n_estimators)(X=concat_1, y=y)
stack = b.Stack(['rf_2', 'et_2'], axis=1)(rf_2=rf_2, et_2=et_2)
average = b.Average(axis=1)(X=stack)
argmax = b.Argmax(axis=1)(X=average)
roc_auc = b.RocAuc()(gt_y=y, pred_probas=average)
pipeline = b.build(
    {'X': X, 'y': y},
    {'labels': argmax, 'probas': average, 'roc-auc': roc_auc}
)
GraphvizPainter(figure_dpi=100).from_pipeline(pipeline).render('pipeline.jpeg')
display(Image('pipeline.jpeg'))
../_images/notebooks_ru_sklearn_interface_2_0.jpg

Это простой классифицирующий Глубокий лес с 2 слоями. Предположим, мы хотим нарисовать матрицу ошибок (confusion matrix) для нашей модели. Как мы знаем, sklearn предоставляет эту функциональность. Итак, давайте обернем наш пайплайн в интерфейс sklearn.

По умолчанию BaseBoskPipelineWrapper связывает аргументы X, y и sample_weigth метода fit с одноименными входами конвейера. Ожидается, что выходные слоты будут называться pred и proba. Таким образом, нам нужно указать отображение требуемых pred и proba на наши выходные данные labels и probas.

[3]:
sklearn_model = BoskPipelineClassifier(pipeline, outputs_map={'pred': 'labels', 'proba': 'probas'})

Давайте сгенерируем данные, обучим нашу модель и нарисуем матрицу ошибок.

[4]:
iris = load_iris()
X = iris.data
y = iris.target
class_names = iris.target_names

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
sklearn_model.fit(X_train, y_train)

ConfusionMatrixDisplay.from_estimator(
    sklearn_model,
    X_test,
    y_test,
    display_labels=class_names,
    cmap='Greens',
    normalize='true',
)
[4]:
<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x7f62dae33d60>
../_images/notebooks_ru_sklearn_interface_6_1.png