2014-02-15 170 views
0

我有一個腳本,一年前成功運行,不再運行。我用熊貓的數據處理成這樣:SCIKIT學習多類錯誤

df_train

dtu_docid         dtu_topic_split   y_train 
0 2012-1553   [Energy Taxation, State & Local Taxation]   [3, 23] 
2 2010-0227   [Quantitative Economics and Statistics]   [34] 
3 2010-0215      [International Taxation, Asia]   [0, 19] 

,然後用scikit如下:

classifier = Pipeline([ 
    ('vectorizer', CountVectorizer(stop_words='english', 
            ngram_range=(1,3), 
            max_df = 1.0, 
            min_df = 0.0, 
            analyzer='word')), 
    ('tfidf', TfidfTransformer()), 
    ('clf', OneVsRestClassifier(LinearSVC(verbose=1)))]) 


classifier.fit(df_train.dtu_content, df_train.y_train) 

和現在得到一個錯誤,讓我發瘋了:

ValueError: Expected array-like (array or non-string sequence), got 0 [3, 23] 
2 [34] 
3 [0, 19] 
4 [] 
5 [3] 
8 [8, 27] 
9 [10] 
11 [15] 
12 [0, 7] 
13 [1, 4] 
14 [1, 4, 13] ... (truncated) 
15 [11] ... (truncated) 

大約9個月前,它看起來對multiclass.py模塊有了改進,額外的檢查,但我不知道如何解決。任何人以前見過這個或有想法?

+0

今天早上我一直在研究這個問題,並在github上發現了一些關於可能修復的祕密筆記。熊貓或scikit的最新版本似乎破壞了一些非常重要的東西。恕我直言,這是使用熊貓和scikit的關鍵方面 - 他們曾經一起工作的無縫,簡單和自然的方式。當不合格行爲將被糾正時,是否有解決方法或估計? – david

+0

如何構建'df_train'?請發佈[SSCCE](http://sscce.org)。 –

+0

DF列車是在大熊貓中完成大量數據修改而創建的,有問題的屬性是y_train。 Ytrain是與訓練示例相關的類的列表。因爲這是一個多種情況,每個樣本可以低於一個以上的類別,因此使用該列表。 – david

回答

0

我也碰到過這個。正如你所指出的,multiclass.py有一些保守的驗證:

# XXX: is there a way to duck-type this condition? 
valid = (isinstance(y, (np.ndarray, Sequence, spmatrix)) 
     and not isinstance(y, string_types)) 
if not valid: 
    raise ValueError('Expected array-like (array or non-string sequence), ' 
        'got %r' % y) 

熊貓0.13.0也changed how Series is implemented

警告

在0.13.0系列已internaly被重構不再子類ndarray,而不是子類NDFrame,類似於其餘的熊貓容器。這應該是隻有非常有限的API影響的透明變化(參見內部重構)

Internal Refactoring筆記解釋怎樣做:

直接通過一系列的用Cython功能期待的ndarray類型將沒有長直接工作,你必須通過Series.values

所以你的情況,我建議你試試這個:

classifier.fit(df_train.dtu_content, df_train.y_train.values)