Получение атрибутов модели из конвейера 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_
из обучающих конвейеров.)
Ответы
Ответ 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_