| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Custom Transformers and Transformation Pipelines -> 正文阅读 |
|
[人工智能]Custom Transformers and Transformation Pipelines |
Hands-on Machine Learning with Scikit Learn, Keras & TensorFlow Charpter two 学习笔记(小白的心酸) Custom transformers(定制变换器) 尽管scikit-learn提供了许多有用的变换器,但是有时我们也需要为一些任务编写自己的变换器,比如自定义清理操作或组合特定属性。你会希望你的转换器能够无缝地使用scikit-learn功能(比如pipelines),而且由于scikit-learn依赖于duck类型(而不是inheritance),你所需要做的就是创建一个类并实现三个方法: fit(), transform(), fit_transform() 您可以通过简单地添加TransformerMixin作为基类来获得fit_transform()。(如果使用TransformerMixin作为基类,只需定义fit()和tramsform()即可自动实现fit_transform()函数)如果您如果添加BaseEstimator作为基类,,注意此时__init__函数不能接受 ? a r g s *args?args 和 ? ? k w a r g s **kwargs??kwargs,还可以使用两个额外的方法(get_params()和set_params()),这将有助于自动超参数调优。 例如下面这个小的transformer类, 它添加了我们之前讨论过的组合属性。
?调用这个transformer时只需要
这个例子中,transformer 只有一个超参数,add_bedrooms_per_room, 默认设置为True,超参数可以让你很容易发现添加这个属性是否有助于机器学习算法。更一般的,您可以添加一个超参数排除任何你不能100%确定的数据准备步骤。这些数据准备步骤的自动化程度越高,可以自动尝试的组合就越多,从而更有可能找到理想的组合(并为您节省大量时间)。 Transformation Pipeline(变换器 pipeline) 有许多数据转换步骤需要按正确的顺序执行。幸运的是,Scikit-Learn提供了Pipeline类来帮助处理这样的转换序列。下面是一个用于数值属性的小pipeline:
Pipeline构造函数接受定义一系列步骤的名称/估计器对的列表。除最后一个估计器外的所有估计器都必须是transformer(即它们必须具有fit_transform()方法)。名称可以是你想要的任何名称(只要它们是唯一的并且不包含双下划线);它们将在以后的超参数调优中派上用场。 到目前为止,我们已经分别处理了分类属性的列(text attribute)和数字属性的列(numerical attribute)。如果使用一个转换器来处理所有列,并对每个列应用适当的转换,将会更加方便。在0.20版本中,Scikit-Learn为此引入了ColumnTransformer,其优点是它可以很好地处理pandas?DataFrames。
首先我们导入columnTransform类,然后获得数字列名和分类列名的列表,columnTransform类即创建完成。 constructor 包括一个元组列表,其中每个元组包含一个名称、一个transformer和要用到该transformer的目标的列名。 ?在本例中,我们指定数字列由num_pipeline(转换器为文中前面声明)进行转换,指定分类列由OneHotEncoder转换。 注意,OneHotEncoder返回一个稀疏矩阵,num_pipeline返回密集矩阵。当存在这种稀疏矩阵与密集矩阵混合的情况时,如果密度低于给定的阈值时(默认情况下,稀疏阈值为0.3),则返回稀疏矩阵,本例返回密集矩阵。 如果你使用的是scikit-learn 0.19或更早的版本,那么您可以使用第三方库,比如sklearn-pandas, 或者你可以推出自己定义的transformer,以获得与ColumnTransformer相同的功能。或者您可以使用FeatureUnion类,它可以应用不同的transformer并将其输出连接起来。但是您不能为每个transformer指定不同的列,它们都适用于整个数据。可以使用用于列选择的自定义transformer来解决这个限制(请参阅Jupyter notebook中的示例)。 ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 20:27:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |