2017-08-23 55 views
0

我有一個CSV文件與線100K與包含在其他斯堪的納維亞的字符無一列文本和我接頭scikit學習分類預測真/假(給定在另一列中)給定一段文字。更改參數scikit學習分類結果的UnicodeDecodeError

我使用這個例子作爲一個起點:http://scikit-learn.org/0.15/auto_examples/grid_search_text_feature_extraction.html

起初我唯一改變的是數據,而培訓+測試進行了有用的結果很好。

不過,我想測試liblinear樣LinearSVC分類,因爲這可能會產生在某些情況下更好的結果。改變什麼,但分類爲「LinearSVC」或可選擇地堅持SGDClassifier作爲例子,但改變了損失函數從默認的鉸鏈結果squared_hinge在

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 312: ordinal not in range(128) 

我假定這錯誤必須從輸入CSV上升,但無法理解爲什麼來自url的初始示例運行平穩,並且使用完全相同的輸入數據更改分類器屬性會導致此錯誤。任何想法,爲什麼這可能是?

其次,我不熟悉Python堆棧跟蹤,並希望瞭解有關如何調試錯誤/跟蹤下來的問題字節任何幫助。堆棧跟蹤如下:

Traceback (most recent call last): 

    File "<ipython-input-33-2a0e420237f0>", line 48, in <module> 
grid_search.fit(data_train.kuvaus, data_train.loukkaantuneita) 

    File "C:\Users\x\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\model_selection\_search.py", line 945, in fit 
return self._fit(X, y, groups, ParameterGrid(self.param_grid)) 

    File "C:\Users\x\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\model_selection\_search.py", line 564, in _fit 
for parameters in parameter_iterable 

    File "C:\Users\x\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\externals\joblib\parallel.py", line 768, in __call__ 
self.retrieve() 

    File "C:\Users\x\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\externals\joblib\parallel.py", line 696, in retrieve 
stack_start=1) 

    File "C:\Users\x\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\externals\joblib\format_stack.py", line 417, in format_outer_frames 
return '\n'.join(format_records(output[stack_end:stack_start:-1])) 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 312: ordinal not in range(128) 

data_train是熊貓數據幀與真/假data_train.loukkaantuneita和自由文本(應該是UTF-8)data_train.kuvaus柱。

+0

然後在這裏發表的堆棧跟蹤。同時發佈你的代碼和一些示例數據如果可能的話] –

+0

@VivekKumar添加堆棧跟蹤。對於代碼,它是相同的如上述的URL例如,當一切順利,並且當我改變「‘clf_loss’:([‘squared_hinge’])」中的參數,這導致到UnicodeError,其中我不不明白,因爲我不會在兩次運行之間以任何方式更改輸入文本。 – rize

+0

使用圓括號或方形,而不是兩者。使用''clf__n_iter':('squared_hinge')'。 –

回答

1

將這個語句@代碼的開頭,並嘗試運行:

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 
+0

感謝您的建議。奇怪的是,我現在不能再現這個錯誤。該錯誤可能與多線程問題有關,如https://github.com/scikit-learn/scikit-learn/issues/5115。我必須只使用單核心計算來進行計算,不會被搞砸,因此UnicodeDecodeError似乎已經消失了。如果它重新出現,我會嘗試你的魔法。謝謝。 – rize