Как определить пользовательский конвейер sklearn с фиксированными шагами? - PullRequest
4 голосов
/ 13 февраля 2020

Я пытаюсь создать объект Pipeline scikit-learn с фиксированными шагами, то есть объект PipelineWithFixedSteps (Pipeline), который наследуется от Pipeline, чтобы я мог создать его экземпляр с помощью простого вызова PipelineWithFixedSteps () и сохранить мой код в чистоте.

Я заметил, что если я создаю несколько экземпляров PipelineWithFixedSteps () и задаю параметры одного из них, параметры всех экземпляров изменяются.

Это предполагаемое поведение или я пропускаю что-то? Что может быть альтернативным способом определения ярлыка для конвейера с фиксированными шагами?

Я использую sklearn 0.22.1

from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler

class PipelineWithFixedSteps(Pipeline):    
    def __init__(
        self,
        steps = [
            ('scaler', StandardScaler()),
            ('linear', LinearRegression()),
        ]
    ):
        super().__init__(steps=steps)

a = PipelineWithFixedSteps()
print(a.get_params())

a.set_params(scaler__with_std=False)
print(a.get_params())

# Create a new instance of PipelineWithFixedNames()
# The new instance has the same parameters as a
b = PipelineWithFixedSteps()
print(b.get_params())

# Set the parameters of b
# The parameters of a are also changed
b.set_params(scaler__with_mean=False)
print(a.get_params())

1 Ответ

3 голосов
/ 13 февраля 2020

Это действительно не имеет никакого отношения к sklearn, но сводится к тому, как значения параметров по умолчанию интерпретируются в Python (ср., Например, этот вопрос ), и звучит так, как будто вы пытаетесь что-то сделать в пределах

class PipelineWithFixedSteps(Pipeline):    
    def __init__(self, steps=None):
        if steps is None:
            steps = [('scaler', StandardScaler()), ('linear', LinearRegression())]
        super().__init__(steps=steps)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...