Ich versuche, meinen Kopf im Beispiel von verschachtelten und nicht Nestnestnern in Sklearn zu arbeiten. Ich habe mehrere Antworten überprüft, aber ich bin immer noch verwirrt mit dem Beispiel. Aus einem Datensatz X erstellt der
äußere 10-faltes CV (für den Einfachheit halber n = 10) 10 Trainingssätze und 10 Testsätze:
Dann ist das
innere 10-CV-Aufteils
Jedes äußeres Training in 10 Training und 10 Testsätze:
Code: Select all
From Tr0: (Tr0_0,Te_0_0), ... , (Tr0_9,Te0_9)
From Tr9: (Tr9_0,Te_9_0), ... , (Tr9_9,Te9_9)
Jetzt finden wir mit dem inneren Lebenslauf die besten Werte von c für jeden einzelnen äußeren Trainingssatz. Dies geschieht durch Testen aller möglichen Werte von c mit dem inneren Lebenslauf. Der Wert, der die höchste Leistung (z. B. Genauigkeit) liefert, wird für diesen speziellen äußeren Trainingssatz ausgewählt. Nachdem wir die besten c -Werte für jeden äußeren Trainingssatz entdeckt haben, können wir eine unvoreingenommene Genauigkeit unter Verwendung der äußeren Testsätze berechnen. Bei diesem Verfahren werden die Proben, die verwendet werden, um den besten Parameter (d. H. c ) zu identifizieren, nicht zur Berechnung der Leistung des Klassifikators. Daher haben wir eine völlig unvoreingenommene Validierung.inner_cv = KFold(n_splits=4, shuffle=True, random_state=i)
outer_cv = KFold(n_splits=4, shuffle=True, random_state=i)
# Non_nested parameter search and scoring
clf = GridSearchCV(estimator=svm, param_grid=p_grid, cv=inner_cv)
clf.fit(X_iris, y_iris)
non_nested_scores
= clf.best_score_
# Nested CV with parameter optimization
nested_score = cross_val_score(clf, X=X_iris, y=y_iris, cv=outer_cv)
nested_scores = nested_score.mean()
< /code>
Nach dem, was ich verstehe, berechnet der Code einfach die Bewertungen mit zwei verschiedenen Kreuzvalidationen (d. H. Verschiedene Spaltungen in das Training und den Testsatz). Beide verwendeten den gesamten Datensatz. Das gridcv identifiziert die besten Parameter mit einem (der beiden CVs), dann berechnet cross_val_score mit dem zweiten Lebenslauf die Leistung, wenn die besten Parameter verwendet werden. Was fehlt ich im Beispiel?