我想知道在fit函数中传递列的正确方法是什么。例如,我有:
# Lin. regression
lin_reg = LinearRegression().fit(data[["X"]],
data[["Y"]])
#Poisson regression
log_reg = PoissonRegressor().fit(data[["X"]],
data.loc[:, "Y"])
因此,在线性回归中,上面显示的行只起作用,即使我将y列作为data[["Y"]]
传递。如果我在泊松回归中这样做(例如,见下文)
log_reg = PoissonRegressor().fit(data[["X"]],
data[["Y"]])
它将发出警告“当需要1d数组时传递了列向量y。请将y的形状更改为(n_samples),例如使用ravel()
现在,我想知道将y值传递给scikit learn的正确方法是什么,以及线性回归是如何不产生任何问题的
我完全知道data[["Y"]]
会产生一个数据帧,所以我猜这就是区别,但我不确定为什么线性回归会接受一个数据帧,而泊松回归不会
因此,向scikit learn传递y值的正确方法是什么
传递
y
的正确方法是传递类似于相应方法的指定形状的数组。所以你需要知道两件事:1)数组是什么样的?
可以在here中找到构成类似数组的内容的引用。任何指定的对象都是有效的,可以使用。我相信没有特别的偏好,因为
scikit-learn
会在内部将它们转换为numpy
数组2)需要什么形状?
使用您的示例,您将看到
LinearRegression
和PoissonRegressor
的fit
方法将接受不同的形状这里是
LinearRegression
:下面是
PoissonRegressor
:因为
LinearRegression
确实支持多输出回归,所以它接受类似于(n_samples, n_targets)
形状的数组,在您的例子中也可能类似于(n_samples, 1)
。所以没有问题另一方面
PoissonRegressor
只允许(n_samples,)
的形状。这就是为什么它抱怨你的输入不符合规范但是,请注意,它仍然可以工作,因为它可以将数据转换为指定的形状。但是您会得到一个警告,这样您就知道这里只使用1d数组,因为不支持(潜在的)多输出
如果要避免任何问题,请按照错误消息的建议,使用
ravel
将输入平坦化。例如,在您的案例中:values
返回相应的numpy
数组ravel
将其转换为1d数组相关问题 更多 >
编程相关推荐