Zoeken…


Kruisvalidatie

Het leren van de parameters van een voorspellingsfunctie en het testen op dezelfde gegevens is een methodologische fout: een model dat alleen de labels van de monsters herhaalt die het net heeft gezien, zou een perfecte score hebben, maar zou nog niets nuttigs voorspellen- ongeziene gegevens. Deze situatie wordt overfitting genoemd . Om dit te voorkomen, is het gebruikelijk om bij een (begeleid) machine learning-experiment een deel van de beschikbare gegevens als testset X_test, y_test . Merk op dat het woord 'experiment' niet bedoeld is om alleen academisch gebruik aan te duiden, want zelfs in commerciële omgevingen begint machine learning meestal experimenteel.

In scikit-learn kan een willekeurige splitsing in training- en testsets snel worden berekend met de train_test_split helperfunctie. Laten we de irisgegevensset laden zodat deze op een lineaire ondersteuningsvector past:

>>> import numpy as np
>>> from sklearn import cross_validation
>>> from sklearn import datasets
>>> from sklearn import svm

>>> iris = datasets.load_iris()
>>> iris.data.shape, iris.target.shape
((150, 4), (150,))

We kunnen nu snel een trainingsset uitproberen terwijl we 40% van de gegevens bewaren om onze classifier te testen (evalueren):

>>> X_train, X_test, y_train, y_test = cross_validation.train_test_split(
...     iris.data, iris.target, test_size=0.4, random_state=0)

>>> X_train.shape, y_train.shape
((90, 4), (90,))
>>> X_test.shape, y_test.shape
((60, 4), (60,))

Nu, nadat we trein- en testsets hebben, laten we het gebruiken:

>>> clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
>>> clf.score(X_test, y_test)   

K-voudige kruisvalidatie

K-voudige kruisvalidatie is een systematisch proces voor het meerdere keren herhalen van de trein / test-splitsingsprocedure, om de variantie te verminderen die gepaard gaat met een enkele proef van trein / test-splitsing. U splitst in wezen de hele gegevensset in K-vouwen van gelijke grootte, en elke vouw wordt één keer gebruikt voor het testen van het model en K-1 keer voor het trainen van het model.

Meerdere vouwtechnieken zijn beschikbaar met de scikit-bibliotheek. Het gebruik ervan is afhankelijk van de kenmerken van de invoergegevens. Enkele voorbeelden zijn

K-vouw

U splitst in wezen de gehele dataset in K-vouwen van gelijke grootte, en elke vouw wordt één keer gebruikt voor het testen van het model en K-1 keer voor het trainen van het model.

from sklearn.model_selection import KFold
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 1, 2])
cv = KFold(n_splits=3, random_state=0)

for train_index, test_index in cv.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)

TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1 3] TEST: [2]
TRAIN: [0 1 2] TEST: [3]

StratifiedKFold is een variatie van k-vouw die gestratificeerde vouwen teruggeeft: elke set bevat ongeveer hetzelfde percentage monsters van elke doelklasse als de complete set

ShuffleSplit

Wordt gebruikt om een door de gebruiker gedefinieerd aantal onafhankelijke trein / test-datasetsplitsingen te genereren. Monsters worden eerst geschud en vervolgens opgedeeld in een paar trein- en testsets.

from sklearn.model_selection import ShuffleSplit
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 1, 2])
cv = ShuffleSplit(n_splits=3, test_size=.25, random_state=0)

for train_index, test_index in cv.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)

TRAIN: [3 1 0] TEST: [2]
TRAIN: [2 1 3] TEST: [0]
TRAIN: [0 2 1] TEST: [3]

StratifiedShuffleSplit is een variant van ShuffleSplit, die gestratificeerde splits retourneert, dat wil zeggen die splits creëert door voor elke doelklasse hetzelfde percentage te behouden als in de complete set.

Andere vouwtechnieken zoals Leave One / p Out en TimeSeriesSplit (een variatie van K-vouw) zijn beschikbaar in de scikit model_selection library.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow