在具有一百万行的大型数据集上执行knn和lof以检测R中的离群值

问题描述

我想计算k最近邻距离和局部离群因子,以用于构造每个数据点的连续异常评分。

我使用以下代码

REPOPASSWORD=$(/Applications/KeePassXC.app/Contents/MacOS/keepassxc-cli show -a Password --key-file=/path/to/keyfile /path/to/database.kdbx "/path/to/entry/within/database")
echo $REPOPASSWORD

结果如下:

library(FNN)
knn <- get.knn(as.matrix(data),k = 5)

# to build kNN score for each point,we need to take the average value in each row of the distance matrix nn.dist
data$knn_scores <- rowMeans(knn$nn.dist)

# similarly I compute lof scores
library(dbscan)
data$lof_scores <- lof(as.matrix(data),k = 5)

这很容易在小型数据集上进行计算。但是,它在具有超过10000行的数据集上效率不高。就我而言,我的数据集有一百万行,我仍然需要为数据集中的每个数据点计算这些分数。如何加快此过程?

可复制的数据:

select(data,knn_scores,lof_scores)

# knn_scores lof_scores
# <dbl>      <dbl>
# 0.000000  1           
# 0.000000  1           
# 0.000000  1           
# 0.000000  1           
# 0.000000  1           
# 0.000000  1           
# 0.000000  1           
# 0.000000  1           
# 0.000000  1           
# 0.000000  1
... 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)