异常值检测 DBSCAN

Outlier detection DBSCAN

我正在从事学校关于离群值检测的项目。我想我会创建自己的小数据集并使用 DBSCAN 来处理它。我想我会尝试创建一个关于网站上广告点击是否作弊的数据集。下面是我要创建的数据集的详细信息。

数据集名称:作弊广告点击检测。

:值

来源: (分类)url:0,重定向:1,搜索:2
visited_before: (分类)no:1,few_time:1,风扇:2
time_on_site(秒): (数字)用户在离开之前在网站上工作的时间(秒)。
active_type: (分类)fake_active:0(就像他们只是打开网站但除了点击广告什么都不做),normal_active:1 , real_acive: 2 (也许我会让它变成 active: float value from 0 to 10.)
作弊(标签): (分类)否:0,是:1

也许我会有更多其他列,例如用户点击广告的次数,...

我的问题是您认为 DBSCAN 可以很好地处理这个数据集吗?如果是,能否请您给我一些提示,以制作出色的数据集或更快地创建数据集?如果没有,请给我推荐一些 DBSCAN 可以很好地与主题配合使用的其他数据集。

非常感谢。

描述的是分类问题,而不是聚类问题。

此外,该数据没有 密度 的底部,是吗?

最后但同样重要的是,(A) 点击欺诈是高度聚集的,而不是异常值,(B) 噪声(低密度)与异常值(罕见)不同,以及 (C) 首先获取数据,然后推测关于可能的算法,因为如果您无法获取数据怎么办?

DBSCAN 具有检测异常值的内在能力。因为异常点将不属于任何集群。 Wiki 状态:

it groups together points that are closely packed together (points with many nearby neighbors), marking as outliers points that lie alone in low-density regions (whose nearest neighbors are too far away)

这可以使用来自 sklearn 的合成数据集轻松证明,例如 make_moonsmake_blobs。 Sklearn 在这方面有相当不错的 demo

from sklearn.datasets import make_moons
x, label = make_moons(n_samples=200, noise=0.1, random_state=19)
plt.plot(x[:,0], x[:,1],'ro')

implemented前段时间学习了dbscan算法。 (此回购已被移动)但是,正如 Anony-Mousse 所说

noise (low density) is not the same as outlier

而且从合成数据集中学到的直觉并不一定适用于实际的现实生活数据。因此,上述建议的数据集和实现仅用于学习目的。