web-dev-qa-db-ja.com

sklearn.metrics.mean_squared_errorは大きいほど良い(否定される)か?

一般的に、mean_squared_error小さいほど良い。

Sklearnメトリックパッケージを使用している場合、ドキュメントページで次のように表示されます。 http://scikit-learn.org/stable/modules/model_evaluation.html

すべてのスコアラーオブジェクトは、高い戻り値が低い戻り値よりも優れているという規則に従います。したがって、metrics.mean_squared_errorのような、モデルとデータ間の距離を測定するメトリックは、メトリックの否定値を返すneg_mean_squared_errorとして使用できます。

および enter image description here

ただし、次のURLにアクセスした場合: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error

それはMean squared error regression loss、否定されたとは言わなかった。

そして、ソースコードを見て、そこの例を確認した場合: https://github.com/scikit-learn/scikit-learn/blob/a24c8b46/sklearn/metrics/regression.py#L18 通常のmean squared error、つまり、小さいほど良い。

それで、ドキュメントの否定された部分について何かを見逃したのではないかと思っています。ありがとう!

13
Edamame

実際の関数"mean_squared_error"はマイナス部分については何もありません。ただし、 'neg_mean_squared_error'を試行したときに実装された関数は、スコアの否定バージョンを返します。

ソースコード で定義されている方法については、ソースコードを確認してください。

neg_mean_squared_error_scorer = make_scorer(mean_squared_error,
                                        greater_is_better=False)

Param greater_is_betterFalseに設定されます。

現在、これらのスコア/損失はすべて、cross_val_score、cross_val_predict、GridSearchCVなどのさまざまなもので使用されています。たとえば、「accuracy_score」または「f1_score」の場合、高いスコアのほうが優れていますが、損失(エラー)の場​​合は低くなりますスコアが優れています。両方を同じ方法で処理するには、負の値を返します。

そのため、このユーティリティは、特定の損失またはスコアのソースコードを変更せずに、スコアと損失を同じ方法で処理するために作成されています。

だから、あなたは何も見逃していませんでした。損失機能を使用するシナリオに注意する必要があります。 mean_squared_errorのみを計算する場合は、mean_squared_errorのみ。ただし、それを使用してモデルを調整する場合、またはscikitに存在するユーティリティを使用してcross_validateする場合は、'neg_mean_squared_error'

多分それについていくつかの詳細を追加し、さらに説明します。

21
Vivek Kumar

これは、独自のスコアリングオブジェクト[ 1 ]を実装するための規則です。また、損失のない関数を作成してカスタムの正のスコアを計算できるため、正でなければなりません。つまり、損失関数(スコアオブジェクト用)を使用すると、負の値にする必要があります。

損失関数の範囲は次のとおりです。(optimum) [0. ... +] (e.g. unequal values between y and y')。たとえば、平均二乗誤差の式をチェックすると、常に正です。

mean squared error

画像ソース: http://scikit-learn.org/stable/modules/model_evaluation.html#mean-squared-error

0
Darius M.