2017-08-23 140 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