2016-04-14 23 views
0

Python ve SKLearn için oldukça yeni. Basit bir sınıflandırıcı yapmaya çalışıyorum ama bir sorunla karşılaşıyorum. Birkaç farklı öğreticiyi takip ediyorum ama .fit yöntemini kullanmaya çalıştığımda bir hata alıyorum. Konsepte yeniyim ve belgeleri denedim ama anlamakta zorlandığımı, herhangi birisinin bana yardımcı olabileceğini ya da bana doğru yönde işaret edebileceğini buldum.Python Sınıflandırıcı Sklearn

hata arkasında Benim düşünce ben bütün eksik değerleri veya nan değerlerine dönüştürülmüş ama hata yine

Kod

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])) 
doğan gibi değerler d_type için kapsama alanı dışında olmasıdır

Hata

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

Hata herşeyi açıklıyor. 'T_num_data'nız inf veya nan değerlerine sahiptir. Min/max –

+0

'u yazdırmayı deneyin ve bunun için basit bir düzeltme var mı, yoksa veride mi var? – JJSmith

+0

@imaluengo En fazla ve en az yazdırdığımda hem – JJSmith

cevap

1

sorun NaN değerindedir. NaN'leri tahmin etmenin uzun bir yolu vardır.

t_num_data.fillna(0) 

0 ile tüm eksik değerleri dolduracaktır hangi ve sonra sınıflandırıcı çalışacaktır ancak çok doğru olmayabilir: Sen deneyebilirsiniz. En yakın komşulara dayalı tahmini, ortalamaları alan ek yöntemler vardır. Fakat bu, kodunuzun şimdilik çalışmasını sağlamalıdır.

İlgili konular