Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sci工具包学习SGD Algo时出错-“;数组包含NaN或无穷大“;_Python_Numpy_Machine Learning_Scikit Learn_Nan - Fatal编程技术网

Python Sci工具包学习SGD Algo时出错-“;数组包含NaN或无穷大“;

Python Sci工具包学习SGD Algo时出错-“;数组包含NaN或无穷大“;,python,numpy,machine-learning,scikit-learn,nan,Python,Numpy,Machine Learning,Scikit Learn,Nan,我在声明“数组包含NaN或无穷大”时出错。我已经检查了我的数据(包括训练/测试)是否有缺失值,并且没有缺失任何内容 我可能对“数组包含NaN或无穷大”的含义有错误的解释 我认为数据类型可能会抛出algo循环(它们是浮点) 我知道SGD可以处理浮点,所以我不确定这个设置是否需要我声明数据类型 例如以下情况之一: >>> dt = np.dtype('i4') # 32-bit signed integer >>> dt = np.dtype('f8')

我在声明“数组包含NaN或无穷大”时出错。我已经检查了我的数据(包括训练/测试)是否有缺失值,并且没有缺失任何内容

我可能对“数组包含NaN或无穷大”的含义有错误的解释

我认为数据类型可能会抛出algo循环(它们是浮点)

我知道SGD可以处理浮点,所以我不确定这个设置是否需要我声明数据类型

例如以下情况之一:

>>> dt = np.dtype('i4')   # 32-bit signed integer
>>> dt = np.dtype('f8')   # 64-bit floating-point number
>>> dt = np.dtype('c16')  # 128-bit complex floating-point number
>>> dt = np.dtype('a25')  # 25-character string
np.where(~np.isfinite(dataset))
以下是完整的错误消息:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-62-af5537e7802b> in <module>()
     19
     20 if __name__=="__main__":
---> 21     main()

<ipython-input-62-af5537e7802b> in main()
     13     #create and train the SGD
     14     sgd = linear_model.SGDClassifier()
---> 15     sgd.fit(train, target)
     16     predictions = [x[1] for x in sgd.predict(test)]
     17

C:\Anaconda\lib\site-packages\sklearn\linear_model\stochastic_gradient.pyc in fi
t(self, X, y, coef_init, intercept_init, class_weight, sample_weight)
    518                          coef_init=coef_init, intercept_init=intercept_i
nit,
    519                          class_weight=class_weight,
--> 520                          sample_weight=sample_weight)
    521
    522

C:\Anaconda\lib\site-packages\sklearn\linear_model\stochastic_gradient.pyc in _f
it(self, X, y, alpha, C, loss, learning_rate, coef_init, intercept_init, class_w
eight, sample_weight)
    397             self.class_weight = class_weight
    398
