los*_*_19 5 python machine-learning convex-optimization svm scikit-learn
我在python中使用scikit包实现SVM.我在解释plot_separating_hyperplane.py中的"alpha i"值时遇到了困难
import numpy as np
import pylab as pl
from sklearn import svm
# we create 40 separable points
np.random.seed(0)
X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
Y = [0] * 20 + [1] * 20
# fit the model
clf = svm.SVC(kernel='linear')
clf.fit(X, Y)
print clf.support_vectors_
#support_vectors_ prints the support vectors
print clf.dual_coef_
#dual_coef_ gives us the "alpha i, y i" value for all support vectors
Run Code Online (Sandbox Code Playgroud)
样本输出
Dual_coef_ = [[ 0.04825885 0.56891844 -0.61717729]]
Support Vectors =
[[-1.02126202 0.2408932 ]
[-0.46722079 -0.53064123]
[ 0.95144703 0.57998206]]
Run Code Online (Sandbox Code Playgroud)
Dual_coef_为我们提供了"alpha i*y i"值.我们可以确认"alpha i*y i"的总和= 0(0.04825885 + 0.56891844 - 0.61717729 = 0)
我想找出"alpha i"值.它应该很容易,因为我们有"alpha i*y i"值.但我得到的所有"alpha i"都是消极的.例如,点(0.95144703,0.57998206)位于该线上方(参见链接).所以y = +1.如果y = +1,则alpha为-0.61717729.类似地,点(-1.02126202,0.2408932)位于该线下方.所以y = -1,因此alpha = -0.04825885.
为什么我将alpha值设为负值? 我的解释错了吗?任何帮助将不胜感激.
对于支持向量分类器(SVC),
给定训练向量,i = 1,...,n,在两个类中,以及一个向量,SVC解决了以下原始问题:
它的双重性是
其中'e'是所有1的向量,C> 0是上界,Q是n乘n正半定矩阵, 和
是内核.这里训练矢量被函数映射到更高(可能是无限的)维空间.
我认为你只是错误地解释了 y 。我猜线上方是 y=-1,线下方是 y=+1。
为什么你认为事情恰恰相反?
对于二类问题,我认为是“一类”。即数字最小的一个为+1,另一个为-1。这是 LibSVM 约定。
归档时间: |
|
查看次数: |
1654 次 |
最近记录: |