Подтвердить что ты не робот

Получение атрибутов модели из конвейера scikit-learn

Обычно я получаю загрузки PCA следующим образом:

pca = PCA(n_components=2)
X_t = pca.fit(X).transform(X)
loadings = pca.components_

Если я запустил PCA с помощью scikit-learn pipline...

from sklearn.pipeline import Pipeline
pipeline = Pipeline(steps=[    
('scaling',StandardScaler()),
('pca',PCA(n_components=2))
])
X_t=pipeline.fit_transform(X)

... возможно ли получить нагрузки?

Просто попытка loadings = pipeline.components_ завершается с ошибкой:

AttributeError: 'Pipeline' object has no attribute 'components_'

Спасибо!

(Также интересуется извлечением атрибутов типа coef_ из обучающих конвейеров.)

4b9b3361

Ответ 1

Посмотрите на документацию: http://scikit-learn.org/dev/modules/pipeline.html Я чувствую, что это довольно ясно.

Есть два способа получить шаги в конвейере, используя индексы или используя имена строк, которые вы указали:

pipeline.named_steps['pca']
pipeline.steps[1][1]

Это даст вам объект PCA, на котором вы можете получить компоненты.

Ответ 2

Использование Neuraxle

Работать с конвейерами проще с помощью Neuraxle. Например, вы можете сделать это:

from neuraxle.pipeline import Pipeline
from neuraxle.steps.sklearn import SKLearnWrapper

# Create and fit the pipeline: 
pipeline = Pipeline([
    SKLearnWrapper(StandardScaler()),
    SKLearnWrapper(PCA(n_components=2))
])
pipeline, X_t = pipeline.fit_transform(X)

# Get the components: 
pca = pipeline[-1]
components = pca.components_

Вы можете получить доступ к вашему PCA тремя различными способами по своему желанию:

  • pipeline['PCA']
  • pipeline[-1]
  • pipeline[1]

Neuraxle - это конвейерная библиотека, построенная на основе scikit-learn, чтобы вывести конвейеры на следующий уровень. Он позволяет легко управлять пространствами распределений гиперпараметров, вложенными конвейерами, сохранять и перезагружать, обслуживать REST API и многое другое. Все сделано для того, чтобы использовать алгоритмы глубокого обучения и позволить параллельные вычисления.

Вложенные конвейеры:

У вас могут быть конвейеры внутри конвейеров, как показано ниже.

# Create and fit the pipeline: 
pipeline = Pipeline([
    SKLearnWrapper(StandardScaler()),
    Identity(),
    Pipeline([
        Identity(),  # Note: an Identity step is a step that does nothing. 
        Identity(),  # We use it here for demonstration purposes. 
        Pipeline([
            Identity(),
            Identity(),
            SKLearnWrapper(PCA(n_components=2))
        ])
    ])
])
pipeline, X_t = pipeline.fit_transform(X)

Тогда вам нужно сделать это:

# Get the components: 
pca = pipeline["Pipeline"]["Pipeline"][-1]
components = pca.components_