【发布时间】: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