
端到端的机器学习项目
|
71
和人均 GDP 来代替国家代码)。或者,你可以用可学习的低维向量(称为嵌
入)来替换每个类别。每个类别的表征可以在训练期间学习。这是表征学习
的示例(更多细节参见第 13 章和第 17 章 )。
2.5.3 自定义转换器
虽然 Scikit-Learn 提供了许多有用的转换器,但是你仍然需要为一些诸如自定义清理操
作或组合特定属性等任务编写自己的转换器。你当然希望让自己的转换器与 Scikit-Learn
自身的功能(比如流水线)无缝衔接,而由于 Scikit-Learn 依赖于鸭子类型的编译,而
不是继承,所以你所需要的只是创建一个类,然后应用以下三种方法:fit()(返回
self)、 transform()、fit_transform()。
你可以通过添加 TransformerMixin 作为基类,直接得到最后一种方法。同时,如果
添加 BaseEstimator 作为基类(并在构造函数中避免 *args 和 **kargs),你还能额外
获得两种非常有用的自动调整超参数的方法(get_params() 和 set_params())。
例如,我们前面讨论过的组合属性,这里有个简单的转换器类,用来添加组合后的
属性:
from sklearn.base import
BaseEstimator, TransformerMixin
rooms_ix, bedrooms_ix, population_ix, households_ix = 3, 4, 5, 6
class CombinedAttributesAdder ...