【问题标题】:Sklearn One Class SVMSklearn 一类 SVM
【发布时间】:2015-04-25 04:10:04
【问题描述】:

我正在尝试在Sklearn 中使用 OneClassSVM 进行异常值检测。 用户每天都在访问网站,但有一天他访问了一个以前从未访问过的网站。我想使用 OneClassSVM 捕捉这个异常值。下面是一个示例数据:

`([[www.makeuseof.com,
www.kickstater.com,
www.google.com,
www.mashable.com`

以下是样本测试数据

`test_data = ['www.makeuseof.com','www.google.com','www.abc.com',]`

我正在使用 python 内置的哈希库对所有字符串进行哈希处理。 abs(hash('string'))

我希望它为所有人返回-1 for www.abc.com but its-1`。

【问题讨论】:

  • 向我们展示一些失败的代码。我不确定散列是最好的方法。

标签: machine-learning scikit-learn svm


【解决方案1】:

这里简要解释一下为什么不应该使用机器学习方法:

这不是机器学习任务。本质上,机器学习用于从嘈杂的数据中学习未知模式。这是一个非确定性的过程。 这种模式的一个例子是

“如果客户失业、年龄在 25 岁以下且没有高中文凭,那么与所有男性客户相比,他的信用贷款违约风险增加 30%。”

在您的情况下,模式是已知的,可以描述为

“用户访问了他以前从未访问过的页面”。

这是一种确定性模式,因此您不应该在这里使用机器学习方法。

【讨论】:

    【解决方案2】:

    可能也存在一些实现错误,但总的来说,我认为散列会导致您的数据过于分散,因此在这种情况下,基本散列不会让您准确预测异常值,因为一切都将如此遥远其他一切,好吧,一切都将是一个异常值。

    对于你的任务,我不知道你为什么甚至需要机器学习。使用存储访问过的网站的字典,当你获得一个新站点时,检查它是否在字典中。快速、高效、简单。

    【讨论】:

    • 我认为你是对的,这就是我最初所做的,但经过一些研究,我发现一类 SVM 是一种非常标准的查找异常值的方法。所以我想试试看它是如何工作的。将字符串转换为数字以便用于训练 SVM 的好方法是什么?
    • @Vishal - 你想要的东西可以让相似的条目靠近在一起。对于文本数据,通常使用 TF-IDF 转换。但是你需要真实的话,我认为它不适用于网站 URL。为此,您需要定义两个网站之间的相似性,我真的不知道该怎么做。我会保持简单:如果您可以在没有机器学习的情况下做到这一点,那么您应该这样做。
    • 是的,你是对的,TF-IDF 在这种情况下是行不通的,为了找到类似的网站,我需要整个网络的数据,然后对其进行分类.. 这是一个艰难的方式,但即使我发现我不应该使用机器学习来做到这一点..
    • 同意你的看法。这个问题不需要机器学习。绝妙法则:不要把事情复杂化
    猜你喜欢
    • 2014-10-10
    • 2018-09-25
    • 2017-04-21
    • 2018-08-11
    • 2019-02-28
    • 2020-05-14
    • 2021-03-17
    • 2016-05-11
    • 1970-01-01
    相关资源
    最近更新 更多