【问题标题】:Sklearn recommended cluster algorithms for Unsupervised Learning [closed]Sklearn 推荐用于无监督学习的聚类算法 [关闭]
【发布时间】:2020-05-13 22:29:04
【问题描述】:

慢慢进入 Sklearn 这个词,更具体的无监督聚类算法。 我正在做一个将 xml 文件扁平化为 csv 文件的项目,这部分已经完成。

现在我想实现任何 sklearn 方法来检测我的数据的异常情况。

csv 文件采用 Dataframe 格式,其中一些列带有描述,而另一些列具有值。这些值也可能是十进制值55,2

哪种 Sklearn 算法更适合使用无监督学习进行异常检测?

一开始我只是想尝试找出数字的异常,如果有任何不属于那里的数字。

【问题讨论】:

    标签: scikit-learn unsupervised-learning


    【解决方案1】:

    首先,聚类算法和异常检测算法不是一回事。 在集群中,目标是将每个实例分配到一个组(集群)中,其中每个组都有相似的实例。 在异常检测中,目标是找到与任何其他实例都不相似的实例。

    一些聚类算法,例如DB-SCAN,会创建一个“异常聚类”。该集群包含不属于任何其他集群的所有实例。我建议您尝试一下,看看它是否能解决您的问题。

    几乎所有的聚类算法都期望数字向量作为输入。如果要使用字符串列,可以使用One Hot Encoding 之类的方法将字符串转换为数字向量。有很多方法可以做到这一点,你可以找到一些 sk-learn 实现here

    【讨论】:

    • DBscan 是否支持带逗号的小数,或者我需要用从55,4 55.4 之类的多特替换逗号
    • '55,4' 代表一个数字还是两个? DBscan 适用于数字,因此您必须将字符串转换为整数。
    • @mandi 您需要将“,”替换为“。”如果您正在使用浮点数并将值转换为浮点类型,否则,您始终可以将 55,4 视为一个类别并按照同一答案中的建议进行一次热编码。
    • 该值只是一个数字,所以是一个整数,但我在某处读到,如果整数有逗号而不是点,这些算法有时不起作用,这就是问题出现的原因
    • @mandi 这是真的,因为在 Python 中 55,4 是一个字符串,其中 55.4 是一个整数。
    【解决方案2】:

    哪种 Sklearn 算法更适合使用 无监督学习?

    使用最多的算法是sklearn推荐的these ones

    一开始我只是想尝试找出异常 数字,如果有任何数字不属于那里。

    在我看来,你可以尝试一种新奇检测方法,here 你有一个基本的解释。根据我的经验,OneClassSVM 是一种可靠的算法。

    【讨论】:

    • 您知道使用这些方法之一更深入地进行异常检测的其他示例吗?
    • 一个类 SVM 的示例,更多地介绍新颖性以及为什么使用它:towardsdatascience.com/… 关于隔离林,请参阅包含扩展隔离林的这个 github 存储库。它还美丽地解释了隔离森林github.com/sahandha/eif
    • 如果我可能会问 SVM 和 PCA 之间有什么区别。此外,SVM 的链接还显示了 ROC 曲线,这对于显示您的方法在发现异常方面的效果非常重要。
    • SVM 和 PCA 是两个不同的东西,你应该研究每一个。 SVM 是一种分类算法,而 PCA 是一种分析“方法”(有很多用途)。 SVM的链接包含ROC曲线之类的评估指标(这很重要,我同意),但在我看来,整个评估过程也很重要。
    猜你喜欢
    • 2018-10-01
    • 2010-12-22
    • 2014-04-20
    • 2018-12-31
    • 2018-12-09
    • 2015-03-17
    • 2013-03-24
    • 2014-01-29
    • 2019-02-20
    相关资源
    最近更新 更多