【问题标题】:DataConversionWarning: A column-vector y was passed when a 1d array was expectedDataConversionWarning:当需要一维数组时,传递了列向量 y
【发布时间】:2017-07-31 21:15:09
【问题描述】:

我在运行这部分代码时一直出错:

scores = cross_val_score(XGB_Clf, X_resampled, y_resampled, cv=kf)

错误是:

DataConversionWarning:一维数组时传递了列向量 y 预料之中。请将 y 的形状更改为 (n_samples, ),对于 使用 ravel() 的示例。 y = column_or_1d(y, warn=True)

我知道这个问题有很多答案,我需要使用ravel(),但使用它不会改变任何事情!

另外,我传递给函数的数组“y”是不是一个列向量 ...

见:

y_resampled
Out[82]: array([0, 0, 0, ..., 1, 1, 1], dtype=int64)

当我跑步时

y_resampled.ravel()

我明白了

Out[81]: array([0, 0, 0, ..., 1, 1, 1], dtype=int64)

这和我的初始变量完全一样...

另外,当我运行 y_resampled.values.ravel() 时,我收到一条错误消息,告诉我这是一个 numpy 数组...

Traceback (most recent call last): 
File "<ipython-input-80-9d28d21eeab5>", line 1, in <module>
y_resampled.values.ravel() 

AttributeError: 'numpy.ndarray' 对象没有属性 'values'

你们中有人对此有解决方案吗?

非常感谢!

【问题讨论】:

  • 几天后,我仍然无法解决这个问题。我需要直接忽略代码中的警告才能解决它。我真的不喜欢这个解决方案!有人对此有答案吗?非常感谢...!
  • 这很奇怪。对于这些警告,我肯定已经看到 scikit-learn 中不同模型(和相关)类之间存在一些差异。例如,我可以将单列 DataFrame 作为 y 传递给 LinearRegression 对象,并且不会出现警告。另一方面,如果我使用 MLPRegressor 执行此操作,我会收到警告,除非我只传递该列的值(NumPy 数组)。
  • 至于您的具体问题:是的,ravel 函数不会更改该数组,因为 ravel 旨在基本上将矩阵展平或展开为一维数组。此外,重新调整您对 values 属性的尝试使用:这也是您所期望的,因为 values 将 DataFrame 或 Series 的值作为 NumPy 数组返回,并且看到您已经拥有一个,这是行不通的。我会问你正在运行什么版本的 sklearn 和 numpy?升级可能不是一个坏主意,当然,要等待任何依赖项。

标签: arrays python-3.x numpy


【解决方案1】:

在你将 y_resampled 写成数据框时,你可以使用 values 函数。

import pandas as pd
y_resampled = pd.DataFrame(y_resampled)

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 2020-02-07
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多