在将 pandas 数据框列传递给 scikit learn 回归器之前,是不是应该以某种方式对其进行转换?

Posted

技术标签:

【中文标题】在将 pandas 数据框列传递给 scikit learn 回归器之前,是不是应该以某种方式对其进行转换?【英文标题】:Should a pandas dataframe column be converted in some way before passing it to a scikit learn regressor?在将 pandas 数据框列传递给 scikit learn 回归器之前,是否应该以某种方式对其进行转换? 【发布时间】:2014-01-19 01:23:14 【问题描述】:

我有一个 pandas 数据框,并将 df[list_of_columns] 作为 X 和 df[[single_column]] 作为 Y 传递给随机森林回归器。

以下警告是什么意思,应该如何解决?

DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().   probas = cfr.fit(trainset_X, trainset_Y).predict(testset_X)

【问题讨论】:

为什么single_column 周围有方括号? 'single_column' 有目标列名,pandas 列选择需要一个列表所以列名用方括号括起来 不,它没有。如果您省略了它们,您将不会收到警告。 【参考方案1】:

使用Y = df[[single_column]].values.ravel() 为我解决DataConversionWarning

【讨论】:

【参考方案2】:

实际上,警告会告诉你到底是什么问题:

您传递了一个二维数组,该数组恰好采用(X, 1) 的形式,但该方法需要一个一维数组并且必须采用(X, ) 的形式。

此外,警告会告诉您如何转换为所需的形式:y.values.ravel()

【讨论】:

AttributeError: 'DataFrame' object has no attribute 'ravel' @mehaase 并不是真的要盲目复制粘贴。这更多的是解释发生了什么以及为什么。对于盲目的复制粘贴 - 使用这个:y.values.ravel()【参考方案3】:

您可以使用 df.single_column.valuesdf['single_column'].values 来获取您的系列的底层 numpy 数组(在这种情况下,它还应该具有 lejlot 提到的正确的一维形状)。

【讨论】:

【参考方案4】:

只需检查您的 Y 变量的形状,它应该是一个一维对象,并且您可能正在传递具有更多(可能是微不足道的)维度的东西。 reshape成list/1d数组的形式。

【讨论】:

以上是关于在将 pandas 数据框列传递给 scikit learn 回归器之前,是不是应该以某种方式对其进行转换?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据框列传递给scala函数

如何将两个数据框中的列传递给 Haversine 函数?

将 Pandas 列传递给函数时出现“ValueError:Series 的真值不明确”

在 pyspark 中,我想将值的数据帧列传递给函数并在该数据列中操作说,第 5 个值

如何在执行 SELECT... 语句时将表列传递给 plpgsql 函数

为 Scikit-Learn 向量化 Pandas 数据框