2017-02-16 13 views
2

Я использую банковские данные для прогнозирования количества билетов на ежедневной основе. Я использую укладку, чтобы получить более точный результат и используя библиотеку brew.python - Stacked Классификатор: IndexError при подгонке данных

Вот пример набора данных для важных функций:

[enter image description here] Вот пример целевого атрибута:

[enter image description here]

Вот код:

from stacked_generalization.lib.stacking import StackedClassifier 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.linear_model import LogisticRegression, RidgeClassifier 
# Stage 1 model 
bclf = LogisticRegression(random_state=1) 

# Stage 0 models 
clfs = [RandomForestClassifier(n_estimators=40, criterion = 'gini', random_state=1), 
     gbm, 
     RidgeClassifier(random_state=1)] 

sl = StackedClassifier(bclf, clfs) 
sl.fit(training.select_columns(features).to_dataframe().as_matrix(), np.array(training['class'])) 

Вот формат данных обучения:

[[ 21 11 2014 46 4 3] 
[ 22 11 2014 46 5 4] 
[ 24 11 2014 47 0 4] 
..., 
[ 30 9 2016 39 4 5] 
[ 3 10 2016 40 0 1] 
[ 4 10 2016 40 1 1]] 

Теперь, когда я пытаюсь подобрать модель, это дает следующее сообщение об ошибке: enter image description here

Однако я сравнил мой код с примером, приведенным в библиотеке, но до сих пор не мог понять, куда я Я ошибаюсь. Пожалуйста, помогите мне.

+0

Что такое формат учебного объекта? – Prophecies

+0

обновил мой ответ, сначала он был в sframe, затем я преобразовал его в numpy nd array – user1584253

+0

Ошибка в индексировании массива. 'c.classes_' - это вложенный список или список чего-то другого, кроме целых или булевых. Являются ли они нитками? – Benjamin

ответ

1

У меня была подобная проблема, и, похоже, это просто ошибка, которая должна быть исправлена. Проблема в том, что c.classes_ (или количество классов) возвращает массив numpy с поплавками (например, если у вас есть два класса, он возвращает [0.0, 1.0] вместо целых чисел ([0,1]). использовать эти поплавки индексировать столбцы, но вы не можете индексировать Numpy колонки с поплавками

probas.shape = # строки = примеры # обучения;. # столбцы = # классов

c.predict_proba(X) возвращает probabilites для каждого класса для каждый учебный пример.

probas[:, list(c.classes_)] = c.predict_proba(X) 

Если поставить вероятность для каждого класса для каждой строки в X в probas используя класс # индексировать со осени.

Это будет работать, если вы добавите astype (INT)

probas[:, list(et.classes_.astype(int))] = et.predict_proba(X)

или просто

probas = np.copy(et.predict_proba(X))