scikit-learn 1.4.2的ColumnTransformer说明,输入数组或DataFrame中的不同列、不同列子集可以分别交给不同transformer,随后把各自生成的特征拼成单一特征空间。它描述的是分列处理后的横向组合,不是让同一整份输入依次通过每个步骤。输入被怎样分配,与这些步骤的产出最后怎样组合,因而要在同一份资料中分别保留。[1]
transformers清单的每项由name、transformer和columns组成。name识别这一项转换者,columns说明它接收哪部分输入。文档对列身份作了两种解释:整数表示列位置,字符串可以引用DataFrame的列名。因此,字符相同的一个名称与某个位置编号,并不是两种必然可以脱离输入表互换的身份;列选择始终要联系所采用的表达方式理解。[1]
列选择还会影响输入维度。文档要求,当transformer期望一维输入时,采用标量字符串或整数;其他选择会传入二维数据。这里的标量与一组选择不只是字面写法不同,它们关系到传给转换者的数据形态。用一个列名指向某列,与把该列包含在一组列选择中,不能因为最终想到同一列便省略这项一维、二维的区别。[1]
未在transformers中指定的列,默认会被drop。remainder为passthrough时,文档说被拼接的是未被指定、但存在于fit所接收数据中的剩余列;对于DataFrame,transform时新增而fit时未见的列会排除。因而,“剩余列通过”不是一个脱离原输入范围的承诺,它仍带着fit时有哪些列这一条件,不等于此后任何新列都自动进入输出。[1]
remainder也可以是另一个estimator。该情形下,未指定的列由它处理,文档同时要求fit与transform输入的DataFrame列具有相同顺序。这个顺序条件与上一段对新列的限制并不相互替代:一个讨论未见列是否进入结果,另一个是特定remainder方式对输入排列的前提。只留下“还处理剩余列”,会遗漏原文分别附在这些方式上的条件。[1]
结果中的列顺序由Notes另行说明:按transformers清单指定的次序排列,passthrough的剩余列加在右侧。因此,输入中的位置与输出中的位置不应被当作同一套索引。某一项接收的是输入列子集,输出位置却要联系转换清单的排列及此前各项产出的特征;仅抄原输入列名,尚未保留最后特征空间中的位置关系。[1]
output_indices_进一步提供从transformer名称到输出切片的字典,切片表示它在转换后输出中对应的区间。这与columns选择输入子集分处两端:前者从最终输出追溯由谁产生,后者从输入确定交给谁。名称把两端联系起来,而不是让两份位置资料变成一个值,也没有由接口名称保证输入一列必然只产生一列输出。[1]
特征名的前缀还有独立规则。verbose_feature_names_out为真时,输出特征名以前述产出它的transformer名称作前缀;为假时不加此前缀,名称不唯一则会报错。前缀提供的是产出来源的命名信息,output_indices_提供的是输出区间,两者可以共同解释一项特征来自哪里,却分别保留文字标签和位置范围。[1]
本文限定1.4.2文档的上述对象关系,未拟合或运行预处理,不采用页面中稀疏输出说明不一致的部分,也不推荐阈值或模型方案。版本与版权年不作为首发日。[1]
资料来源:
[1] [sklearn.compose.ColumnTransformer — scikit-learn 1.4.2 documentation](https://scikit-learn.org/1.4/modules/generated/sklearn.compose.ColumnTransformer.html)
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。