【发布时间】:2019-09-29 23:49:29
【问题描述】:
我正在使用带有 Scikit-Learn 和 TensorFlow 的动手机器学习:概念、工具... 作者:Aurélien Géron。
我正在尝试在“转换管道”之后和“选择和训练模型”之前运行第 1 章中的代码。
旧版书使用以下代码进行组合变换:
from sklearn.base import BaseEstimator , TransformerMixin
class DataFrameSelector(BaseEstimator, TransformerMixin):
def __init__(self, attribute_names):
self.attribute_names = attribute_names
def fit(self, X, y=None):
return self
def transform(self, X):
return X[self.attribute_names].values
from sklearn.pipeline import FeatureUnion
#from sklearn_features.transformers import DataFrameSelector
num_attribs = list(housing_num)
cat_attribs = ["ocean_proximity"]
num_pipeline = Pipeline([
('selector', DataFrameSelector(num_attribs)),
('imputer', SimpleImputer(strategy="median")),
('attribs_adder', CombinedAttributesAdder()),
('std_scaler', StandardScaler()),
])
cat_pipeline = Pipeline([
('selector', DataFrameSelector(cat_attribs)),
('label_binarizer', LabelBinarizer()),
])
full_pipeline = FeatureUnion(transformer_list=[
("num_pipeline", num_pipeline),
("cat_pipeline", cat_pipeline),
])
housing_prepared=full_pipeline.fit_transform( housing )
housing_prepared
不过,新代码使用了新引入的 ColumnTransformer
from sklearn.compose import ColumnTransformer
num_attribs=list(housing_num)
cat_attribs=["ocean_proximity"]
full_pipeline = ColumnTransformer([
("num", num_pipeline, num_attribs),
("cat", OneHotEncoder(),cat_attribs),
])
housing_prepared=full_pipeline.fit_transform( housing )
housing_prepared
我想知道为什么旧版本的代码已停产并且无法正常工作,以及 ColumnTransformer 与 FeatureUnion 相比有什么新的地方。
【问题讨论】:
标签: python scikit-learn pipeline