天道酬勤,学无止境

ValueError: array must not contain infs or NaNs during Biclustering

I'm trying to model biclustering, but it's failing as it says array contains infs and nans, though I scanned array using pd.isnull(DataFile).sum()

 import pandas as pd
 import numpy as np
 from matplotlib import pyplot as plt
 from sklearn.datasets import samples_generator as sg
 from sklearn.cluster.bicluster import SpectralCoclustering
 from sklearn.metrics import consensus_score
 DataFile=pd.read_csv("DatafilledProp.csv",sep='\t')


 DataFile.drop(DataFile.columns[[0, 1]], axis=1, inplace=True)
 plt.matshow(DataFile.as_matrix(), cmap=plt.cm.Blues)
 plt.title("Original TransMapping")
 data, row_idx, col_idx = sg._shuffle(DataFile.as_matrix(), random_state=0)
 plt.matshow(data, cmap=plt.cm.Blues)
 plt.title("Shuffled dataset")
 plt.show()
 Features=DataFile.values
 model = SpectralCoclustering(n_clusters=10, random_state=0)
 model.fit(Features)

This is the error that I get:

File "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensio
ns\Microsoft\Python Tools for Visual Studio\2.1\visualstudio_py_util.py", line 1 06, in exec_file
exec_code(code, file, global_variables)
       File "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensio
     ns\Microsoft\Python Tools for Visual Studio\2.1\visualstudio_py_util.py", line 8
     2, in exec_code
         exec(code_obj, global_variables)
       File "D:\ClusteringDemo\DataPreparation.py\DataPreparation.py\Model.py", line
     19, in <module>
         model.fit(Features)
       File "C:\Users\vinay.sawant\AppData\Local\Continuum\Anaconda\lib\site-packages
     \sklearn\cluster\bicluster\spectral.py", line 126, in fit
         self._fit(X)
       File "C:\Users\vinay.sawant\AppData\Local\Continuum\Anaconda\lib\site-packages
     \sklearn\cluster\bicluster\spectral.py", line 275, in _fit
         u, v = self._svd(normalized_data, n_sv, n_discard=1)
       File "C:\Users\vinay.sawant\AppData\Local\Continuum\Anaconda\lib\site-packages
     \sklearn\cluster\bicluster\spectral.py", line 139, in _svd
         **kwargs)
       File "C:\Users\vinay.sawant\AppData\Local\Continuum\Anaconda\lib\site-packages
     \sklearn\utils\extmath.py", line 299, in randomized_svd
         Q = randomized_range_finder(M, n_random, n_iter, random_state)
       File "C:\Users\vinay.sawant\AppData\Local\Continuum\Anaconda\lib\site-packages
     \sklearn\utils\extmath.py", line 226, in randomized_range_finder
         Q, R = linalg.qr(Y, mode='economic')
       File "C:\Users\vinay.sawant\AppData\Local\Continuum\Anaconda\lib\site-packages
     \scipy\linalg\decomp_qr.py", line 127, in qr
         a1 = numpy.asarray_chkfinite(a)
       File "C:\Users\vinay.sawant\AppData\Local\Continuum\Anaconda\lib\site-packages
     \numpy\lib\function_base.py", line 613, in asarray_chkfinite
         "array must not contain infs or NaNs")
     ValueError: array must not contain infs or NaNs
     Press any key to continue .

评论

This has been answered here: https://stackoverflow.com/a/42764378/2649309

It could be problem with PCA implementation in scikit-learn 0.18.1.

See a bug report https://github.com/scikit-learn/scikit-learn/issues/7568

Described workaround is to use PCA with svd_solver='full'. So try this code:

pipe = [('pca',PCA(whiten=True,svd_solver='full')),
   ('clf' ,lm)]

I was able to fix my issue with this.

pd.isnull(DataFile).sum() only checks for NaN values, as such:

import pandas as pd

df = pd.DataFrame([[1,2],[3,4],[np.NaN,6]])

df
Out[12]: 
    0  1
0   1  2
1   3  4
2 NaN  6

pd.isnull(df).sum()
Out[13]: 
0    1
1    0
dtype: int64

But it will not check for inf, according to the error it's a possibility.

