【问题标题】:Cleveland heart disease dataset - can’t describe the class克利夫兰心脏病数据集 - 无法描述该类
【发布时间】:2019-12-01 19:17:03
【问题描述】:

我正在使用Cleveland Heart Disease dataset from UCI 进行分类,但我不了解 target 属性。

数据集描述说值从 0 到 4,但属性描述说:

0:

1: > 50% 冠心病

我想知道如何解释这个问题,这个数据集是多类还是二元分类问题?我必须将值 1-4 归为一个类别(存在疾病)吗?

【问题讨论】:

    标签: machine-learning scikit-learn dataset classification multiclass-classification


    【解决方案1】:

    这基本上意味着不同心脏病的存在用 1、2、3、4 表示,而不存在则简单地用 0 表示。现在,在这个数据集上进行的大多数实验都是基于二元分类,即存在(1、2、3、4)与缺席(0)。这种行为的一个原因可能是类不平衡问题(0 有大约 160 个样本,其余的 1、2、3 和 4 构成另一半)和少量样本(总共只有大约 300 个样本)。因此,考虑到我们的约束条件,将这些数据视为二元分类问题而不是多类分类问题是有意义的。

    【讨论】:

      【解决方案2】:
      • 这个数据集是多类还是二元分类问题?

        无需更改,数据集即可用于解决多类分类问题。

      • 我必须将值 1-4 归为一个类别(存在疾病)吗?

        是的,只要您有兴趣将数据集用于二元分类问题,您就必须这样做。

      【讨论】:

      • 但是我怎样才能处理平衡问题而不使其成为二元分类呢?
      • 我建议提出一个新问题,以保持这个问题清晰明了。 ;)
      【解决方案3】:

      如果您正在处理不平衡的数据集,您应该使用重新采样技术来获得更好的结果。在数据集不平衡的情况下,分类器总是“预测”最常见的类别,而不对特征进行任何分析。

      您应该尝试 SMOTE,它基于已经存在的元素为少数类合成元素。它从少数类中随机选择一个点并计算该点的 k 最近邻。

      我还使用了交叉验证 K-fold 方法和 SMOTE,交叉验证确保模型从数据中获取正确的模式。

      在衡量模型的性能时,准确度指标具有误导性,即使有更多的误报,它也显示出很高的准确度。使用 F1 分数和 MCC 等指标。

      参考资料:

      https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-datasets

      【讨论】:

      • 用 SMOTE 模拟这个点的想法非常有趣。实际上,我对这个机器学习世界很陌生,我所有的实验都是用 scikit-learn 完成的。你知道是否有任何库可以使用这种 SMOTE 技术吗?
      • Python 库 Imblearn。从 imblearn.over_sampling 导入 SMOTE。基本上,一旦您在训练和测试数据集中拆分数据集,应用 SMOTE 算法,它将重新采样数据集。将重采样数据集传递给分类算法。请浏览以下链接,它描述了如何使用不平衡数据集和使用 SMOTE 采样算法。 kaggle.com/qianchao/smote-with-imbalance-data.\
      • 不平衡数据集请通过下面的线程stackoverflow.com/questions/57142772/…
      • 嘿,您对使用 SMOTE 的建议给了我很好的结果。请把它作为一个答案,以便我可以标记为最佳答案
      • 是的,SMOTE 算法可以在不平衡的数据集上提供更好的结果。我正在研究各种采样算法的项目。
      猜你喜欢
      • 2019-12-01
      • 2017-04-17
      • 2018-10-10
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      相关资源
      最近更新 更多