sklearn中关于空数组的弃用错误,我的代码中没有任何空数组

Posted

技术标签:

【中文标题】sklearn中关于空数组的弃用错误,我的代码中没有任何空数组【英文标题】:deprecation error in sklearn about empty array without any empty array in my code 【发布时间】:2018-07-19 03:13:40 【问题描述】:

我只是在玩编码和解码,但我从 sklearn 收到此错误:

警告(来自警告模块): 文件“C:\Python36\lib\site-packages\sklearn\preprocessing\label.py”,第 151 行 如果差异: DeprecationWarning:空数组的真值不明确。返回 False,但将来这将导致错误。使用array.size > 0 检查数组是否为空。

这里是完整代码,你可以在python 3+中自己运行

我的问题是为什么它说我使用空数组,而我的代码中显然没有,感谢您抽出宝贵时间回答我的问题。

### label encoding ###

import numpy as np
from sklearn import preprocessing

# Sample input labels
input_labels = ["red", "black", "red", "green",\
                "black", "yellow", "white"]

# Create label encoder abd fit the label
encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)

# Print the mapping
print("\nLabel mapping:")
for i, item in enumerate(encoder.classes_):
    print(item, "-->", i)

# Encode a set of labels using encoder
test_labels = ["green", "red", "black"]
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)
print("Encoded values =", list(encoded_values))

# Decode a set of values using the encoder
encoded_values = [3, 0, 4, 1]
decoded_list = encoder.inverse_transform(encoded_values)
print("\nEncoded values =", encoded_values)
print("Decoded labels=", list(decoded_list))

【问题讨论】:

你的 sklearn 版本是什么?我没有收到关于 0.18.1(和 numpy 1.13.3)的警告。 sklearn 是 0.19.1 版本,numpy 是 1.14.0 【参考方案1】:

TLDR:您可以忽略警告。这是因为 sklearn 在内部做了一些不太理想的事情。


警告实际上是由numpy引起的,deprecated truth testing on empty arrays:

总而言之,对空数组进行真值测试是危险的、具有误导性的,而且没有任何用处,应该被弃用。

这意味着不应该做类似if array: 的事情来检查array 是否为空。不过,sklearn does this in the 0.19.1 release:

    diff = np.setdiff1d(y, np.arange(len(self.classes_)))
    if diff:
        raise ValueError("y contains new labels: %s" % str(diff))

因为您的 numpy 版本足够新,它会抱怨并发出警告。

sklearn 的当前 master 分支中的问题 has been fixed,所以我希望修复会包含在下一个版本中。

【讨论】:

您可以禁止显示此特定警告,如 here 的 3 个代码块中的第一个所示。【参考方案2】:

更新numpy后,警告被清除:

conda update numpy

你也可以通过 pip 或其他方式更新它。

【讨论】:

以上是关于sklearn中关于空数组的弃用错误,我的代码中没有任何空数组的主要内容,如果未能解决你的问题,请参考以下文章

sklearn MiniBatchKMeans 中的弃用警告

Python中的弃用警告,在这里有意义吗?

我可以防止嵌套的弃用方法调用引发警告吗?

python中关于空的说法

节点 js 应用程序中的弃用警告

节点 js 应用程序中的弃用警告