web-dev-qa-db-ja.com

回帰のScikit-learnクロス検証スコアリング

cross_val_scoreを回帰に使用するにはどうすればよいですか?デフォルトのスコアリングは精度であると思われますが、これは回帰にとってあまり意味がありません。おそらく平均二乗誤差を使用したいのですが、cross_val_scoreで指定することは可能ですか?

次の2つを試しましたが、動作しません:

scores = cross_validation.cross_val_score(svr, diabetes.data, diabetes.target, cv=5, scoring='mean_squared_error') 

そして

scores = cross_validation.cross_val_score(svr, diabetes.data, diabetes.target, cv=5, scoring=metrics.mean_squared_error)

最初のものは負の数のリストを生成しますが、平均二乗誤差は常に非負でなければなりません。 2番目の文句は次のように文句を言います:

mean_squared_error() takes exactly 2 arguments (3 given)
24
clwen

コメントする評判はありませんが、このリンクをscikitの学習でのMSEのネガティブな出力が議論されているあなたや通行人に提供したいと思います- https://github.com/scikit-learn/ scikit-learn/issues/2439

さらに、これを本当の答えにするために、あなたの最初のオプションは正しいです.MSEはモデルを比較するために使用したいメトリックであるだけでなく、クロスヴァルのタイプに応じて(私は思う)R ^ 2を計算できません使用しています。

MSEをスコアラーとして選択した場合、エラーのリストが出力され、次のように平均をとることができます。

# Doing linear regression with leave one out cross val

from sklearn import cross_validation, linear_model
import numpy as np

# Including this to remind you that it is necessary to use numpy arrays rather 
# than lists otherwise you will get an error
X_digits = np.array(x)
Y_digits = np.array(y)

loo = cross_validation.LeaveOneOut(len(Y_digits))

regr = linear_model.LinearRegression()

scores = cross_validation.cross_val_score(regr, X_digits, Y_digits, scoring='mean_squared_error', cv=loo,)

# This will print the mean of the list of errors that were output and 
# provide your metric for evaluation
print scores.mean()
35
Sirrah

最初のものは正しいです。常にスコアを最大化しようとするため、MSEのネガを出力します。ドキュメントの改善を提案してください。

9
Andreas Mueller