Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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 什么';在scikit中使用稀疏矩阵的正确方法是什么?_Python_Scikit Learn_Sparse Matrix_Logistic Regression - Fatal编程技术网

Python 什么';在scikit中使用稀疏矩阵的正确方法是什么?

Python 什么';在scikit中使用稀疏矩阵的正确方法是什么?,python,scikit-learn,sparse-matrix,logistic-regression,Python,Scikit Learn,Sparse Matrix,Logistic Regression,我试图使用稀疏矩阵来完成分类任务。当我将训练集传递给scikit中的逻辑回归函数时,它返回以下错误: ValueError: Array contains NaN or infinity. 我作为参数传递给逻辑回归的矩阵类型是scipy.sparse.csr.csr\u矩阵 这就是我如何从带有NAN的numpy数组创建稀疏矩阵的方法: X=sparse.csr_matrix(X_hat) 我做错了什么?我在train\u test\u split中得到了相同的错误,根据文档,这些函数应该接受

我试图使用稀疏矩阵来完成分类任务。当我将训练集传递给scikit中的逻辑回归函数时,它返回以下错误:

ValueError: Array contains NaN or infinity.
我作为参数传递给逻辑回归的矩阵类型是
scipy.sparse.csr.csr\u矩阵

这就是我如何从带有NAN的numpy数组创建稀疏矩阵的方法:

X=sparse.csr_matrix(X_hat)
我做错了什么?我在
train\u test\u split
中得到了相同的错误,根据文档,这些函数应该接受稀疏矩阵作为参数

我使用的是scikit learn的0.14版

更新: 这是完整的回溯

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-65-acdaac419166> in <module>()
      1 
----> 2 model2.fit(X_train, y_train)

C:\Anaconda\lib\site-packages\sklearn\svm\base.pyc in fit(self, X, y)
    666                              " one.")
    667 
--> 668         X = atleast2d_or_csr(X, dtype=np.float64, order="C")
    669 
    670         self.class_weight_ = compute_class_weight(self.class_weight,

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in atleast2d_or_csr(X, dtype, order, copy, force_all_finite)
    132     """
    133     return _atleast2d_or_sparse(X, dtype, order, copy, sparse.csr_matrix,
--> 134                                 "tocsr", force_all_finite)
    135 
    136 

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in _atleast2d_or_sparse(X, dtype, order, copy, sparse_class, convmethod, force_all_finite)
    105             X = sparse_class(X, dtype=dtype)
    106         if force_all_finite:
--> 107             _assert_all_finite(X.data)
    108         X.data = np.array(X.data, copy=False, order=order)
    109     else:

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in _assert_all_finite(X)
     25     if (X.dtype.char in np.typecodes['AllFloat'] and not np.isfinite(X.sum())
     26             and not np.isfinite(X).all()):
---> 27         raise ValueError("Array contains NaN or infinity.")
     28 
     29 

ValueError: Array contains NaN or infinity.
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
1.
---->2型号2.装配(X_系列、y_系列)
C:\Anaconda\lib\site packages\sklearn\svm\base.pyc in fit(self,X,y)
666“一”
667
-->668 X=至少2d\u或\u csr(X,dtype=np.float64,order=“C”)
669
670自重=计算自重(自重,
C:\Anaconda\lib\site packages\sklearn\utils\validation.pyc至少在2d\u或\u csr中(X、dtype、order、copy、force\u all\u finite)
132     """
133返回_至少2d_或_稀疏(X,dtype,order,copy,sparse.csr_矩阵,
-->134“tocsr”,力(所有有限)
135
136
C:\Anaconda\lib\site packages\sklearn\utils\validation.pyc在_-atleast2d\u或_-sparse中(X,dtype,order,copy,sparse\u类,convmethod,force\u all\u-finite)
105 X=稀疏类(X,dtype=dtype)
106如果力是有限的:
-->107(X.data)断言(X.data)
108 X.data=np.array(X.data,copy=False,order=order)
109其他:
C:\Anaconda\lib\site packages\sklearn\utils\validation.pyc in\u assert\u all\u finite(X)
25如果(np.typecode['AllFloat']中的X.dtype.char而不是np.isfinite(X.sum())
26而不是np.isfinite(X.all()):
--->27 raise VALUERROR(“数组包含NaN或无穷大”)
28
29
ValueError:数组包含NaN或无穷大。

诀窍是不要使用
nan
s作为数据或占位符…你可以看到
X_hat=numpy.nan_to_num(X_hat)
是否适用于你的目的。如果不适用,你将不得不进行积极的工作,以适当的其他方式替换nan。我不明白的是为什么逻辑回归(以及PCA和其他功能)如果在文档中指定了稀疏矩阵,则不适用于稀疏矩阵。不适用于稀疏矩阵是因为您的数据包含
nan
s,而不是因为矩阵稀疏,请参见
ValueError
消息。确切地说,将其替换为您的真实数值(反映良好:))选择。稀疏矩阵只是一个大多数值为0的矩阵,并且只有非零值存储在内存中。对于NaN:scikit学习中的任何算法(除了用于删除缺失值的插补器)都不能以有意义的方式处理NaN。这就是它们产生错误的原因。