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

Posted

技术标签:

【中文标题】如何计算小数据集的 SVM 分类概率(置信度)?【英文标题】:How to calculate probability(confidence) of SVM classification for small data set? 【发布时间】:2017-04-29 08:45:19 【问题描述】:

用例

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

在堆栈 Scikit-learn predict_proba gives wrong answers 上找到了这个问题。

问题的作者通过乘以数据集来验证这一点,从而复制数据集。

我的问题:

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

2) 有没有其他方法可以计算分类器的置信度?就像与超平面的距离一样?

3) 对于这么小的样本量,SVM 是推荐算法还是我应该选择其他算法?

【问题讨论】:

“自信”是什么意思?无论如何,只有 3 个样本,您选择的任何东西都没有太大希望。 @juanpa.arrivillaga 这个样本属于这个类的分类器有多自信。 Platt 缩放或与超平面的距离? 正如@juanpa 所说 - 有 3 个样本,真的没有什么合理的做法。特别是 SVM 毫无意义(以及 99% 的其他统计方法)。您可以使用 1-NN,这只是“附加最近点标签”的规则,但同样 - 每个类 3 个样本对于任何体面的分析来说都太小了。除非你有数以万计的类,并且它们之间有一个结构。 @lejlot 我同意样本量不好,但如果由我决定,我会增加数据集。但是我们为品牌提供了一项服务,我们根据他们提供的示例对声明的意图进行分类。用户最初只会输入关于这许多示例。它可能会慢慢增加,但最初我不希望有很多样本用于训练。如果我对每个样本进行 50 次训练怎么办?它会有什么副作用。对于这么愚蠢的问题,我很抱歉。 复制样本没有任何作用 【参考方案1】:

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

SVM 主要在高维环境中流行。目前尚不清楚这是否适用于您的项目。他们在少数(甚至单个)支持实例上构建平面,并且在神经网络的大型训练集的情况下通常表现出色。先验地,它们可能不是您更糟糕的选择。

对数据进行过采样对于使用 SVM 的方法几乎没有什么作用。 SVM 基于支持向量的概念,支持向量基本上是一个类的异常值,定义了类中的内容和非类中的内容。过采样不会构造新的支持向量(我假设您已经在使用训练集作为测试集)。

在这种情况下,普通过采样也不会为您提供任何有关置信度的新信息,除了由不平衡过采样构建的伪影,因为实例将是精确的副本,不会发生分布变化。您可以使用SMOTE(合成少数过采样技术)找到一些信息。您将基本上根据您拥有的实例生成合成实例。从理论上讲,这将为您提供新的实例,这些实例不会是您拥有的实例的精确副本,因此可能会稍微超出正常分类。注意:根据定义,所有这些示例都将位于样本空间中的原始示例之间。这并不意味着它们将位于您预计的 S​​VM 空间之间,可能会学习到不真实的效果。

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

【讨论】:

以上是关于如何计算小数据集的 SVM 分类概率(置信度)?的主要内容,如果未能解决你的问题,请参考以下文章

用于多类分类的 SVM(one-vs-all)中的置信度估计

火炉炼AI机器学习016-如何知道SVM模型输出类别的置信度

具有概率或置信度的 Keras CNN 的 SVC 分类器以区分未经训练的类

发现频繁项集的方法 Apriori算法

来自 R 中 SVM 概率的信用评分

Matlab中数字图像集的SVM分类