df3 = pd.DataFrame([[1,2],[3,4],[np.inf,6]])

pd.isnull(df3).sum()
Out[23]: 
0    0
1    0
dtype: int64

Therefore, I suspect the error is an inf rather than NaN.

import numpy as np

np.isinf(df3).sum()
Out[25]: 
0    1
1    0
dtype: int64

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • statsmodel.api.Logit:valueerror 数组不能包含 infs 或 nans(statsmodel.api.Logit: valueerror array must not contain infs or nans)
    问题 我正在尝试使用 statsmodel.api.Logit 在 Python 中应用逻辑回归。 我遇到了错误ValueError: array must not contain infs or NaNs。 当我执行时: data['intercept'] = 1.0 train_cols = data.columns[1:] logit = sm.Logit(data['admit'], data[train_cols]) result = logit.fit(start_params=None, method='bfgs', maxiter=20, full_output=1, disp=1, callback=None) 数据包含超过 15000 列和 2000 行。 其中 data['admit'] 是目标值,而 data[train_cols] 是特征列表。 任何人都可以给我一些提示来解决这个问题吗? 回答1 默认情况下, Logit不会检查您的数据是否存在不可处理的无穷大 ( np.inf ) 或 NaN ( np.nan )。 在熊猫中,后者通常表示缺少条目。 要忽略缺少数据的行并继续其余的行,请使用missing='drop'如下所示: sm.Logit(data['admit'], data[train_cols], missing='drop') 有关其他选项
  • scipy.optimize.curvefit() - 数组不能包含 infs 或 NaNs(scipy.optimize.curvefit() - array must not contain infs or NaNs)
    问题 我正在尝试使用 scipy.optimize.curve_fit 将一些数据拟合到 Python 中的曲线。 我ValueError: array must not contain infs or NaNs了错误ValueError: array must not contain infs or NaNs 。 我不相信我的x或y数据包含 infs 或 NaN: >>> x_array = np.asarray_chkfinite(x_array) >>> y_array = np.asarray_chkfinite(y_array) >>> 要了解我的x_array和y_array在任一端的样子( x_array是计数, y_array是分位数): >>> type(x_array) <type 'numpy.ndarray'> >>> type(y_array) <type 'numpy.ndarray'> >>> x_array[:5] array([0, 0, 0, 0, 0]) >>> x_array[-5:] array([2919, 2965, 3154, 3218, 3461]) >>> y_array[:5] array([ 0.9999582, 0.9999163, 0.9998745, 0.9998326, 0.9997908]) >>> y_array[
  • PCA in Sklearn - ValueError: array must not contain infs or NaNs
    I am trying to use grid search to choose the number of principal components of the data before fitting into a linear regression. I am confused how I can make a dictionary of the number of principal components I want. I put my list into a dictionary format in the param_grid parameter, but I think I did it wrong. So far, I have gotten a warning about my array containing infs or NaNs. I am following the instructions from pipelining a linear regression to PCA: http://scikit-learn.org/stable/auto_examples/plot_digits_pipe.html ValueError: array must not contain infs or NaNs I was able to get the
  • Sklearn 中的 PCA - ValueError:数组不得包含 infs 或 NaN(PCA in Sklearn - ValueError: array must not contain infs or NaNs)
    问题 我正在尝试使用网格搜索在拟合线性回归之前选择数据的主成分数。 我很困惑如何制作我想要的主成分数量的字典。 我在 param_grid 参数中将我的列表放入字典格式,但我认为我做错了。 到目前为止,我收到了关于包含 infs 或 NaN 的数组的警告。 我正在按照将线性回归流水线化到 PCA 的说明进行操作:http://scikit-learn.org/stable/auto_examples/plot_digits_pipe.html ValueError: 数组不能包含 infs 或 NaNs 我能够在一个可重现的例子中得到同样的错误,我的真实数据集更大: import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.linear_model import LinearRegression from sklearn.pipeline import Pipeline from sklearn.model_selection import GridSearchCV df2 = pd.DataFrame({ 'C' : pd.Series(1, index = list(range(8)),dtype = 'float32'), 'D' : np.array(
  • sklearn 的 PLSRegression:“ValueError:数组不能包含 infs 或 NaN”(sklearn's PLSRegression: “ValueError: array must not contain infs or NaNs”)
    问题 使用 sklearn.cross_decomposition.PLSRegression 时: import numpy as np import sklearn.cross_decomposition pls2 = sklearn.cross_decomposition.PLSRegression() xx = np.random.random((5,5)) yy = np.zeros((5,5) ) yy[0,:] = [0,1,0,0,0] yy[1,:] = [0,0,0,1,0] yy[2,:] = [0,0,0,0,1] #yy[3,:] = [1,0,0,0,0] # Uncommenting this line solves the issue pls2.fit(xx, yy) 我得到: C:\Anaconda\lib\site-packages\sklearn\cross_decomposition\pls_.py:44: RuntimeWarning: invalid value encountered in divide x_weights = np.dot(X.T, y_score) / np.dot(y_score.T, y_score) C:\Anaconda\lib\site-packages\sklearn\cross
  • statsmodel.api.Logit: valueerror array must not contain infs or nans
    I am trying to apply Logistic Regression in Python using statsmodel.api.Logit. I am running into the error ValueError: array must not contain infs or NaNs. When I am executing with: data['intercept'] = 1.0 train_cols = data.columns[1:] logit = sm.Logit(data['admit'], data[train_cols]) result = logit.fit(start_params=None, method='bfgs', maxiter=20, full_output=1, disp=1, callback=None) The data contains more than 15000 columns and 2000 rows. which data['admit'] is the target value and data[train_cols] is the list of features. Can anyone please give me some hints to fix this problem?
  • sklearn's PLSRegression: “ValueError: array must not contain infs or NaNs”
    When using sklearn.cross_decomposition.PLSRegression: import numpy as np import sklearn.cross_decomposition pls2 = sklearn.cross_decomposition.PLSRegression() xx = np.random.random((5,5)) yy = np.zeros((5,5) ) yy[0,:] = [0,1,0,0,0] yy[1,:] = [0,0,0,1,0] yy[2,:] = [0,0,0,0,1] #yy[3,:] = [1,0,0,0,0] # Uncommenting this line solves the issue pls2.fit(xx, yy) I get: C:\Anaconda\lib\site-packages\sklearn\cross_decomposition\pls_.py:44: RuntimeWarning: invalid value encountered in divide x_weights = np.dot(X.T, y_score) / np.dot(y_score.T, y_score) C:\Anaconda\lib\site-packages\sklearn\cross
  • scipy.optimize.curvefit() - array must not contain infs or NaNs
    I am trying to fit some data to a curve in Python using scipy.optimize.curve_fit. I am running into the error ValueError: array must not contain infs or NaNs. I don't believe either my x or y data contain infs or NaNs: >>> x_array = np.asarray_chkfinite(x_array) >>> y_array = np.asarray_chkfinite(y_array) >>> To give some idea of what my x_array and y_array look like at either end (x_array is counts and y_array is quantiles): >>> type(x_array) <type 'numpy.ndarray'> >>> type(y_array) <type 'numpy.ndarray'> >>> x_array[:5] array([0, 0, 0, 0, 0]) >>> x_array[-5:] array([2919, 2965, 3154, 3218
  • sklearn错误ValueError:输入包含NaN,无穷大或对于dtype('float64')而言太大的值(sklearn error ValueError: Input contains NaN, infinity or a value too large for dtype('float64'))
    问题 我正在使用sklearn,并且亲和力传播存在问题。 我建立了一个输入矩阵,并且不断收到以下错误。 ValueError: Input contains NaN, infinity or a value too large for dtype('float64'). 我跑了 np.isnan(mat.any()) #and gets False np.isfinite(mat.all()) #and gets True 我尝试使用 mat[np.isfinite(mat) == True] = 0 删除无限值,但这也不起作用。 我该怎么做才能摆脱矩阵中的无限值,以便可以使用亲和力传播算法? 我正在使用anaconda和python 2.7.9。 回答1 这可能在scikit内部发生,并且取决于您在做什么。 我建议您阅读所用功能的文档。 您可能正在使用一种方法,例如,这取决于您的矩阵是正定的且不满足该条件。 编辑:我怎么会错过: np.isnan(mat.any()) #and gets False np.isfinite(mat.all()) #and gets True 显然是错误的。 正确的是: np.any(np.isnan(mat)) 和 np.all(np.isfinite(mat)) 您想检查任何元素是否为NaN,而不是any函数的返回值是否为数字... 回答2
  • 与 NaN 不同,为什么浮点无穷大相等?(Why are floating point infinities, unlike NaNs, equal?)
    问题 为什么无穷大比较不遵循应用于 NaN 的逻辑? 这段代码打印了三次false : double a = Double.NaN; double b = Double.NaN; System.out.println(a == b); // false System.out.println(a < b); // false System.out.println(a > b); // false 但是,如果我将Double.NaN更改为Double.POSITIVE_INFINITY ,则相等性为true ,但大于和小于比较为false : double a = Double.POSITIVE_INFINITY; double b = Double.POSITIVE_INFINITY; System.out.println(a == b); // true System.out.println(a < b); // false System.out.println(a > b); // false 这似乎很危险。 假设无限值是由溢出导致的,我想更有可能的是,最终成为无限的两个变量在完美算术中实际上并不相等。 回答1 你的推理是Double.POSITIVE_INFINITY不应该等于它自己,因为它“很可能”是由于精度损失而获得的。 这条推理线适用于所有浮点数。
  • Python:在存在nan的情况下排序功能中断(Python: sort function breaks in the presence of nan)
    问题 sorted([2, float('nan'), 1])返回[2, nan, 1] (至少在Activestate Python 3.1实现上。) 我知道nan是一个奇怪的对象,因此,如果它出现在排序结果中的随机位置,我不会感到惊讶。 但这也弄乱了容器中非南数的排序,这确实是出乎意料的。 我问了一个有关max的相关问题,并据此了解为什么sort像这样工作。 但这应该被视为错误吗? 文档只是说“返回新的排序列表”,而未指定任何详细信息。 编辑:我现在同意这不违反IEEE标准。 但是,我认为,从任何常识角度来看,这都是一个错误。 甚至不知道经常承认错误的Microsoft都已将此错误识别为错误,并在最新版本中对其进行了修复:http://connect.microsoft.com/VisualStudio/feedback/details/363379/bug-在列表中的双重排序在列表中包含双重Nan。 无论如何,我最终遵循了@khachik的回答: sorted(list_, key = lambda x : float('-inf') if math.isnan(x) else x) 与默认情况下执行该操作的语言相比,我怀疑它会导致性能下降,但至少它能起作用(除非我引入了任何错误)。 回答1 先前的答案很有用,但对于问题的根源可能不清楚。 在任何语言中
  • 用NAN替换强制转换非数字numpy数组(Forced conversion of non-numeric numpy arrays with NAN replacement)
    问题 考虑数组 x = np.array(['1', '2', 'a']) 绑定转换为float数组会引发异常 x.astype(np.float) ValueError: could not convert string to float: a numpy是否提供任何有效的方法将其强制转换为数字数组,并用NAN等替换非数字值? 或者,是否有一个等效于np.isnan的有效numpy函数,但是该函数还可以测试非数字元素(例如字母)? 回答1 您可以使用np.genfromtxt将字符串数组转换为浮点数组(带有NaN): In [83]: np.set_printoptions(precision=3, suppress=True) In [84]: np.genfromtxt(np.array(['1','2','3.14','1e-3','b','nan','inf','-inf'])) Out[84]: array([ 1. , 2. , 3.14 , 0.001, nan, nan, inf, -inf]) 这是一种识别“数字”字符串的方法: In [34]: x Out[34]: array(['1', '2', 'a'], dtype='|S1') In [35]: x.astype('unicode') Out[35]: array([u'1', u'2', u'a']
  • 熊猫:将dtype'object'转换为int(Pandas: convert dtype 'object' to int)
    问题 我已经读了一个查询到Pandas的SQL,值以dtype'object'的形式出现,尽管它们是字符串,日期和整数。 我能够将日期“ object”转换为Pandas datetime dtype,但是在尝试转换字符串和整数时遇到错误。 这是一个例子: >>> import pandas as pd >>> df = pd.read_sql_query('select * from my_table', conn) >>> df id date purchase 1 abc1 2016-05-22 1 2 abc2 2016-05-29 0 3 abc3 2016-05-22 2 4 abc4 2016-05-22 0 >>> df.dtypes id object date object purchase object dtype: object 将df['date']转换为日期时间可以: >>> pd.to_datetime(df['date']) 1 2016-05-22 2 2016-05-29 3 2016-05-22 4 2016-05-22 Name: date, dtype: datetime64[ns] 但是当尝试将df['purchase']转换为整数时出现错误: >>> df['purchase'].astype(int) .... pandas/lib
  • Python:binned_statistic_2d 均值计算忽略数据中的 NaN(Python: binned_statistic_2d mean calculation ignoring NaNs in data)
    问题 我正在使用scipy.stats.binned_statistic_2d通过查找每个 bin 内点的平均值将不规则数据分箱到统一网格上。 x,y = np.meshgrid(sort(np.random.uniform(0,1,100)),sort(np.random.uniform(0,1,100))) z = np.sin(x*y) statistic, xedges, yedges, binnumber = sp.stats.binned_statistic_2d(x.ravel(), y.ravel(), values=z.ravel(), statistic='mean',bins=[np.arange(0,1.1,.1), np.arange(0,1.1,.1)]) plt.figure(1) plt.pcolormesh(x,y,z, vmin = 0, vmax = 1) plt.figure(2) plt.pcolormesh(xedges,yedges,statistic, vmin = 0, vmax = 1) 按预期生成这些图: 散点数据: 网格数据: 但是我想要网格的数据中包含 NaN。 这就是我添加 NaN 时的结果: x,y = np.meshgrid(sort(np.random.uniform(0,1,100)),sort(np.random
  • 有没有更好的办法让numpy.argmin()忽略NaN值(Is there a better way of making numpy.argmin() ignore NaN values)
    问题 我想获取包含NaN的numpy数组的最小值的索引,并且希望它们被忽略 >>> a = array([ nan, 2.5, 3., nan, 4., 5.]) >>> a array([ NaN, 2.5, 3. , NaN, 4. , 5. ]) 如果我运行argmin,它将返回第一个NaN的索引 >>> a.argmin() 0 我用Infs代替NaNs,然后运行argmin >>> a[isnan(a)] = Inf >>> a array([ Inf, 2.5, 3. , Inf, 4. , 5. ]) >>> a.argmin() 1 我的困境是:我不希望将NaNs更改为Infs,然后在用完argmin后再返回(因为NaNs在代码中稍后将具有含义)。 有一个更好的方法吗? 还有应该的结果是什么,如果所有的原始值是NaN的问题? 在我的实现中,答案为0 回答1 当然! 使用nanargmin : import numpy as np a = np.array([ np.nan, 2.5, 3., np.nan, 4., 5.]) print(np.nanargmin(a)) # 1 还有nansum , nanmax , nanargmax和nanmin , 在scipy.stats ,有nanmean和nanmedian 。 有关忽略nan的更多方法
  • Is there a better way of making numpy.argmin() ignore NaN values
    I want to get the index of the min value of a numpy array that contains NaNs and I want them ignored >>> a = array([ nan, 2.5, 3., nan, 4., 5.]) >>> a array([ NaN, 2.5, 3. , NaN, 4. , 5. ]) if I run argmin, it returns the index of the first NaN >>> a.argmin() 0 I substitute NaNs with Infs and then run argmin >>> a[isnan(a)] = Inf >>> a array([ Inf, 2.5, 3. , Inf, 4. , 5. ]) >>> a.argmin() 1 My dilemma is the following: I'd rather not change NaNs to Infs and then back after I'm done with argmin (since NaNs have a meaning later on in the code). Is there a better way to do this? There is also a
  • numpy数组:用列的平均值替换nan值(numpy array: replace nan values with average of columns)
    问题 我有一个主要用实数填充的numpy数组,但是其中也包含一些nan值。 如何用列的平均值替换nan ? 回答1 无需循环: print(a) [[ 0.93230948 nan 0.47773439 0.76998063] [ 0.94460779 0.87882456 0.79615838 0.56282885] [ 0.94272934 0.48615268 0.06196785 nan] [ 0.64940216 0.74414127 nan nan]] #Obtain mean of columns as you need, nanmean is convenient. col_mean = np.nanmean(a, axis=0) print(col_mean) [ 0.86726219 0.7030395 0.44528687 0.66640474] #Find indices that you need to replace inds = np.where(np.isnan(a)) #Place column means in the indices. Align the arrays using take a[inds] = np.take(col_mean, inds[1]) print(a) [[ 0.93230948 0.7030395 0
  • 安静的NaN和发信号的NaN有什么区别?(What is the difference between quiet NaN and signaling NaN?)
    问题 我已经读过有关浮点的知识,并且我知道NaN可能是由操作导致的。 但是我不明白这些到底是什么概念。 它们之间有什么区别? 在C ++编程期间可以产生哪一个? 作为程序员,我可以编写导致sNaN的程序吗? 回答1 当操作产生安静的NaN时,直到程序检查结果并看到NaN为止,才表示没有异常。 也就是说,如果在软件中实现浮点,则计算将继续进行,而不会收到来自浮点单元(FPU)或库的任何信号。 信号NaN通常会以FPU例外的形式产生信号。 是否引发异常取决于FPU的状态。 C ++ 11在浮点环境中添加了一些语言控件,并提供了用于创建和测试NaN的标准化方法。 但是,控件的实现是否标准化程度不高,浮点异常通常无法以与标准C ++异常相同的方式捕获。 在POSIX / Unix系统中,通常使用SIGFPE的处理程序捕获浮点异常。 回答2 qNaN和sNaN在实验中的外观如何? 首先,让我们学习如何识别我们是sNaN还是qNaN。 我将在此答案中使用C ++而不是C,因为它提供了方便的std :: numeric_limits :: quiet_NaN和std :: numeric_limits :: signaling_NaN,而我在C中找不到它。 但是,我找不到用于对NaN是sNaN还是qNaN进行分类的函数,因此让我们仅打印出NaN原始字节: main.cpp #include
  • 训练期间难治的常见原因(Common causes of nans during training)
    问题 我注意到在训练期间经常发生的是NAN 。 通常,它似乎是通过权重引入内部产品/完全连接或卷积层中的。 这是由于梯度计算正在爆炸而发生的吗? 还是因为权重初始化(如果是这样,为什么权重初始化会产生这种效果)? 还是可能是由于输入数据的性质引起的? 这里的首要问题很简单:在训练过程中发生NAN的最常见原因是什么? 其次,有什么方法可以解决这个问题(为什么它们起作用)? 回答1 好问题。 我多次遇到这种现象。 这是我的观察结果: 渐变爆炸 原因:梯度大会使学习过程偏离轨道。 您应该期待的是:查看运行时日志,您应该查看每个迭代的损失值。 您会注意到,损失在迭代之间开始显着增长,最终损失将太大而无法用浮点变量表示,并且它将变为nan 。 您可以做什么:将base_lr (在Solver.prototxt中)减少一个数量级(至少)。 如果您有多个损耗层,则应检查日志以查看是哪个层造成了梯度爆炸,并减少了该特定层(而不是一般的base_lr )的loss_weight (在train_val.prototxt中)。 不良的学习率政策和参数 原因: caffe无法计算有效的学习率,而是获取'inf'或'nan' ,该无效率会乘以所有更新,从而使所有参数无效。 您应该期望的是:查看运行时日志,您应该看到学习率本身变为'nan' ,例如: ... sgd_solver.cpp:106]
  • pandas cut(): how to convert nans? Or to convert the output to non-categorical?
    I am using pandas.cut() on dataframe columns with nans. I need to run groupby on the output of pandas.cut(), so I need to convert nans to something else (in the output, not in the input data), otherwise groupby will stupidly and infuriatingly ignore them. I understand that cut() now outputs categorical data, but I cannot find a way to add a category to the output. I have tried add_categories(), which runs with no warning nor errors, but doesn't work because the categories are not added and, indeed, fillna fails for this very reason. A minimalist example is below. Any ideas? Or is there maybe