二维二进制分类

机器算法验证 r 机器学习 分类 二进制数据 监督学习
2022-03-17 17:26:02

背景

实验室想要评估某种形式的凝胶电泳是否适合作为某种物质质量的分类方法。加载了几个凝胶,每个凝胶都带有一个干净的物质样品和一个含有杂质的样品。此外,还加载了分子标记作为参考。下图说明了设置(图片不显示实际实验,我取自维基百科进行说明):

凝胶电泳示例

为每个凝胶和每个泳道测量了两个参数:

  1. 分子量(即化合物在电泳过程中漂移的“高度”
  2. 相对数量将每个泳道的总量归一化为 1,并测量每个条带的密度,从而得出每个条带的相对数量。

然后产生相对数量与分子量的散点图,看起来像这样(这是人工数据):

示例散点图

这张图可以这样解读:“好”(蓝点)和“不纯”(红点)物质都有两条带,一条在分子量 120 左右,一条在 165 左右。“不纯”的条带” 分子量在 120 左右的物质比“好”物质的密度要小得多,并且可以很好地区分。


目标

目标是确定两个确定“好”物质的框(见下图)。然后这些框将用于将来将物质分类为“好”和“不纯”。如果一种物质的泳道在方框内,则将其分类为“良好”,否则分类为“不纯”。

这些决策规则应该很容易适用于实验室中的某个人。这就是为什么它应该是盒子而不是弯曲的决策边界。

假阴性(即当样本真的“好”时将其归类为“不纯”)被认为比假阳性更糟糕。也就是说,重点应该放在敏感性上,而不是特异性上。

示例决策框


问题

我不是机器学习方面的专家。但是,我知道有很多机器学习算法/技术可能会有所帮助:最近邻(例如in )、分类树(例如or )、支持向量机()、逻辑回归、boosting 和 bagging 方法还有很多。kknnRrpartctreeksvm

许多这些算法的一个问题是它们不提供简单的规则集或线性边界。此外,样本量约为70。

我的问题是:

  • 有没有人知道如何在这里进行?
  • 将数据集拆分为训练集和测试集是否有意义?
  • 训练集的数据比例应该是多少(我认为大约是 60/40 分割)。
  • 一般来说,这种分析的工作流程是什么?类似于:拆分数据集-> 训练集上的拟合算法-> 预测测试集的结果?
  • 如何避免过拟合(即盒子太小)?
  • 在这种情况下,评估预测性能的好统计数据是什么?曲线下面积?准确吗?阳性预测值?马修斯相关系数?

假设我熟悉Rcaret包。非常感谢您的时间和帮助。


示例数据

这是一个示例数据集。

structure(list(mol.wt = c(125.145401455869, 118.210252208676, 
165.048583787746, 126.003687476776, 170.149347112565, 127.761533014759, 
155.523172614798, 120.094514977175, 161.234986765321, 168.471542655269, 
156.522990530521, 154.377948321209, 165.365756398877, 167.965538771316, 
116.132241687833, 115.143539160903, 156.696830822196, 162.578494491556, 
136.830624758899, 123.886594633942, 124.247484227948, 126.257226352824, 
160.684010454816, 166.618872115047, 126.599387146887, 165.690375912529, 
159.786861142652, 114.520735974329, 125.753594471656, 157.551537154148, 
157.320636890647, 171.5759136115, 158.580005438661, 125.647463565197, 
130.404710783509, 127.128218318572, 162.144126888907, 161.804616951055, 
167.917268243627, 168.582197247178), rel.qtd = c(57.68339235957, 
54.0514508510085, 25.0703901938793, 37.6933881305906, 36.6853653723001, 
53.6650555524679, 52.268438087776, 52.8621831466857, 43.1242291166037, 
46.6771236380788, 38.0328239221277, 40.0454611708371, 44.6406366176158, 
40.8238699987682, 51.9464749018547, 54.0302533272953, 37.9792331383524, 
48.3853988095525, 38.2093977349102, 42.2636098418388, 42.9876895407144, 
40.8018728193786, 40.1097096927465, 38.7432550253867, 39.2633283608111, 
43.4673723102812, 53.3740718733815, 49.1067921475768, 52.3002598744634, 
44.9847844953241, 44.3014423068017, 44.0191971364465, 47.0805245356855, 
55.0124134796556, 57.9938440244052, 62.8314454977068, 45.8093815891894, 
43.2300677500964, 39.4801550161538, 51.6253515591173), quality = structure(c(2L, 
2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 1L), .Label = c("bad", "good"), class = "factor")), .Names = c("mol.wt", 
"rel.qtd", "quality"), row.names = c(10L, 14L, 47L, 16L, 57L, 
54L, 45L, 12L, 43L, 67L, 25L, 21L, 1L, 55L, 20L, 22L, 37L, 15L, 
8L, 38L, 46L, 64L, 51L, 65L, 52L, 61L, 63L, 32L, 50L, 27L, 19L, 
69L, 23L, 42L, 6L, 48L, 11L, 13L, 5L, 71L), class = "data.frame")
1个回答

这是一个非常深刻的问题。我将尝试针对您的具体情况进行回答,同时提出更广泛的观点。

有人知道如何在这里进行吗?

如何从这里着手,实际上是使用哪种方法的问题。您的特定案例的答案似乎是 CART(分类和回归树)。CART 可以让您获得漂亮的矩形区域进行预测,但它们非常嘈杂。这就是创建随机森林和其他类似算法的原因。随机森林和类似的交易清晰度以改善预测。

一般来说,方法的选择取决于两件事:分析的目标是什么,以及模型与数据的匹配程度。没有什么能阻止您尝试几种方法并选择适合下注的方法。

请注意,树可以输出连续概率。您可以更改对事件进行分类的阈值(在您的情况下很好)以提高或降低灵敏度。在这样做之前检查 ROC 曲线以了解两者之间的关系。

将数据集拆分为训练集和测试集是否有意义?

是和不是。永远不应该在适合它的相同数据上测量分类算法的性能。你最终会严重过度拟合数据和过度估计。

在这种情况下,由于样本量小(~70),训练和测试集没有意义。相反,我会使用Leave One Out Cross Validation (LOOCV)

算法是这样的:

  1. 坚持一项观察。
  2. 将模型拟合到数据上,除了 1 中的保留。
  3. 对 1 中的保留进行分类。
  4. 重复 1-3 直到所有的观察都被坚持。
  5. 根据 3 中的分类估计拟合。

对于 LOOCV,最终模型是适合整个数据集的模型。

训练集的数据比例应该是多少(我认为大约是 60/40 分割)。

一般来说,60/40 或 50/50 的分割是好的。如果您有足够的数据,请执行 50/25/25,其中第二个 25% 用于验证集。当你有一个验证集时,你可以在测试集上拟合模型,然后在测试集上检查它的性能。如果您认为应该对模型进行 tweeked,请这样做并在测试集上重新测试,直到您满意为止。然后,一旦模型被锁定,就对验证集中的数据进行分类。验证集的结果将是您报告的结果。

对于您的情况,我会推荐 LOOCV。

如何避免过拟合(即盒子太小)?

大多数算法都有控制参数(例如SVM 的成本)。在 R 的包中,有几个控制参数有助于防止过度拟合(请参阅 参考资料tree.control)。

在这种情况下,评估预测性能的好统计数据是什么?曲线下面积?准确吗?阳性预测值?马修斯相关系数?

这取决于目的。我建议在租赁时报告准确性、敏感性、特异性、正面和负面预测值。既然你说重点应该放在敏感性上,那应该是一个重点。AUC 也很常用,但噪音很大。