上面的DataFrame代表用于判断是否患有癌症的属性。类别表示一个人是否患有癌症。类别2表示此人未患癌症,4表示此人患有癌症。当我尝试在移除类别和ID后的DataFrame上使用K-means时,所有行的预测结果都是0和1。但现在我很困惑,0/1是否等同于2。如何解决这个问题,以及如何检查模型的准确性?
回答:
K-Means算法不是分类器,而是一种聚类算法。这意味着它不会给你从特征到癌症类别的映射。它只会在特征空间中找到聚类(相关数据点的子集)。
因此,输出0/1是每个数据点对找到的聚类的归属。
如果你想检查聚类是否与癌症类别相关,可以进行以下分析:
- 聚类0中有多少数据点实际属于癌症类别2?
- 聚类1中有多少数据点实际属于癌症类别4?
还可以参考混淆矩阵来了解如何评估此类问题。
你的混淆矩阵应该如下所示:
+-----------------+-----------------------+-----------------------+| | 实际癌症类别4 | 实际癌症类别2 |+-----------------+-----------------------+-----------------------+| K-Means类别0 | 真阳性 | 假阳性 || K-Means类别1 | 假阴性 | 真阴性 |+-----------------+-----------------------+-----------------------+
- 真阳性:算法预测有癌症且此人确实有癌症
- 假阳性:算法预测有癌症但此人没有癌症
- 假阴性:算法预测无癌症但此人实际上有癌症
- 真阴性:算法预测无癌症且此人没有癌症
- 仅选择聚类0中的数据点;计算其中有多少属于癌症类别4 —— 这些将是你的真阳性。
- 现在仅选择聚类0中的数据点;计算其中有多少属于癌症类别2 —— 这些将是你的假阳性。
- 对阴性重复上述步骤。
准确率可以通过以下公式计算:acc = (TP+TN) / (TP+FP+FN+TN)