我目前正在尝试(并且正在努力)实现一个weightedcore predicate ,以便在elki中实现weighteddbscan。corepredicate的修改代码如下所示:
public boolean isCorePoint(DBIDRef point, DBIDs neighbors) {
WeightSum = 0.0; // Make sure to initialize the weights as 0
for (DBIDIter it = neighbors.iter(); it.valid(); it.advance()) {
/*
Within here, I need to extract the original indices of the neighbours detected
in the original file, and need to link that back to the original data
and accumulate the weight colummns to the WeightSum to get the weighted
core points in dbscan
*/
}
return WeightSum >= minpts;
}
}
其思想是,原始corepridicate的输入之一是加权列数据集,我将使用提取的索引“提取”权重。我的问题是获取相邻dbid指向的数据的原始索引。我尝试过internalgetindex()和offset索引的方法(它们与原始数据的索引没有任何链接),但是这些方法都不太走运,对于如何绕过这个问题我有点不知所措。
如果有人能帮忙,我将不胜感激
谢谢
1条答案
按热度按时间06odsfpq1#
换一种方式。
将每个对象的权重存储在
DoubleDataStore
你可以通过DBID
. 不要回到“原始”索引。另外,请使用局部变量,否则代码在并行运行时将具有竞争条件。