我的设置:Python 2.7.4.1,Numpy MKL 1.7.1,Windows 7 x64,WinPython
我尝试实现Sequential Minimal Optimization算法来解决SVM.我使用最大违规对方法.
在工作集选择过程中,我想找到梯度的最大值及其满足某些条件的元素的索引,y [i]*alpha [i] <0或y [i]*alpha [i]
#y - array of -1 and 1
y=np.array([-1,1,1,1,-1,1])
#alpha- array of floats in range [0,C]
alpha=np.array([0.4,0.1,1.33,0,0.9,0])
#grad - array of floats
grad=np.array([-1,-1,-0.2,-0.4,0.4,0.2])
GMaxI=float('-inf')
GMax_idx=-1
n=alpha.shape[0] #usually n=100000
C=4
B=[0,0,C]
for i in xrange(0,n):
yi=y[i] #-1 or 1
alpha_i=alpha[i]
if (yi * alpha_i< B[yi+1]): # B[-1+1]=0 B[1+1]=C
if( -yi*grad[i]>=GMaxI):
GMaxI= -yi*grad[i]
GMax_idx = i
Run Code Online (Sandbox Code Playgroud)
多次调用此过程(~50000),分析器显示这是瓶颈.可以对此代码进行矢量化吗?
编辑1:添加一些小的示例数据
编辑2:我已经检查过hwlau,larsmans和E先生提出的解决方案.只有解决方案提出E先生是正确的.以下示例代码包含所有三个答案:
import numpy as np
y=np.array([ -1, -1, …Run Code Online (Sandbox Code Playgroud)