1. 逻辑回归----梯度上升
  2. 测试代码
  3. import math  
  4. def sigmoid(data, weight):  
  5.     z = sum([data[i]*weight[i] for i in range(len(data))])  
  6.     try:  
  7.         return 1.0/(1+math.exp(-z))  
  8.     except:  
  9.         if z > 0: return 1.0  
  10.         else: return 0.0  
  11.       
  12. def logistic_classify(data, weight):  
  13.     prob = sigmoid(data, weight)  
  14.     if prob > 0.5: return 1.0  
  15.     else: return 0.0  
  16.       
  17. def grad_ascent(dataset, datalabel):  
  18.     weight = [for i in range(len(dataset[0]))]  
  19.     alpha = 0.01  
  20.     for k in range(500):  
  21.         errset = []  
  22.         for i in range(len(dataset)):  
  23.             sig = sigmoid(dataset[i], weight)  
  24.             errset.append(datalabel[i]-sig)  
  25.               
  26.         for i in range(len(dataset[0])):  
  27.             for j in range(len(dataset)):  
  28.                 weight[i] += alpha*dataset[j][i]*errset[j]   
  29.     return weight  
  30.       
  31. def rand_grad_ascent(dataset, datalabel):  
  32.     weight = [for i in range(len(dataset[0]))]  
  33.     alpha = 0.01  
  34.     for i in range(len(dataset)):  
  35.         sig = sigmoid(dataset[i], weight)  
  36.         err = datalabel[i] - sig  
  37.         for j in range(len(weight)):  
  38.             weight[j] += alpha*err*dataset[i][j]  
  39.               
  40.     return weight  
  41.       
  42. def test(class_func):  
  43.     f_train = open('horseColicTraining.txt')  
  44.     f_test = open('horseColicTest.txt')  
  45.       
  46.     trainset, trainlabel = [], []  
  47.     for line in f_train.readlines():  
  48.         line_cur = line.strip().split('\t')  
  49.         trainset.append([1]+[float(line_cur[i]) for i in range(21)])  
  50.         trainlabel.append(float(line_cur[21]))  
  51.           
  52.     trainweight = class_func(trainset, trainlabel)  
  53.       
  54.     errnu, tolnum= 0, 0  
  55.     for line in f_test.readlines():  
  56.         line_cur = line.strip().split('\t')  
  57.         pred_class = logistic_classify([1]+[float(line_cur[i]) for i in range(21)], trainweight)  
  58.         read_class = float(line_cur[21])  
  59.         if pred_class == read_class:  
  60.             #print "class succ"  
  61.             pass  
  62.         else:  
  63.             errnu += 1  
  64.             #print "class fail, read_class=%d, pred_class=%d" %(read_class, pred_class)  
  65.         tolnum += 1  
  66.           
  67.     print "totol num=%d, fail num = %d, rate = %f" % (tolnum, errnu, float(errnu)/tolnum)  
  68.       
  69. if __name__ == '__main__':  
  70.     test(grad_ascent)  
  71.     test(rand_grad_ascent)  

来自:http://blackproof.iteye.com/blog/2064084

仅供学习参考

posted on 2017-12-21 10:43  ALT_LB  阅读(528)  评论(0编辑  收藏  举报