2017-08-23 8 views
0

スカンジナビア文字を含むフリーテキストの列に100kの行を含むcsvファイルがあり、True/Falseを予測するためのscikit-learnクラシファイアに合っています別の列に表示されます)。scikit-learnクラシファイアのパラメータを変更するとUnicodeDecodeErrorが発生する

私は出発点としてこの例を使用しています:私は最初に変更http://scikit-learn.org/0.15/auto_examples/grid_search_text_feature_extraction.html

唯一のものはデータであり、訓練+テストは有用な結果で罰金行きます。

ただし、liblinearのようなLinearSVCクラシファイアをテストしたい場合があります。その場合、場合によってはより良い結果が得られる可能性があります。 「LinearSVC」に分類器だけを変更していないか、代わりの例のようにSGDClassifierにこだわるが、私は、入力CSVファイルから上昇しなければならないこのエラーを想定しています

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

にデフォルトのヒンジ結果からsquared_hingeする損失関数を変更することなく、なぜURLからの最初の例がスムーズに実行され、全く同じ入力データで分類子のプロパティを変更すると、このエラーが発生するのか理解できません。これがなぜ起こっているのでしょうか?

第2に、私は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とフリーテキストTrue/FalseのとパンダDATAFRAMEあるdata_train.kuvaus列(UTF-8のはず)。

+0

そして、ここでのスタックトレースを投稿してください。可能であれば、あなたのコードといくつかのサンプルデータも投稿してください] –

+0

@VivekKumarスタックトレースを追加しました。コードについては、上記のurlの例と同じですが、すべてがスムーズに実行され、 "clf_loss"(['squared_hinge'])をパラメータで変更すると、UnicodeErrorという結果になります私は2つの実行の間に入力テキストを変更しないので、理解していません。 – 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

関連する問題