如何计算小数据集的SVM分类概率(置信度)?

5

使用场景:

我有一个 小数据集,每个类别中大约有3-10个样本。我正在使用sklearn的 SVC 使用rbf内核对其进行分类。 我需要预测的置信度以及预测的类别。我使用SVC的predict_proba方法。 结果很奇怪。我搜索了一下发现只对较大的数据集有意义。

在stack上找到了这个问题 Scikit-learn predict_proba gives wrong answers.

作者通过复制数据集来验证这个问题。

我的问题:

1) 如果我将数据集乘以100倍,每个样本重复100次,它会增加“predict_proba”的“正确性”。但会引起什么副作用?过拟合吗?

2) 有没有其他方法可以计算分类器的置信度?比如距离超平面的距离?

3) 对于这种小样本大小,是推荐使用SVM算法还是选择其他算法?


1
“信心”是什么意思?无论如何,只有3个样本,你选择的任何东西都没有太大希望。 - juanpa.arrivillaga
3
分类器有多大把握认为这个样本属于这个类别?是通过Platt缩放还是距离超平面的方式来计算? - Ishan Jain
正如@juanpa所说 - 只有3个样本,真的没有什么合理的事情可做。特别是SVM没有意义(以及99%的其他统计方法)。您可以使用1-NN,它只是一个“附加最接近点标签”的规则,但再次 - 每类3个样本对于任何体面的分析来说都太小了。除非您有成千上万的类,并且它们之间存在结构。 - lejlot
@lejlot 我同意样本量不够好,但如果由我决定,我会增加数据集。但我们已经为品牌制作了一个服务,根据他们提供的示例来分类语句的意图。用户一开始只会输入这么多个示例。它可能会慢慢增加,但最初我不指望有很多样本用于训练。如果我将每个样本重复50次并进行训练,会有什么副作用?对此我感到非常抱歉,这是一个愚蠢的问题。 - Ishan Jain
3
复制样本没有任何作用 - lejlot
为了估计置信区间,您也可以使用自助法(参见https://stats.stackexchange.com/a/94855/141373)。 - rth
1个回答

0

首先:您的数据集似乎对于任何实际目的来说都非常小。话虽如此,让我们看看我们能做些什么。

SVM主要在高维环境中流行。目前尚不清楚它是否适用于您的项目。它们在少量(甚至单个)支持实例上构建平面,并且在具有大型训练集的情况下通常被神经网络超越。从先验上看,它们可能不是您最差的选择。

对数据进行过采样对使用SVM的方法几乎没有帮助。SVM基于支持向量的概念,这些支持向量基本上是定义类别和非类别的异常值。过采样不会构造新的支持向量(我假设您已经将训练集用作测试集)。

在这种情况下,简单的过采样也不会给你任何关于置信度的新信息,除了由于不平衡的过采样而构造的人工制品,因为实例将是精确的副本,分布不会发生变化。您可以尝试使用SMOTE(合成少数类过采样技术)来查找一些信息。基本上,您将根据已有的实例生成合成实例。理论上,这将为您提供新实例,这些实例不会是您拥有的实例的精确副本,并且可能会略微偏离正常分类。注意:根据定义,所有这些示例都位于样本空间中原始示例之间。这并不意味着它们将位于您的投影SVM空间之间,可能存在学习效应,这些效应并不真实。

最后,您可以通过到超平面的距离来估计置信度。请参见:https://stats.stackexchange.com/questions/55072/svm-confidence-according-to-distance-from-hyperline


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接