2017-07-06 83 views
0

当我执行命令:Python的 - 与scikit错误学习随机森林约值格式

clf.fit(train_data, train_label) 

我获得以下错误

ValueError: Input contains NaN, infinity or a value too large for dtype('float32').

的问题是阵列train_data大小为( 18000,20)。我试图用这个命令:

clf.fit(np.float32(train_data), train_label) 

train_data = np.array([s[0].astype('float32') for s in train_data]) 

查找下面的链接火车文件(Python)的数据集train_data和train_label:

https://www.dropbox.com/s/b3017gi18x6x325/train?dl=0

但是,我无法得到数组“train_data”中的所有值对clf.fit函数有效。任何帮助?

+0

这应该是因为你有一个错误的值在矩阵中的一个条目(NaN或无穷)......也就是说,你的矩阵是单数,或者你从一开始就在'train_data'上有错误。如果你使用其他的train_data,它不会提示它应该没问题。你的'train_data'看起来怎么样? – DarkCygnus

+0

你能上传train_data和train_label吗?也许你在train_data中有任何字符串或NaN? – sera

+0

请@sera找到添加链接中的数据集。谢谢 –

回答

1

只是找到了一个解决方案来克服这个错误。您需要缩放数据:

代码:

from sklearn.ensemble import RandomForestClassifier 
import pickle 
import numpy as np 
from sklearn.preprocessing import scale 

with open('train', 'rb') as f: 
    train_data, train_label = pickle.load(f) 

#some diagnostic to see if there are NaNs. No NaN were found ! 
print(np.isnan(train_data)) 
print(np.where(np.isnan(train_data))) 
print(np.nan_to_num(train_data)) 
print(np.isnan(train_label)) 
print(np.where(np.isnan(train_label))) 

#so need to scale 
train_data = scale(train_data) 

clf = RandomForestClassifier() 
clf.fit(train_data, train_label) 
+0

谢谢@sera,它的工作。但是,由于我正在分割交叉验证的数据集,因此一个特定的数据集不起作用。你能检查它吗?再次感谢。 https://www.dropbox.com/s/r1hl5zs0chkthc6/train?dl=0(链接选中) –

+0

@Ruser是我会检查它!你使用什么简历?离开一个吗? K褶? – sera

+0

在File中找到整个@sera脚本,在“data”中找到新的数据集。 https://www.dropbox.com/sh/0mp5ovtxtkjhfsj/AABtphHxHKIDCpsE48Q0-Hufa?dl=0 –