Я пытаюсь создать объект 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())