Campionamento stratificato significa che la distribuzione della classe viene preservata. Se si sta cercando questo, è comunque possibile utilizzare StratifiedKFold
e StratifiedShuffleSplit
, purché si disponga di una variabile categoriale per la quale si desidera garantire la presenza della stessa distribuzione in ogni piega. Basta usare la variabile al posto della variabile di destinazione. Per esempio, se si dispone di una variabile categoriale nella colonna i
,
skf = cross_validation.StratifiedKFold(X[:,i])
Tuttavia, se ho capito bene, si desidera ricampionare ad una certa distribuzione di destinazione (ad esempio 50/50) di una delle caratteristiche categoriali. Immagino che dovresti trovare il tuo metodo per ottenere un campione del genere (dividi il set di dati per valore variabile, poi prendi lo stesso numero di campioni casuali da ogni divisione). Se la tua motivazione principale è quella di bilanciare il set di allenamento per un classificatore, un trucco potrebbe essere quello di regolare il sample_weights
. È possibile impostare i pesi in modo da bilanciare l'insieme di addestramento in base alla variabile desiderata:
sample_weights = sklearn.preprocessing.balance_weights(X[:,i])
clf = svm.SVC()
clf_weights.fit(X, y, sample_weight=sample_weights)
Per una distribuzione target non uniforme, si dovrà regolare i sample_weights conseguenza.
fonte
2015-08-22 15:42:33
[StratifiedKFold] (http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.StratifiedKFold.html) – EdChum
nonché [StratifiedShuffleSplit] (http: // scikit-learn. org/stabile/moduli/generata/sklearn.cross_validation.StratifiedShuffleSplit.html) – lanenok