モデルのトレーニング中に、次のような警告が表示されます
私はこのような呼び出しでより具体的にそれをトリガーすることができます
from evalml.objectives import F1
f1 = F1()
f1.score(y_predicted=[0, 0],
y_true=[0, 1])
扱い方に関して。 これが頭に浮かぶことです
nan
またはメトリックの最悪のスコアに置き換えます。 次に、エラーメッセージを結果ディクショナリのどこかに保存します。ええ、これを修正する必要があります。 一般に、コードで印刷されない限り、stdoutに何も出力されないようにする必要があります。
これは#311に関係しているのだろうか。
このsklearnstdout出力を抑制し、可能であれば独自の警告メッセージを作成するという、両方の提案を行う必要があると思います。
@christopherbunn RE会議でこれについて言及しましたが、これを進行中としてマークする必要がありますか?
@christopherbunn @jeremyliweishih私はこれについてzero_division=0.0
、すべての精度とf1の目的(バイナリとマルチクラス)に
説明
精度はn_true_pos / (n_true_pos + n_false_pos)
です。 したがって、モデルが問題のデータ分割で特定のラベルをまったく予測しない場合、そのラベルの真または偽陽性はないため、0による除算が行われます。f1についても同様です。
口論
クラスのバランスをうまく取っていると仮定しましょう(現在は行っていませんが、別のトピック、#194#457です)。 その場合、トレーニングまたは検証の分割に特定のクラスのインスタンスがほとんど含まれない可能性はほとんどありません。 そして、それを仮定でき、モデルが特定のラベルの予測をまだ行っていない場合、それは貧弱なモデルであると主張します。したがって、精度とf1の両方で0である可能な限り低いスコアを与える必要があります。
いいね?
例
In [38]: import numpy as np
In [39]: import sklearn.metrics
In [40]: y_true = np.array([0, 0, 0, 0, 1])
In [41]: y_pred = np.array([0, 0, 0, 0, 0])
In [42]: sklearn.metrics.precision_score(y_true, y_pred)
/Users/dylan.sherry/.pyenv/versions/3.8.2/envs/evalml/lib/python3.8/site-packages/sklearn/metrics/_classification.py:1272: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, msg_start, len(result))
Out[42]: 0.0
In [43]: sklearn.metrics.precision_score(y_true, y_pred, zero_division=0.0)
Out[43]: 0.0
@dsherryは私には理にかなっています。 これが現在行っていることだと思いますが、警告もあります(デフォルトでは「警告」に設定され、0に設定され、警告も投稿されるため)
@jeremyliweishihええ!
@christopherbunnからこれを取得して、今週、彼が決勝戦と戦うときにマージできるようにします:)