未验证 提交 66c3d2dd 编写于 作者: 飞龙 提交者: GitHub

Merge pull request #124 from AnEscapist/patch-4

missing content and order of code.md
......@@ -1069,6 +1069,22 @@ housing_num_tr = num_pipeline.fit_transform(housing_num)
流水线暴露相同的方法作为最终的估计器。在这个例子中,最后的估计器是一个`StandardScaler`,它是一个转换器,因此这个流水线有一个`transform()`方法,可以顺序对数据做所有转换(它还有一个`fit_transform`方法可以使用,就不必先调用`fit()`再进行`transform()`)。
如果不需要手动将Pandas`DataFrame`中的数值列转成Numpy数组的格式,而可以直接将`DataFrame`输入pipeline中进行处理就好了。Scikit-Learn 没有工具来处理 Pandas`DataFrame`,因此我们需要写一个简单的自定义转换器来做这项工作:
```python
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
```
每个子流水线都以一个选择转换器开始:通过选择对应的属性(数值或分类)、丢弃其它的,来转换数据,并将输出`DataFrame`转变成一个 NumPy 数组。这样,你就可以很简单的写出一个以Pandas`DataFrame`为输入并且可以处理数值的流水线: 该流水线从`DataFrameSelector`开始获取数值属性,前面讨论过的其他数据处理步骤紧随其后。 并且你也可以通过使用`DataFrameSelector`选择类别属性并为其写另一个流水线然后应用`LabelBinarizer`.
你现在就有了一个对数值的流水线,你还需要对分类值应用`LabelBinarizer`:如何将这些转换写成一个流水线呢?Scikit-Learn 提供了一个类`FeatureUnion`实现这个功能。你给它一列转换器(可以是所有的转换器),当调用它的`transform()`方法,每个转换器的`transform()`会被并行执行,等待输出,然后将输出合并起来,并返回结果(当然,调用它的`fit()`方法就会调用每个转换器的`fit()`)。一个完整的处理数值和类别属性的流水线如下所示:
```python
......@@ -1120,19 +1136,6 @@ array([[ 0.73225807, -0.67331551, 0.58426443, ..., 0. ,
(16513, 17)
```
每个子流水线都以一个选择转换器开始:通过选择对应的属性(数值或分类)、丢弃其它的,来转换数据,并将输出`DataFrame`转变成一个 NumPy 数组。Scikit-Learn 没有工具来处理 Pandas`DataFrame`,因此我们需要写一个简单的自定义转换器来做这项工作:
```python
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
```
## 选择并训练模型
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册