2013-12-21 3 views
7

У меня есть два массива numpy, X_train и Y_train, где первый из измерений (700,1000) заполняется значениями 0, 1, 2, 3, 4 и 10. второй из измерений (700,) заполняется значениями «свежими» или «гнилыми», так как я работаю с API Rotten Tomatoes. По какой-то причине, когда я выполнить:Ошибка MultinomialNB: «Неизвестный тип метки»

nb = MultinomialNB() 
nb.fit(X_train, Y_train) 

я получаю:

ValueError: Unknown label type 

Я пытался строить меньшую пару массивов:

print xs, '\n', ys 

дает

[[0 0 0 0 1] 
[1 0 0 2 5] 
[3 2 5 5 0] 
[3 2 0 0 1] 
[1 5 1 0 0]] 

['rotten' 'fresh' 'fresh' 'rotten' 'fresh'] 

и многочленная привязка NB не дает ошибки Unknown Label. Любые идеи о том, почему это происходит?

Я также проверил уникальные значения в X_train, Y_train с numpy.unique, и не похоже, что есть какие-то странные или ошибочные ярлыки - все это «свежо» или «гнилое».

Мой код для генерации X_train и Y_train:

def make_xy(critics, vectorizer=None): 
    stext = critics['quote'].tolist() # need to have a list 
    if vectorizer == None: 
     vectorizer = CountVectorizer(min_df=0) 
    vectorizer.fit(stext) 
    X = vectorizer.transform(stext).toarray() # this is X 
    Y = np.asarray(critics['fresh']) 
    return X[0:1000,0:1000], Y[0:1000] # this is X_train, Y_train 

где 'критики' является панды dataframe импортированы из CSV-файла (https://www.dropbox.com/s/0lu5oujfm483wtr/critics.csv) и очищены от любых недостающих данных:

critics = pd.read_csv('critics.csv') 
critics = critics[~critics.quote.isnull()] 
critics = critics[critics.fresh != 'none'] 
critics = critics[critics.quote.str.len() > 0] 

ответ

14

Кажется, что проблемы - это dtype of y. похоже, что numpy did not удалось выяснить, что это была строка. поэтому он был установлен на общий объект. Если вы измените:
Y = np.asarray(critics['fresh']) до Y = np.asarray(critics['fresh'], dtype="|S6") Я думаю, он должен работать.

+0

А, отлично работает сейчас! Спасибо за вашу хорошую помощь. – covariance

0

У меня также была та же проблема. Нередко иногда не удается определить тип данных массива. Итак, мы даем это явно. here is the documentation всех типов по numpy. Выберите тип данных в соответствии с вашим требованием и укажите его как атрибут «dtype =».

Смежные вопросы