Python 如何获取scikit学习SVM分类器的所有alpha值?

Python 如何获取scikit学习SVM分类器的所有alpha值?,python,machine-learning,scikit-learn,svm,Python,Machine Learning,Scikit Learn,Svm,我需要的阿尔法值,这是拉格朗日乘数的支持向量机对偶问题,训练后的支持向量机分类器与scikit学习。根据该文件,scikit learn似乎只提供了svm.dual_coef_,它是拉格朗日乘数α和数据点标签的乘积 我试图通过将svm.dual_coef_的元素除以数据标签来手动计算alpha值,但由于svm.dual_coef_仅存储支持向量的系数,我不确定是否迭代此数组,支持向量的顺序将与原始训练数据中的顺序相同 那么,有没有可靠的方法来获取支持向量的α值呢?因为α值根据定义是正的,所以可以

我需要的阿尔法值,这是拉格朗日乘数的支持向量机对偶问题,训练后的支持向量机分类器与scikit学习。根据该文件,scikit learn似乎只提供了
svm.dual_coef_
,它是拉格朗日乘数α和数据点标签的乘积

我试图通过将
svm.dual_coef_
的元素除以数据标签来手动计算alpha值,但由于
svm.dual_coef_
仅存储支持向量的系数,我不确定是否迭代此数组,支持向量的顺序将与原始训练数据中的顺序相同


那么,有没有可靠的方法来获取支持向量的α值呢?

因为α值根据定义是正的,所以可以通过获取双系数的绝对值来获得:

alphas = np.abs(svm.dual_coef_)
whis是以下事实的直接结果:

svm.dual_coef_[i] = labels[i] * alphas[i]
其中,
标签[i]
-1
+1
字母[i]
始终为正。此外,您还可以通过

labels = np.sign(svm.dual_coef_)
使用相同的观察结果。这也是scikit learn不存储字母的原因——它们唯一地由双字母和标签表示

一旦分析了所有可能的情况,就很容易理解:

  • labels[i]=-1
    alphas[i]>0
    dual-coef[i]<0
    dual-coef[i]==labels[i]*alphas[i]
  • 标签[i]=-1
    字母[i]<0
    =>不可能(字母是非负的)
  • 标签[i]=-1
    字母[i]==0
    =>它不是支持向量
  • labels[i]=+1
    alphas[i]>0
    dual-coef[i]>0
    dual-coef[i]==alphas[i]==labels[i]*alphas[i]
  • 标签[i]=+1
    字母[i]<0
    =>不可能(字母是非负的)
  • 标签[i]=+1
    字母[i]==0
    =>它不是支持向量
因此,如果
dual_coef_[i]
为正,则为
alphas[i]
系数,属于正类;如果为负,
alphas[i]==-dual_coef[i]
则属于负类