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

Python 如何计算小数据集SVM分类的概率(置信度)?,python,machine-learning,scikit-learn,artificial-intelligence,svm,Python,Machine Learning,Scikit Learn,Artificial Intelligence,Svm,用例: 我有一个小数据集,每个类大约有3-10个样本。我正在使用sklearnSVC对具有rbf内核的对象进行分类。 我需要预测和预测类的置信度。我使用了SVC的预测概率方法。 我得到了奇怪的结果。我搜索了一下,发现它只适用于较大的数据集 在堆栈上找到此问题 问题的作者通过将数据集相乘,从而复制数据集来验证这一点 我的问题: 1) 如果我将我的数据集乘以100,每个样本乘以100次,它会增加“预测概率”的“正确性”。它会有什么副作用?过度装修 2) 有没有其他方法可以计算分类器的置信度?比如离超

用例

我有一个小数据集,每个类大约有3-10个样本。我正在使用sklearnSVC对具有rbf内核的对象进行分类。 我需要预测和预测类的置信度。我使用了SVC的预测概率方法。 我得到了奇怪的结果。我搜索了一下,发现它只适用于较大的数据集

在堆栈上找到此问题

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

我的问题:

1) 如果我将我的数据集乘以100,每个样本乘以100次,它会增加“预测概率”的“正确性”。它会有什么副作用?过度装修

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

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

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

支持向量机主要用于高维环境。目前还不清楚这是否适用于您的项目。它们在少数(甚至单个)支持实例上构建平面,并且在使用神经网络的大型训练集的情况下往往表现出色。从本质上讲,它们可能不是你最糟糕的选择

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

此场景中的纯过采样也不会为您提供任何关于置信度的新信息,而不是由非平衡过采样构建的伪影,因为实例将是精确副本,并且不会发生分布更改。您可以使用(合成少数过采样技术)找到一些信息。基本上,您将根据现有实例生成合成实例。从理论上讲,这将为您提供新的实例,这些实例不会与您拥有的实例完全相同,因此可能会有点脱离正常分类。注:根据定义,所有这些示例将位于示例空间中的原始示例之间。这并不意味着它们将位于预测的SVM空间之间,可能是学习效果并不真实


最后,可以根据到超平面的距离估计置信度。请参阅:

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