Python numpy浮点数组精度

问题描述 投票:0回答:1

我试图通过这个链接使用Pegasos迷你批处理算法(如图2所示)来解决SVM优化问题:http://www.cs.huji.ac.il/~shais/papers/ShalevSiSrCo10.pdf

#X: m*n matrix with m examples and n features per example (m=4000 and n=784 in my case), Y: m length vector containing 1 or -1 for each example, l: lambda as given in algorithm (l=1 in my code), itr: number of iterations, k: size of batch (100) in my case
def pegasos(X,Y,l,n,m,itr,k):
w = np.zeros((1,n),dtype=np.float32)
print m, n
diff = 0.0
for t in range(1,itr+1):
    A = random.sample(range(1,m),k)
    total = np.zeros((1,n),dtype=np.float32)
    eta = 1/(l*t)
    for i in A:
        x = X[i]
        y = Y[i]
        p = y*(np.dot(w,x.T))
        if p < 1:
            p1 = y*x
            total = np.add(total,p1)
    #update rule
    w = np.add((w*(1-(1/t))) , (eta*total*(1/k)))
return w

我的数据集是这样的,当我计算我的变量total时,我得到的大多数是0,但是有几个值的顺序为10 ^( - 1)到10 ^( - 5)。一旦在更新规则下将总和乘以(eta / k),所有值都变为0.因此在每次迭代时,我获得的w是0.这不应该是这种情况。我已经尝试过提高浮子精度的方法,但它们似乎根本不起作用。当我使用基本的Pegasos算法时(如上面链接中的图1所示),我没有遇到任何问题,因此我的数据集并不完全奇怪。有关此问题的任何帮助将非常感谢:)

python numpy svm precision
1个回答
0
投票

如果你需要精度,你应该使用np.float64(正常浮点精度double)。

如果您使用的是Python 2,则在qazxsw poi,qazxsw poi和qazxsw poi中使用整数除法。把它写成(1/t),强制浮点除法。

© www.soinside.com 2019 - 2024. All rights reserved.