(K-means聚类) numpy数组中的(0,0,…0)是什么意思?什么可能导致无效除法?

如果你想知道这个numpy数组是如何创建的,请查看以下问题

假设我有一个numpy数组,看起来像这样(由这个预处理创建,该数组也被numpy随机打乱)

[[ 3  2  2 ...,  0  0  0] [14  1  0 ...,  0  0  0] [ 3  2  1 ...,  0  0  0] ...,  [ 1  1  1 ...,  0  0  0] [ 2  2  2 ...,  0  0  0] [ 1  1  0 ...,  0  0  0]]

我了解数据量很大,它包含600封电子邮件(每封邮件大约包含2000个单词),并对每封邮件中来自互联网的196个常见垃圾邮件单词进行了统计。

我想在Stephen Marsland的K-Means神经网络中使用它,该网络在注释中指出"如果数据中包含(0,0,...0),则无法工作",但我不确定这条注释指的是什么?(我以为...符号与数学中的1...n相同,即1和n之间有东西)。如果它意味着其他东西,我应该如何处理无效除法问题?谢谢!

我不确定,但我的数据集中有什么东西导致了这个错误

RuntimeWarning: invalid value encountered in divide data = transpose(transpose(data)/normalisers)

回答:

...,只是表示数据量太大,无法一次性打印到控制台。我认为你链接的代码中的注释意味着,如果你的数据中包含任何全零向量,预处理将无法工作。

如果你的数据中有任何全零特征向量,以下代码将返回True

np.any(data.sum(1) == 0)

…假设你的行是数据示例,你的列是特征。

这是发生的情况:

>>> from numpy import *>>> data = array([[0,0,0],[1,2,3],[1,0,1]])>>> normalisers = sqrt(sum(data**2,axis=1))*ones((1,shape(data)[0]))>>> normalisersarray([[ 0.        ,  3.74165739,  1.41421356]])

然后你就在除以零了。

>>> data = transpose(transpose(data)/normalisers)

一个可能的解决方案是在预处理步骤之前对每个特征加1:

data += 1

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注