2017-10-05 7 views
0

Je travaille sur des données déséquilibrées, en utilisant le sous-échantillonnage, j'ai fait les deux classes dans la même proportion.Pourquoi une erreur est-elle générée lors de l'ajustement de n_estimators pour RandomForestClassifier à l'aide de cross_val_score?

X_undersample dataframe (984,28) 
y_undersample dataframe(984,1) 

J'utilise classificateur forêt d'arbres décisionnels, afin de trouver le meilleur paramètre n_estimators J'utilise la validation croisée. voici le code ci-dessous.

j_shout=range(1,300) 
j_acc=[] 
for j in j_shout: 
    lr = RandomForestClassifier(n_estimators = j, criterion = 'entropy', random_state = 0) 
    score=cross_val_score(lr,X_undersample,y_undersample,cv=10,scoring='accuracy') 
    print ('iteration',j,':cross_validation accuracy=',score) 
    j_acc.append(score.mean()) 

Maintenant, lorsque j'exécute ceci, j'obtiens l'erreur suivante.

File "<ipython-input-43-954a9717dcea>", line 5, in <module> 
    score=cross_val_score(lr,X_undersample,y_undersample,cv=10,scoring='accuracy') 

    File "D:\installations\AC\lib\site-packages\sklearn\cross_validation.py", line 1562, in cross_val_score 
    cv = check_cv(cv, X, y, classifier=is_classifier(estimator)) 

    File "D:\installations\AC\lib\site-packages\sklearn\cross_validation.py", line 1823, in check_cv 
    cv = StratifiedKFold(y, cv) 

    File "D:\installations\AC\lib\site-packages\sklearn\cross_validation.py", line 569, in __init__ 
    label_test_folds = test_folds[y == label] 

IndexError: too many indices for array 

J'essaie de changer le n_estimators à des valeurs plus petites mais montrant toujours la même erreur

Répondre

1

Selon votre retraçage et scikit-learn documentation de StratifiedKFold iterator il semble que StratifiedKFold y obtenir sous forme de tableau aplati. Dans votre cas, vous passez une trame de données avec la taille (984, 1). Votre partie de code devrait être comme ceci:

score=cross_val_score(estimator=lr, 
         X=X_undersample.values, 
         y=y_undersample.values.ravel(), 
         cv=10, 
         scoring='accuracy') 
+0

wow merci beaucoup cela a fonctionné – danishxr