如何理解sklearn工具函数column_or_1d()?检测数据并转换
发布于 作者:苏南大叔 来源:程序如此灵动~

sklearn.utils
里面有个看上去很散装的函数.column_or_1d()
,它是用来做什么的呢?如何使用.column_or_1d()
呢?这个函数的功用是:将特定的多维ndarray
数组扁平化处理转换为一维数组,具体的可以参考苏南大叔在本文中的描述。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:win10
,python@3.12.0
,scikit-learn@1.3.2
。.column_or_1d(y)
将y
转换为一维数组,如果warn=true
,则会在转换时发出警告。在sklearn
里面,用于转换处理样本的y
标签。例如:鸢尾花数据集的target
。
相似之处:数组扁平化
以前有文章对ndarray
数组扁平化操作有过专门的探讨。参考文章:
这里并不是以数组扁平化为主要讨论内容的,所以,这里仅作范例:
在最好的情况下,.column_or_1d()
的函数效果,就是和以前讨论的数组扁平化的效果一致的。
不同之处:只能扁平化一部分数组
.column_or_1d()
只能扁平化一部分数组。举例:
而这些在sklearn.utils.column_or_1d(a)
报错【注意是报错】的情况,在以前的情况下,这些变量都是可以正常扁平化的。
.column_or_1d()会发出警告
在那些能被正常扁平化的数据里面,有一些是会被触发警告【主要是警告】信息的。例如:
输出警告信息:
表格总结
目标数据是['苏' '南'] <class 'numpy.ndarray'>
。表格中的list
类型,是没有ndim
和shape
属性的,但是可以脑补对不?
数据 | ndim | shape | utils.column_or_1d() | np.ravel() |
---|---|---|---|---|
np.array(["苏","南"]) | 1 | (2,) | ["苏","南"](ndarray) | ["苏","南"] (ndarray) |
["苏","南"] | 1 | (2,) | ["苏","南"](ndarray) | ["苏","南"] (ndarray) |
np.array([["苏"],["南"]]) | 2 | (2,1) | ["苏","南"] + warning | ["苏","南"] (ndarray) |
[["苏"],["南"]] | 2 | (2,1) | ["苏","南"] + warning | ["苏","南"] (ndarray) |
np.array([["苏","南"]]) | 2 | (1,2) | error | ["苏","南"] (ndarray) |
[["苏","南"]] | 2 | (1,2) | error | ["苏","南"] (ndarray) |
np.array([[["苏"]],[["南"]]]) | 3 | (2,1,1) | error | ["苏","南"] (ndarray) |
[[["苏"]],[["南"]]] | 3 | (2,1,1) | error | ["苏","南"] (ndarray) |
基本上可以这么理解的:
- 只有原版就是扁平化的,才不会触发错误或者警告信息。
- 原版如果是竖直方向的扁平,则会触发警告信息,不会触发错误信息。
测试代码:
这个sklearn.utils.column_or_1d(a)
的存在意义,更多的是检测,而不是转换吧?比较奇葩的函数,令苏南大叔想起了assert
断言函数。
题外话
需要注意的是.column_or_1d()
来自于sklearn.utils
,以前苏南大叔还写过一个.bunch()
也是来自sklearn.utils
。参考文章:
结语
这个好像是第一个sklearn
里面的和预测没有啥直接关系的文章吧?更多sklearn
相关文章,请点击:


