【发布时间】:2023-01-07 23:34:02
【问题描述】:
在我的代码中,我试图访问StandardScaler 的sample_weight。然而,这个StandardScaler在Pipeline中,而Pipeline又在FeatureUnion中。我似乎无法正确获得此参数名称:scaler_pipeline__scaler__sample_weight 应在预处理器对象的 fit 方法中指定。
我收到以下错误:KeyError: 'scaler_pipeline
这个参数名称应该是什么?或者,如果有更好的方法来执行此操作,请随时提出。
下面的代码是一个独立的例子。
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.preprocessing import StandardScaler
import pandas as pd
class ColumnSelector(BaseEstimator, TransformerMixin):
"""Select only specified columns."""
def __init__(self, columns):
self.columns = columns
def fit(self, X, y=None):
return self
def transform(self, X):
return X[self.columns]
def set_output(self, *, transform=None):
return self
df = pd.DataFrame({'ds':[1,2,3,4],'y':[1,2,3,4],'a':[1,2,3,4],'b':[1,2,3,4],'c':[1,2,3,4]})
sample_weight=[0,1,1,1]
scaler_pipeline = Pipeline(
[
(
"selector",
ColumnSelector(['a','b']),
),
("scaler", StandardScaler()),
]
)
remaining_pipeline = Pipeline([("selector", ColumnSelector(["ds","y"]))])
# Featureunion fitting training data
preprocessor = FeatureUnion(
transformer_list=[
("scaler_pipeline", scaler_pipeline),
("remaining_pipeline", remaining_pipeline),
]
).set_output(transform="pandas")
df_training_transformed = preprocessor.fit_transform(
df, scaler_pipeline__scaler__sample_weight=sample_weight
)
【问题讨论】:
标签: python pandas scikit-learn pipeline