fem:
Quiero realizar recursive feature elimination with cross validation (rfecv)
en 10 veces la validación cruzada (es decir, cross_val_predict
o cross_validate
) en sklearn.
Dado que rfecv
en sí tiene una parte de la validación cruzada en su nombre, no me queda claro cómo hacerlo. Mi código actual es la siguiente.
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state = 0, class_weight="balanced")
k_fold = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
rfecv = RFECV(estimator=clf, step=1, cv=k_fold)
Por favor, hágamelo saber cómo puedo usar los datos X
y y
con rfecv
en 10-fold cross validation
.
Estoy feliz de proporcionar más detalles si es necesario.
desertnaut:
Para utilizar en función de eliminación recursiva en conjunto con un pre-definido k_fold
, se debe utilizar RFE
y no RFECV
:
from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import accuracy_score
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
k_fold = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
clf = RandomForestClassifier(random_state = 0, class_weight="balanced")
selector = RFE(clf, 5, step=1)
cv_acc = []
for train_index, val_index in k_fold.split(X, y):
selector.fit(X[train_index], y[train_index])
pred = selector.predict(X[val_index])
acc = accuracy_score(y[val_index], pred)
cv_acc.append(acc)
cv_acc
# result:
[1.0,
0.9333333333333333,
0.9333333333333333,
1.0,
0.9333333333333333,
0.9333333333333333,
0.8666666666666667,
1.0,
0.8666666666666667,
0.9333333333333333]