--> 399         X = atleast2d_or_csr(X, dtype=np.float64, order="C")
    400         n_samples, n_features = X.shape
    401

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in atleast2d_or_csr(X
, dtype, order, copy)
    114     """
    115     return _atleast2d_or_sparse(X, dtype, order, copy, sparse.csr_matrix
,
--> 116                                 "tocsr")
    117
    118

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in _atleast2d_or_spar
se(X, dtype, order, copy, sparse_class, convmethod)
     94         _assert_all_finite(X.data)
     95     else:
---> 96         X = array2d(X, dtype=dtype, order=order, copy=copy)
     97         _assert_all_finite(X)
     98     return X

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in array2d(X, dtype,
order, copy)
     79                         'is required. Use X.toarray() to convert to dens
e.')
     80     X_2d = np.asarray(np.atleast_2d(X), dtype=dtype, order=order)
---> 81     _assert_all_finite(X_2d)
     82     if X is X_2d and copy:
     83         X_2d = safe_copy(X_2d)

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in _assert_all_finite
(X)
     16     if (X.dtype.char in np.typecodes['AllFloat'] and not np.isfinite(X.s
um())
     17             and not np.isfinite(X).all()):
---> 18         raise ValueError("Array contains NaN or infinity.")
     19
     20

ValueError: Array contains NaN or infinity.
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
19
20如果名称=“\uuuuu main\uuuuuuuu”:
--->21主要内容()
大体上
13#创建和培训SGD
14 sgd=线性_模型.SGDClassifier()
--->15 sgd.fit(列车、目标)
16预测=[x[1]对于新元中的x。预测(测试)]
17
C:\Anaconda\lib\site packages\sklearn\linear\u model\random\u gradient.pyc在fi中
t(自身、X、y、系数、截距、类别权重、样本权重)
518 coef_init=coef_init,intercept_init=intercept_i
尼特,
519级重量=级重量,
-->520样品重量=样品重量)
521
522
C:\Anaconda\lib\site packages\sklearn\linear\u model\randomic\u gradient.pyc in\u f
它(self,X,y,alpha,C,loss,learning\u rate,coef\u init,intercept\u init,class\u w
八,样品(单位重量)
397自身等级重量=等级重量
398
-->399 X=至少2d或csr(X,dtype=np.float64,order=“C”)
400个n_样本,n_特征=X.shape
401
C:\Anaconda\lib\site packages\sklearn\utils\validation.pyc至少位于2D\U或\U csr(X)中
,数据类型,订单,副本)
114     """
115返回\u至少2d\u或\u稀疏(X,数据类型,顺序,复制,稀疏.csr\u矩阵
,
-->116“tocsr”)
117
118
C:\Anaconda\lib\site packages\sklearn\utils\validation.pyc在\u atleast2d\u或\u spar中
se(X,数据类型,顺序,复制,稀疏类,convmethod)
94(X.data)断言(X.data)
95其他:
--->96 X=array2d(X,dtype=dtype,order=order,copy=copy)
97-断言所有有限(X)
98返回X
array2d中的C:\Anaconda\lib\site packages\sklearn\utils\validation.pyc(X,dtype,
订单(复印件)
79'是必需的。请使用X.toarray()转换为DEN
e、 ")
80 X_2d=np.asarray(np
--->81-断言所有有限(X\u 2d)
82如果X是X_2d并复制:
83 X_2d=安全拷贝(X_2d)
C:\Anaconda\lib\site packages\sklearn\utils\validation.pyc in\u assert\u all\u finite
(十)
16如果(np.typecodes['AllFloat']中的X.dtype.char而非np.isfinite(X.s
嗯()
17而不是np.isfinite(X.all()):
--->18 raise VALUERROR(“数组包含NaN或无穷大”)
19
20
ValueError:数组包含NaN或无穷大。

如果您有任何想法,我们将不胜感激。

由于错误报告,您的数据中的某个位置存在
np.nan
np.inf
-np.inf
。由于您正在读取文本文件,并且您说您的数据不包含缺少的值,这可能是由于列标题或文件中的其他值导致的无法自动解释

genfromtxt
的文档显示,读入数组的默认
dtype
float
,这意味着您读取的所有值都必须通过与
float(x)
等效的值

如果不确定这是否是导致错误的原因,可以按如下方式从numpy数组中删除非有限数:

dataset[ ~np.isfinite(dataset) ] = 0  # Set non-finite (nan, inf, -inf) to zero
如果这消除了错误,则可以确保变量中的某个位置存在无效值。要找到可以使用以下内容的位置:

>>> dt = np.dtype('i4')   # 32-bit signed integer
>>> dt = np.dtype('f8')   # 64-bit floating-point number
>>> dt = np.dtype('c16')  # 128-bit complex floating-point number
>>> dt = np.dtype('a25')  # 25-character string
np.where(~np.isfinite(dataset))
这将返回无效值所在的索引列表,例如

>>> import numpy as np

>>> dataset = np.array([[0,1,1],[np.nan,0,0],[1,2,np.inf]])
>>> dataset
array([[  0.,   1.,   1.],
       [ nan,   0.,   0.],
       [  1.,   2.,  inf]])

>>> np.where(~np.isfinite(dataset))
(array([1, 2]), array([0, 2]))

您是否可以发布错误的完整回溯,并打印dataset.dtype?另外,您有一条评论说您正在“跳过标题行,使用
[1://code>“,但您似乎没有这样做……在我看来,@Dougal对加载标题有一个很好的建议。您可以尝试使用
assert not np.any(np.isnan(dataset)| np.isinf(dataset))
测试您的数据集是否正确加载。您是否尝试了numpy.nan_to_num(ndarray)。据我所知,该函数使nans变为零,使无穷大,(如果您知道在零和非常高的数字上应该得到什么结果,那么这很有用,否则就不是真的了)@lmjohns3:or
np.all(np.isfinite(dataset))
,这就是scikit learn在输入验证中所做的有效操作。如果您只有一个零,您会得到这个错误吗?