stratifiedkfold sklearn scikit learn example cross_val_score cross accuracy accuracies python pandas scikit-learn

python - sklearn - Scikit-learn cross val score: demasiados índices para la matriz



stratifiedkfold (5)

Tengo el siguiente código

from sklearn.ensemble import ExtraTreesClassifier from sklearn.cross_validation import cross_val_score #split the dataset for train and test combnum[''is_train''] = np.random.uniform(0, 1, len(combnum)) <= .75 train, test = combnum[combnum[''is_train'']==True], combnum[combnum[''is_train'']==False] et = ExtraTreesClassifier(n_estimators=200, max_depth=None, min_samples_split=10, random_state=0) min_samples_split=10, random_state=0 ) labels = train[list(label_columns)].values tlabels = test[list(label_columns)].values features = train[list(columns)].values tfeatures = test[list(columns)].values et_score = cross_val_score(et, features, labels, n_jobs=-1) print("{0} -> ET: {1})".format(label_columns, et_score))

Comprobando la forma de las matrices:

features.shape Out[19]:(43069, 34)

Y

labels.shape Out[20]:(43069, 1)

y estoy recibiendo:

IndexError: too many indices for array

y esta parte relevante del rastreo:

---> 22 et_score = cross_val_score(et, features, labels, n_jobs=-1)

Estoy creando los datos de los marcos de datos de Pandas y busqué aquí y vi algunas referencias a posibles errores a través de este método, pero ¿no puedo averiguar cómo corregirlos? Cómo se ven las matrices de datos: características

Out[21]: array([[ 0., 1., 1., ..., 0., 0., 1.], [ 0., 1., 1., ..., 0., 0., 1.], [ 1., 1., 1., ..., 0., 0., 1.], ..., [ 0., 0., 1., ..., 0., 0., 1.], [ 0., 0., 1., ..., 0., 0., 1.], [ 0., 0., 1., ..., 0., 0., 1.]])

etiquetas

Out[22]: array([[1], [1], [1], ..., [1], [1], [1]])


Agregar .ravel() a la variable Y / Labels que se pasa a la fórmula también ayudó a resolver este problema dentro de KNN.


Cuando hacemos una validación cruzada en scikit-learn, el proceso requiere una etiqueta de forma (R,) lugar de (R,1) . Aunque en cierta medida son lo mismo, sus mecanismos de indexación son diferentes. Así que en tu caso, solo agrega:

c, r = labels.shape labels = labels.reshape(c,)

Antes de pasarlo a la función de validación cruzada.


Parece que se puede arreglar si especifica las etiquetas de destino como una sola columna de datos de Pandas. Si el objetivo tiene varias columnas, obtengo un error similar. Por ejemplo prueba:

labels = train[''Y'']


Puede que necesites jugar un poco con las dimensiones, por ejemplo,

et_score = cross_val_score(et, features, labels, n_jobs=-1)[:,n]

o

et_score = cross_val_score(et, features, labels, n_jobs=-1)[n,:]

siendo n la dimensión.


intentar objetivo:

y=df[''Survived'']

en su lugar, utilicé

y=df[[''Survived'']]

lo que hizo que el objetivo fuera de la fecha, parece que la serie estaría bien