2016-09-03 3 views
1

이있는 투표 퍼셉트론 알고리즘 퍼셉트론 투표했다. 이것은 나의 의사 코드이다 :듀얼 형태

#m is the number of examples 

Initialize k = 0, a1 := 0, c1 := 0 
Repeat for T epochs: 
    for i = 1 to i = m 
     if (x[i], y[i]) is classified correctly then 
      c[k] = c[k] + 1 
     otherwise 
      k = k + 1 
      a[k][i] = a[k][i]+1 
      c[k] = 1 

출력의 다음이다 : (A_1, C1), (A_2, C2) ... (a_k, CK) 각각 A_I는 벡터

에게 어디 맞습니까? 바이어스를 추가해야합니까? 내가 훈련 세트를 예측하면 내가 얻을 수 있기 때문에

def __init__(self, kernel = linear_kernel, epochs = 50): 
    self.kernel = kernel 
    self.epochs = epochs 

def summation(self, a, y, x, xi, b): 
    s = 0 
    for j in range(0, len(x)): 
     s += (a[j]*y[j]*(self.kernel(x[j], xi))) + b 
    return s 

def maxNorm(self, x): 
    v = np.linalg.norm(x[0]) 
    for i in range(1, len(x)): 
     if (np.linalg.norm(x[i]) > v): 
      v = np.linalg.norm(x[i]) 
    return v 

def training(self, x, y): 
    k = 0 
    a = np.zeros(len(x), dtype=np.int) 
    alfa = [] 
    alfa.append(a.copy()) 
    print(alfa) 
    b = 0 
    bias = [] 
    bias.append(0) 
    c = [] 
    c.append(0) 
    for _ in range(self.epochs): 
     for i in range(len(y)): 
      if (y[i] * self.summation(a, y, x, x[i], b))<=0: 
       a[i] = a[i] + 1 
       alfa.append(a.copy()) 
       b = b + (y[i]*(self.maxNorm(x)**2)) 
       bias.append(b) 
       c.append(1) 
       k = k+1 
      else: 
       c[k] += 1 
    self.alfa = alfa 
    self.b = bias 
    self.c = c 
    print("b: ",len(self.b)) 
    print("c: ",len(self.c)) 

def predict(self,xTest, yTest, xTrain, yTrain): 
    print("a: ",self.alfa) 
    print("\nc:", self.c) 
    print(yTest) 
    print(yTrain) 
    SumFin=0 
    Err = np.zeros(len(xTest)) 
    nErr = 0 
    yPredict = [] 
    for i in range(len(xTest)): 
     for j in range(len(self.c)): 
      print(self.c[j]*(np.sign(self.summation(self.alfa[i], yTrain, xTrain, xTest[i], self.b[i])))) 
      SumFin += (self.c[j]*(np.sign(self.summation(self.alfa[i], yTrain, xTrain, xTest[i], self.b[i])))) 
     yPredict.append(np.sign(SumFin)) 

    for i in range(len(yTest)): 
     print("i = ",i," | yTest = ",yTest[i]," | yPredict = ",yPredict[i]) 
     if(yTest[i] != yPredict[i]): 
      nErr += 1 
      Err[i] += 1 
    print("Error rate: ", ((100*nErr)/len(xTest)), "%") 
    self.Err = Err 

이 코드의 일을 생각하지 않는다 :

클래스 퍼셉트론 (객체) : 여기

내가이 내 파이썬 구현 듀얼 퍼셉트론을 선정보고 오류율의 75 %.

은 누구도 날 도와 드릴까요? 감사합니다

답변

0

교육 : Voted Perceptron Training Algorithm

def voted_perceptron(x, target=y, nb_epoch=1): 
    k = v = c = 0 
    V = C = [] 
    for epoch in nb_epoch: 
     for i in range(len(x)): 
      y_pred = sign(v*k) 
      if y_pred == y: 
       c += 1 
      v += y[i]*x[i] 
      c = 1 
      k += 1 
      V.append(v) 
      C.append(c) 

    return V,C 

예측 : Voted Perceptron Prediction Algorithm

def vp_predict(V, C, X): 
    predictions = [] 
    for x in X: 
     s = 0 
     for w,c in zip(V,C): 
      s = s + c*sign(np.dot(w,x)) 
     predictions.append(sign(s)) 
    return predictions