我想在 pandas 数据框列的子集上使用 sklearn.preprocessing.StandardScaler。在管道之外这是微不足道的:
df[['A', 'B']] = scaler.fit_transform(df[['A', 'B']])
但现在假设我在 df 中有字符串类型的“C”列和以下管道定义
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
pipeline = Pipeline([
('standard', StandardScaler())
])
df_scaled = pipeline.fit_transform(df)
如何告诉 StandardScaler 只缩放列 A 和 B?
我习惯了 SparkML 管道,其中要缩放的特征可以传递给缩放器组件的构造函数:
normalizer = Normalizer(inputCol="features", outputCol="features_norm", p=1.0)
Note: The feature column is containing a sparse vector with all the numerical feature columns created by Spark's VectorAssembler
最佳答案
您可以查看 sklearn-pandas它提供了 Pandas DataFrame 和 sklearn 的集成,例如使用 DataFrameMapper:
mapper = DataFrameMapper([
... (list_of_columnnames, StandardScaler())
... ])
如果你不需要外部依赖,你可以使用一个简单的自己的转换器,正如我回答的here :
class Columns(BaseEstimator, TransformerMixin):
def __init__(self, names=None):
self.names = names
def fit(self, X, y=None, **fit_params):
return self
def transform(self, X):
return X[self.names]
pipe = make_pipeline(Columns(names=list_of_columnnames),StandardScaler())
关于python - 在 Pandas 数据框列的子集上使用 Pipeline 中的 scikit StandardScaler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50313521/