R中的K均值聚类:规范化DTM创建了NaN'

时间:2017-03-07 13:16:32

标签: r cluster-analysis k-means tm

我有一个使用tm包创建的文档语料库,我使用相同的包创建了一个文档术语矩阵。我想使用k-means聚类来聚类文档。我使用欧几里德距离,所以我首先将向量归一化,使欧几里得有意义。但是,在规范化时,它会产生“NaN”。一个特定文件的价值,我不知道为什么。我使用的代码:

m = dtm
norm_eucl = function(m) m/apply(m, MARGIN=1, FUN=function(x) sum(x^2)^.5)
m_norm = norm_eucl(m)
cl = kmeans(m_norm, 2)

当我查看m_norm时,它说(例如):

Terms     term1          term2
Docs
  1     0.2568640        0.8650674
  2     0.6204346        0.0000000
  3        NaN              NaN    
  4     0.0000000        0.6543098 

因此,文件3中包含了NaN'值。当然,当我尝试使用k-means时,会抛出以下错误:

Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)

因为它无法处理NaN'值。但是,我不明白为什么这些' NaN'值首先创建?

修改 当我从上面的apply(m, MARGIN=1, FUN=function(x) sum(x^2)^.5)函数查看norm_eucl时,文档3的值为零。所以它试图除以零,这当然是不可能的。但是,有谁知道为什么这是零,如何解决这个问题仍然可能吗?

1 个答案:

答案 0 :(得分:0)

也许该文档为空

然后它将具有标准0,并且你得到一个NaN。

检查您的预处理,但可能只是删除不良文档。