2016-04-14 27 views
0

私はPythonとSKLearnにはかなり新しいです。私は単純な分類子を作ろうとしていますが、私は問題に遭遇しています。私はいくつかのチュートリアルに従っていますが、.fitメソッドを使用しようとするとエラーが発生しています。私はこのコンセプトに慣れていないし、ドキュメンテーションを試しましたが、理解するのが難しいと感じたことがあります。PythonクラシファイアSklearn

エラーの背後にある私の考えは、私はすべての欠損値またはNaN値を変えたが、エラーがまだ

コード

def main(): 
setup_files() 

imputer = Imputer() 

#the training data minus id and type: 
t_num_data = load_csv(training_set_file_path, range(1, 17)) 
t_num_data_imputed = imputer.fit_transform(t_num_data) 
print(t_num_data_imputed) 

#the training type column 
t_type_col = load_csv(training_set_file_path, 17, dtype=np.dtype((str, 5))) 
#the query data minus id and type: 
q_data = load_csv(queries_file_path, range(1, 17)) 
#the query id column 
q_id = load_csv(queries_file_path, 0, dtype=np.dtype((str, 10))) 


#fit data above to DTC and predict import 
model = tree.DecisionTreeClassifier(criterion='entropy') 
model.fit_transform(t_num_data, t_type_col) 
predictions = model.predict(q_data) 


#output the predictions: 
with open(solutions_file_path, 'w') as f: 
    for i in range(len(predictions)): 
     f.write("{},{}\n".format(q_id[i], predictions[i])) 


#fit data above to DTC and predict import 
model = tree.DecisionTreeClassifier(criterion='entropy') 
model.fit(t_num_data, t_type_col) 
predictions = model.predict(q_data) 


#output the predictions: 
with open(solutions_file_path, 'w') as f: 
    for i in range(len(predictions)): 
     f.write("{},{}\n".format(q_id[i], predictions[i])) 
を生じているような値は、DTYPEの範囲外であるということです

エラー

Traceback (most recent call last): 
    File "/Users/Rory/Desktop/classifier.py", line 71, in <module> 
main() 
    File "/Users/Rory/Desktop/classifier.py", line 60, in main 
model.fit_transform(t_num_data, t_type_col) 
    File "/Users/Rory/anaconda/lib/python2.7/site-packages/sklearn/base.py", line 458, in fit_transform 
return self.fit(X, y, **fit_params).transform(X) 
    File "/Users/Rory/anaconda/lib/python2.7/site-packages/sklearn/tree/tree.py", line 154, in fit 
    X = check_array(X, dtype=DTYPE, accept_sparse="csc") 
    File "/Users/Rory/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py", line 398, in check_array 
_assert_all_finite(array) 
    File "/Users/Rory/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py", line 54, in _assert_all_finite 
" or a value too large for %r." % X.dtype) 
ValueError: Input contains NaN, infinity or a value too large for dtype('float32'). 
+0

エラーはそれをすべて言います。あなたの 't_num_data'は、infまたはnan値を持ちます。最小/最大 –

+0

を印刷してみてください。これに簡単な修正があるのですか、それともデータそのものですか? – JJSmith

+0

@マリエンゴ私が最大と最小を印刷するときに両方ともナノが得られます – JJSmith

答えて

1

問題は、あなたのNaN値です。 NaNを見積もる方法はたくさんあります。あなたは試みることができる:

0ですべての欠損値を記入します、そして、あなたの分類器が動作しますが、非常に正確ではないかもしれません
t_num_data.fillna(0) 

。さらに、平均を取る方法、最近傍点に基づく評価などがありますが、今のところあなたのコードを作業する必要があります。

関連する問題