在没有PCA的多类svm中找到正确的function

我正在使用多类svm(一对一),3个类对用户进行分类。 在二进制中,我将能够绘制不同训练集的超平面方程中每个特征的权重分布。 在这种情况下,我真的不需要PCA来看到超平面的稳定性和特征的相对重要性(重新集中的中心顺便说一句)。 在多类svm中会有什么选择,因为对于每个训练集,你有3个分类器,你根据三个分类器的结果选择一个类(它已经是什么?出现最大次数的类或更大的判别式?无论哪个都没关系在这里)。 任何人都有一个想法。

如果重要的话,我正在用Accord写C#。 谢谢 !

在使用一对一策略的多类SVM中,问题被分成一组较小的二进制问题。 例如,如果您有三个可能的类,则使用one-vs-one策略需要创建(n(n-1))/ n个二元分类器。 在你的例子中,这将是

(n(n-1))/n = (3(3-1))/2 = (3*2)/2 = 3 

其中每一个都将专门解决以下问题:

  • 区分1级和2级(让我们称之为svm a )。
  • 区分1级和3级(让我们称之为svm b
  • 区分2级和3级(让我们称之为svm c

现在,我看到你在原帖中提出了多个问题,所以我会分别问他们。 首先,我将阐明决策过程的工作原理,然后告诉您如何检测哪些function最重要。

既然你提到了Accord.NET,那么这个框架可能有两种方式来计算多类决策。 默认的是使用决策导向非循环图(DDAG),这只不过是顺序排除类。 另一种方法是通过解决所有二元问题并获得大部分时间赢得的课程。 您可以通过设置SVM的Compute方法的方法参数 ,在对新样本进行分类时对其进行配置。

由于获胜最多的版本很容易理解,我将更多地解释默认方法DDAG。

使用有向无环图的决策

在这个算法中,我们测试每个SVM并消除每轮丢失的类。 因此,例如,算法从所有可能的类开始:

 Candidate classes: [1, 2, 3] 

现在它要求svm a对x进行分类,它决定为2级。因此,类1丢失了,在进一步的测试中不再被考虑:

 Candidate classes: [2, 3] 

现在它要求svm b对x进行分类,它决定为2级。因此,3级丢失并且在进一步的测试中不再被考虑:

 Candidate classes: [2] 

因此,最终答案是2。

检测哪些function最有用

现在,由于一对一的SVM被分解为(n(n-1)/ 2)二进制问题,分析哪些特征最重要的最直接的方法是分别考虑每个二进制问题。 不幸的是,全局确定哪个对整个问题最重要可能是棘手的,但是有可能检测出哪一个最重要的是区分1级和2级,或1级和3级,或2级和3级。 。

但是,如果您使用的是DDAG,我可以提供一个建议。 使用DDAG,可以提取导致特定决策的决策路径 。 这意味着可以在分类整个数据库时估计每台二进制机器的使用次数。 如果您可以估计每个二进制计算机的function的重要性,并估计在数据库的决策过程中使用计算机的次数,也许您可​​以将其加权总和作为function在多大程度上有用的指标。你的决策过程。

顺便说一句,您可能也有兴趣尝试使用具有高C的L1正则化的Logistic回归支持向量机之一来执行稀疏特征选择:

 // Create a new linear machine var svm = new SupportVectorMachine(inputs: 2); // Creates a new instance of the sparse logistic learning algorithm var smo = new ProbabilisticCoordinateDescent(svm, inputs, outputs) { // Set learning parameters Complexity = 100, }; 

我不是ML或SVM的专家。 我是一个自学者。 然而,我的原型准确地过度执行了一些类似的商业或学术软件,而一些竞争对手的日期和周数(!)的训练时间约为2小时。

我的识别系统(生物细胞中的模式)使用以下方法来选择最佳特征:

1)提取所有类别的特征并计算均值和方差2)选择这些特征,其中类别的距离最远,方差最小。 3)删除多余的function – 类别上的平均直方图相似

在我的原型中,我正在使用参数化特征,例如具有参数直径,阈值等的特征“圆”。训练由脚本控制,这些脚本定义了哪些特征要使用参数范围。 因此,该软件测试所有可能的组合。

对于某些训练时间优化:软件以每类5个实例开始,用于提取特征,并在满足第2个条件时增加数量。

某些步骤可能有一些学术名称。 不幸的是我不知道他们,我自己“发明了轮子”。