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

Tis*_*box 13 arrays numpy python-3.x scikit-learn

我正在玩编码和解码,但我从sklearn得到这个错误:

警告(来自警告模块):文件"C:\ Python36\lib\site-packages\sklearn\preprocessing\label.py",第151行,如果是diff: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))
Run Code Online (Sandbox Code Playgroud)

kaz*_*ase 25

TLDR:您可以忽略该警告.这是由sklearn在内部做一些不太理想的事情造成的.


警告实际上是由引起的numpy,其上不再空数组实况测试:

长期和短期是对空数组进行真值测试是危险的,误导性的,并且没有任何用处,应该弃用.

这意味着不应该做一些if array:检查是否array为空的事情.但是,sklearn 在0.19.1版本中执行此操作:

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

因为你的numpy版本已经足够新了,它会抱怨并发出警告.

sklearn当前的主分支已经修复了这个问题,所以我希望修复程序包含在下一个版本中.

  • 很高兴知道,我该如何压制这条消息? (3认同)