You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以数组作为参数调用scikit-learn的make_pipeline方法?

解决scikit-learn make_pipeline传入数组的问题

你的需求其实可以通过Python的参数解包特性直接实现,完全不需要用eval这种容易出错的方式,而且完全符合你不能修改make_pipeline逻辑的要求。

核心解决方案:使用*操作符解包数组

make_pipeline函数接受的是可变数量的位置参数(也就是一个个estimator对象),而Python的*操作符可以把列表/数组中的元素逐个拆解出来,作为独立的位置参数传递给函数。具体写法如下:

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

# 定义你的estimator数组
my_array = [StandardScaler(), LogisticRegression()]

# 使用*解包数组,直接传入make_pipeline
my_pipeline = make_pipeline(*my_array)

这样调用的效果和你手动写make_pipeline(my_array[0], my_array[1])完全一致,而且不管数组里有多少个estimator,都能一次性传递,非常灵活。

为什么你之前的eval方法无效?

你尝试的eval((', '.join(map(str, my_array))).replace("\n", ""))存在两个关键问题:

  1. 当你把数组元素转成字符串再用逗号拼接时,得到的内容并不是合法的Python表达式(比如StandardScaler(), LogisticRegression()这种写法单独放在eval里会报错,因为逗号分隔的两个对象不能直接作为表达式求值)。
  2. 就算你给表达式加上括号变成(StandardScaler(), LogisticRegression()),eval后得到的是一个元组,此时你把这个元组传给make_pipeline,相当于只传了一个参数(这个元组对象),而make_pipeline需要的是多个独立的estimator参数,自然无法正常工作。

补充说明

如果你的参数是以字典形式存储的(比如每个estimator的配置参数),可以用**操作符解包字典,但在这个场景下,用*解包列表/数组就完全足够了。

内容的提问来源于stack exchange,提问作者GeoRie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:09:09