2013-12-21 4 views
7

첫 번째 차원 (700,1000)이 0, 1, 2, 3, 4 및 10 값으로 채워지는 두 개의 numpy 배열, X_train 및 Y_train이 있습니다. 두 번째 차원 (700,)은 'Fresh'또는 'rotten'값으로 채워집니다. 왜냐하면 Rotten Tomatoes의 API를 사용하기 때문입니다. 내가 실행 어떤 이유를 들어 :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 적합은 알 수없는 레이블 오류를주지 않습니다. 왜 이런 일이 일어나고 있는지에 대한 아이디어가 있습니까?

또한 X_train, Y_train의 고유 값을 numpy.unique로 확인했는데 이상하거나 잘못 입력 된 라벨이있는 것 같지 않습니다. 모두 '신선하거나'썩었습니다.

X_train 및 Y_train를 생성하는 내 코드 :

'비판'은 CSV 파일 ( https://www.dropbox.com/s/0lu5oujfm483wtr/critics.csv)에서 가져온 팬더 dataframe이며, 누락 된 데이터의 정리
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 

:

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

답변

14

문제는 y의 dtype 인 것 같습니다. 그것이 문자열이었던 것을 알아낼 수 있었던 numpy didnt와 같아 보인다. 그래서 그것은 일반적인 객체로 설정되었습니다. 당신이 바꿀 경우 :
Y = np.asarray(critics['fresh']) to Y = np.asarray(critics['fresh'], dtype="|S6") 나는 그것이 효과가 있다고 생각한다.

+0

아, 이제 완벽하게 작동합니다! 좋은 도움에 감사드립니다. – covariance

0

나는 또한 동일한 문제에 직면했다. Numpy가 배열의 데이터 유형을 감지하지 못하는 경우가 있습니다. 그래서 우리는 명시 적으로 그것을 제공합니다. here is the documentation 모든 유형의 numpy 기준. 요구 사항에 따라 데이터 유형을 선택하고 "dtype ="속성으로 제공하십시오.