scikit-learn中fit函数传递y列的正确方式是什么?
scikit-learn fit方法y参数传入规范与兼容性差异
两类模型对二维y的兼容性差异原因
scikit-learn中不同预估器的入参校验逻辑为单独实现,没有全局统一的强制规则:
LinearRegression支持多输出回归任务,因此其fit方法逻辑允许y为二维结构,不管是shape为(n_samples, 1)的数组还是单列DataFrame,哪怕是单输出场景也可以正常兼容,不会触发警告。PoissonRegressor属于限定单输出的广义线性模型,其前置校验逻辑明确要求y必须是1维数组,传入单列DataFrame(对应数组shape为(n_samples, 1))不符合校验要求,就会触发维度不匹配的警告。
y参数传递的官方标准规范
- 单输出任务:包括泊松回归、逻辑回归、SVM、决策树等绝大多数分类、回归场景,标准传参要求为1维结构,常用合法写法如下:
- pandas场景:
data["Y"](返回Series,天然为1维结构)、data.loc[:, "Y"]、data[["Y"]].values.ravel() - numpy场景:
y.ravel()、y.reshape(-1)
- pandas场景:
- 多输出任务:包括多目标回归、多标签分类等场景,可传入二维结构,pandas场景用
data[["Y1", "Y2"]]格式,numpy场景传入shape为(n_samples, n_outputs)的数组即可。
注:如果不确定当前使用的预估器是否支持二维y,单输出场景统一传入1维y是最稳妥的写法,可兼容所有scikit-learn预估器,不会触发任何警告或报错。
内容的提问来源于stack exchange,提问作者Snowflake
相关产品推荐
相关产品推荐

