克利夫兰心脏病数据集 - 无法描述该类

Posted

技术标签:

【中文标题】克利夫兰心脏病数据集 - 无法描述该类【英文标题】: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 归为一个类别(存在疾病)吗?

【问题讨论】:

【参考方案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.\ 不平衡数据集请通过下面的线程***.com/questions/57142772/… 嘿,您对使用 SMOTE 的建议给了我很好的结果。请把它作为一个答案,以便我可以标记为最佳答案 是的,SMOTE 算法可以在不平衡的数据集上提供更好的结果。我正在研究各种采样算法的项目。

以上是关于克利夫兰心脏病数据集 - 无法描述该类的主要内容,如果未能解决你的问题,请参考以下文章

数据分享|R语言逻辑回归Naive Bayes贝叶斯决策树随机森林算法预测心脏病|附代码数据

R语言随机森林RandomForest逻辑回归Logisitc预测心脏病数据和可视化分析|附代码数据

R语言限制性立方样条(RCS, Restricted cubic spline)分析:基于logistic回归模型南非心脏病数据集(South African Heart Disease)

Python贝叶斯心脏预测,结果不准确

R语言splines包构建基于logistic回归的自然样条分析:南非心脏病数据集非线性:基函数展开和样条分析你简单分析的不重要特征,可能只是线性不显著而非线性是显著的

Scikit Learn - ValueError:操作数无法一起广播