したがって、放射基底関数を少し速く実行する必要があります
while(error):
epoch += 1
error = 0
for i in xrange(self.numPoints):
dp = self.dotProduct(g[i], self.weights)
signum = self.sig(dp)
if dp < 0 and g[i].classification == 1:
self.updateWeights(signum, g[i])
error += 1
elif dp > 0 and g[i].classification == -1:
self.updateWeights(signum, g[i])
error += 1
elif dp == 0:
self.updateWeights(signum, g[i])
error += 1
if epoch > 10000:
return 0
print "Epochs %i, %i Dimensions" % (epoch, self.numWeights - 1)
return 1
def dotProduct(self, x, y):
ret = 0.0
for i in xrange(len(y)):
ret += x.points[i]*y[i]
return ret
def sig(self, x):
if x < 0:
return 1
if x > 0:
return -1
else:
return 0
def updateWeights(self, s, g):
for i in xrange(self.numWeights):
self.weights[i] = self.weights[i] + self.learningRate * s * g.points[i]
並行スレッドを使用したかったのですが、Python スレッド化は前のスレッドが終了するまでスレッドをロックするため、単一のメイン スレッドを実行するよりも速くなりません。
for i in xrange(self.numPoints): ただし、self.weights の値をロックすると、一度に 1 つのスレッドしか値を変更できなくなります。
これをどのように行うことができるか、誰にもアイデアがありますか?
これは小さなデータセットではうまく機能しますが、実際のデータを使用すると少し面倒になります