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 датой, кажется, что серия будет нормально