Scikit-learn cross val score: слишком много индексов для массива

У меня есть следующий код

 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))

Проверка формы массивов:

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

и

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

и я получаю:

IndexError: too many indices for array

и эта важная часть трассировки:

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

Я создаю данные из Pandas dataframes, и я искал здесь и видел некоторую ссылку на возможные ошибки с помощью этого метода, но не могу понять, как исправить? Как выглядят массивы данных: функции

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.]])

наклейки

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

Ответы

Ответ 1

Когда мы переходим к проверке в scikit-learn, для процесса требуется (R,) метка формы вместо (R,1). Хотя они в какой-то степени одно и то же, их механизмы индексирования различны. Поэтому в вашем случае просто добавьте:

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

прежде чем передать его функции перекрестной проверки.

Ответ 2

Кажется, он исправляется, если вы указываете целевые метки как один столбец данных из Pandas. Если цель имеет несколько столбцов, я получаю аналогичную ошибку. Например, попробуйте:

labels = train['Y']

Ответ 3

Добавление .ravel() к переменной Y/Labels, переданной в формулу, помогло решить эту проблему и в KNN.

Ответ 4

попробуйте цель:

y=df['Survived'] 

вместо этого я использовал

y=df[['Survived']] 

который сделал цель y датой, кажется, что серия будет нормально