web-dev-qa-db-ja.com

私のコードに空の配列がない空の配列に関するsklearnの非推奨エラー

私はちょうどエンコードとデコードを遊んでいますが、sklearnからこのエラーが発生します:

警告(警告モジュールから):ファイル "C:\ Python36\lib\site-packages\sklearn\preprocessing\label.py"、diffの場合は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))
13
Tissuebox

TLDR:警告は無視できます。これは、sklearnが内部的にはまったく理想的ではない何かをしていることが原因です。


この警告は、実際にはnumpyによって引き起こされます。これは、 空の配列に対する非推奨の真理値テスト

長いことと短いことは、空の配列の真理テストは危険であり、誤解を招くものであり、いかなる意味でも有用ではないため、廃止すべきです。

これは、if array:arrayが空かどうかを確認します。ただし、sklearn .19.1リリースでこれを行います

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

Numpyのバージョンが十分に新しいため、文句を言い、警告を発行します。

問題は 修正済み sklearnの現在のmasterブランチであるため、修正は次のリリースに含まれる予定です。

25
kazemakase

Numpyの更新後、警告は消去されました。

conda update numpy

また、pipなどで更新することもできます。

0
Qinsi