当距离已知时,如何计算每次观测的概率值->;kmr程序设计

当距离已知时,如何计算每次观测的概率值->;kmr程序设计,r,group-by,data.table,probability,k-means,R,Group By,Data.table,Probability,K Means,我对R编程还不熟悉,并试图弄明白以下几点。下表包含每次观测的欧几里德距离和聚类详细信息。表中有100000多个不同的id,并且已经为每个集群计算了每个id值的距离。共有6个集群,命名为1-6 我需要计算最后一列,它应该是属于该集群的每个观测值的概率值。对于第一个条目,这由给出 其中,展开时的分母为 每个概率值是根据该id的6个距离值计算的。该表采用data.table格式。 我想试试这样的东西。但我甚至不知道如何完成这一行 dt_计算[,概率值:=(1/(距离/dt_计算[distance,

我对R编程还不熟悉,并试图弄明白以下几点。下表包含每次观测的欧几里德距离和聚类详细信息。表中有100000多个不同的id,并且已经为每个集群计算了每个id值的距离。共有6个集群,命名为1-6

我需要计算最后一列,它应该是属于该集群的每个观测值的概率值。对于第一个条目,这由给出

其中,展开时的分母为

每个概率值是根据该id的6个距离值计算的。该表采用data.table格式。 我想试试这样的东西。但我甚至不知道如何完成这一行

dt_计算[,概率值:=(1/(距离/dt_计算[distance,by=(id,cluster==1)])^2),by=id]

身份证件 簇 距离 概率值 1. 1. d1 p1 1. 2. d2 ? 1. 3. d3 ---- 1. 4. d4 ---- 1. 5. d5 ---- 1. 6. d6 ---- 2. 1. d7 ---- 2. 2. d8 ---- 2. 3. d9 ---- 2. 4. d10 ---- 2. 5. d11 ---- 2. 6. d12 ----
我不确定by=.EACHI的效率有多高,但这似乎有效。我不明白为什么通过引用赋值时会出错,所以我将其转储到一个新的data.table中,但这至少可以让您有所收获

dt   <- data.table(id = rep(c(1, 2), each = 6),
                   cluster = rep(1:6, 2),
                   distance = sample(100, size = 12, replace = TRUE))

test <- dt[dt, 1/sum((i.distance/distance) ^ 2),
           on = .(id), by = .EACHI]

dt这很好,非常有用。你救了我一天。非常感谢。我在一个有将近1500万ID的数据集上运行了这个。花了将近15分钟。这对我来说很好。