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

Ish*_*ain 5 python artificial-intelligence machine-learning svm scikit-learn

使用案例:

我有一个小数据集,每个类中有大约3-10个样本.我使用sklearn SVC分类那些RBF内核.我需要预测的信心以及预测的类.我使用了SVC的predict_proba方法.我得到了奇怪的结果.我搜索了一下,发现它只适用于较大的数据集.

在堆栈上发现这个问题Scikit-learn predict_proba给出了错误的答案.

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

我的问题:

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

2)还有其他方法可以计算出分类器的置信度吗?就像超飞机的距离一样?

3)对于这个小样本,SVM是推荐的算法还是我应该选择别的?

小智 0

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

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

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

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

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