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