【问题标题】:In Sklearn machine learning, is there any way to classify text without target labels?在 Sklearn 机器学习中,有没有什么方法可以对没有目标标签的文本进行分类?
【发布时间】:2019-02-16 03:43:39
【问题描述】:

我想知道是否有任何方法可以结合使用 Python 和 Sklearn 机器学习,根据文本中的单词将文本数据分为不同的组/类别?

例如:

text = [["request approval for access", "request approval to enter premises", "Laptop not working"], ["completed bw table loading"]]

所以我可以得到如下类别:

category_label = [[0,0,2], [1]]
categories = [["approval request", "approval request", "Laptop working"], ["bw table"]]

在哪里

      0 = approval request
      2 = laptop working
      1 = bw table

基本上,上述内容意味着没有标记的训练数据或目标标签。

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    这在Scikit-LearnNLTK 中很容易实现。

    您列出的功能:

    0 = approval request
    2 = laptop working
    1 = bw table
    

    不是聚类算法自然会选择的算法,值得提醒您注意使用启发式算法混淆统计学习算法的可能错误。我建议您首先尝试一些聚类和分类,然后考虑使用semi-supervised learning methods 来标记您的聚类并传播这些标签。

    【讨论】:

      【解决方案2】:

      您可以尝试一种聚类方法,但不能保证您获得的聚类会与您想要的类别相对应,因为您没有清楚地解释算法您想要什么。

      我要做的是手动标记一些数据(标记 300 个样本需要多长时间?)并在此基础上进行训练,以便您的算法可以学习与每个类别相关的单词。

      如果这是不可能的,那么最好的办法是计算一个样本和每个类描述之间的余弦相似度,对它们进行排名,然后分配最接近的类。但在我看来,当你完成编码时,你可以手动标记一些样本并以更高的精度训练标准算法。

      【讨论】:

      • 我使用 K-Means 算法对数据进行聚类。但是聚类并不是那么准确。这就是我认为我会使用 DBSCAN(eps = 0.85)来进一步集群已经 Kmeans 集群的地方​​。这在理论上是可行的....但是其中一些 DBSCAN 子集群中的记录只有 1 条。这会使我的实际完整代码有点 hacky。所以想避免这种情况。对我来说手动标记数据是不可能的,因为数据量很大!
      • 您不需要标记所有数据,只需几个样本来训练算法。然后使用经过训练的算法来预测其余部分。
      • 除了设置两个点在同一邻域的最大距离的“eps”参数外,sk-learn 的 DBSCAN 算法还有一个“min_samples”参数,用于设置最小样本数为邻里。此参数默认为 5,所以我很惊讶您看到核心集群只有一个成员。
      • @AN6U5 我的天啊!你是对的!我已将 min_samples 设置为 1!感谢您指出这一点!
      【解决方案3】:

      @user1452759

      您的问题比一般机器学习更具体,您应该使用包 NLTK 而不是 sklearn。看看用nltk分类文本http://www.nltk.org/book/ch06.html

      【讨论】:

        猜你喜欢
        • 2017-07-01
        • 2019-06-30
        • 2020-11-25
        • 2021-09-16
        • 2013-02-08
        • 2016-07-06
        • 2021-08-01
        • 2014-10-21
        • 2017-08-13
        相关资源
        最近更新 更多