2013-12-21 15 views
7

2つのnumpy配列、X_trainとY_trainがあります。最初の次元(700,1000)に値0,1,2,3,4,10が設定されています。 Rotten TomatoesのAPIで作業しているので、値の2分の1(700、)に値 'fresh'または 'rotten'が設定されています。私は実行し、いくつかの理由について: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)から輸入パンダのデータフレームであり、欠落データのクリーン
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のように見える。そのため、汎用オブジェクトに設定されていました。あなたが変更する場合:
Y = np.asarray(critics['fresh'])Y = np.asarray(critics['fresh'], dtype="|S6")私はそれが動作するはずだと思います。

+0

ああ、今すぐ完璧です!あなたの良い助けをありがとう。 – covariance

0

私も同じ問題に直面しました。 Numpyは配列のデータ型を検出できないことがあります。そこで、明示的に説明します。 here is the documentationすべてのタイプでnumpy。要件に応じてデータ型を選択し、 "dtype ="属性として指定します。

関連する問題