Neden geniş bir K seçeneği çapraz doğrulama puanımı düşürüyor?


11

İle oynamak Boston Konut Verisetinin ve RandomForestRegressor(w / varsayılan parametreleri) Garip bir şey fark, scikit-öğrenme: ortalama çapraz doğrulama puanı azaldı My çapraz doğrulama stratejisi olarak oldu şu 10 öteye kıvrımları sayısını artırdı olarak:

cv_met = ShuffleSplit(n_splits=k, test_size=1/k)
scores = cross_val_score(est, X, y, cv=cv_met)

... neredeydi num_cvs. Ben set test_sizeiçin 1/num_cvsk kat CV tren / test bölünmüş boyutu davranışını yansıtmak için. Temel olarak, k-kat CV gibi bir şey istedim, ama aynı zamanda rasgeleliğe ihtiyacım vardı (bu nedenle ShuffleSplit).

Bu deneme birkaç kez tekrarlandı ve daha sonra ortalama puanlar ve standart sapmalar çizildi.

K-kat çapraz doğrulamasında ~ K dairesi alanı

(Boyutunun kdairenin alanı ile belirtildiğine dikkat edin; standart sapma Y eksenindedir.)

Tutarlı bir şekilde, k(2'den 44'e) artış, skorda kısa bir artış ve ardından kdaha da arttıkça (~ 10 katın ötesinde) sürekli bir düşüş sağlayacaktır ! Bir şey olursa, daha fazla eğitim verisinin skorda küçük bir artışa yol açmasını beklerim!

Güncelleme

Puanlama ölçütlerini değiştirmek mutlak hata anlamına gelir : beklediğim davranışla sonuçlanır: puanlama, 0'a (varsayılan olarak ' r2 ' gibi) yaklaşmaktansa, K-kat CV'sinde kat sayısının artmasıyla iyileşir . Soru, varsayılan puanlama metriğinin neden artan sayıda katlama için hem ortalama hem de STD metriklerinde düşük performansla sonuçlandığına devam etmektedir .


Kıvrımlarınızda yinelenen kayıtlar var mı? Bunun nedeni aşırı takma olabilir .
ÇIKIŞ - Anony-Mousse

1
@ Anony-Mousse Hayır, Boston Housing veri kümesinin yinelenen kayıtları olmadığından ve ShuffleSplit'in örneklemesi yinelenen kayıtlara neden olmaz.
Brian Bien

4
Ayrıca, çiziminizi geliştirin. Ortalama, + - stddev ve min / maks değerlerini göstermek için hata çubuklarını kullanın. K'yi diğer eksene yerleştirin.
ÇIKIŞ - Anony-Mousse

1
Daha fazla eğitim örneğinin aşırı uyum olasılığını artırdığını düşünmüyorum. Yine ShuffleSplit (n_splits = 300 ile çeşitli test boyutlarında) kullanarak bu veri kümesiyle bir öğrenme eğrisi çizdim ve daha fazla eğitim örneği sunuldukça tutarlı bir şekilde artan doğruluk gördüm.
Brian Bien

1
üzgünüm, haklısın, daha iyi ve en iyisi 1. Ama ortalama kare veya mutlak hata kullanıyorsanız bu sorunla karşılaşmıyorsun. Yani hata terimi ile bir şeyler yapmak zorunda
rep_ho

Yanıtlar:


1

r ^ 2 skoru tek bir numuneye uygulandığında tanımlanmamıştır (örn. bir defalık CV).

r ^ 2 küçük test setlerini değerlendirmek için iyi değildir: yeterince küçük bir test setini değerlendirmek için kullanıldığında, iyi tahminlere rağmen skor negatiflere çok yakın olabilir.

Tek bir örnek verildiğinde, belirli bir alan için iyi bir tahmin korkunç görünebilir:

from sklearn.metrics import r2_score
true = [1]
predicted = [1.01] # prediction of a single value, off by 1%
print(r2_score(true, predicted))
# 0.0

Test setinin boyutunu artırın (tahminlerin doğruluğunu aynı tutarak) ve aniden r ^ 2 skoru neredeyse mükemmel görünür:

true = [1, 2, 3]
predicted = [1.01, 2.02, 3.03]
print(r2_score(true, predicted))
# 0.9993

Test boyutunun 2 örnek olması ve birbirine yakın olan 2 örneği şans eseri değerlendiriyor olmamız durumunda, diğer uç noktalara bakıldığında, tahminler oldukça iyi olsa bile, r ^ 2 skoru üzerinde önemli bir etkisi olacaktır. :

true = [20.2, 20.1] # actual target values from the Boston Housing dataset
predicted = [19, 21]
print(r2_score(true, predicted))
# -449.0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.