zoukankan      html  css  js  c++  java
  • 逻辑回归----梯度上升

    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(' ')  
    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(' ')  
    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

    仅供学习参考

  • 相关阅读:
    深入浅出:了解前后端分离优势、前后端接口联调以及优化问题
    深入浅出:了解JavaScript中的call,apply,bind的差别
    Vue2.0 搭建Vue脚手架(vue-cli)
    深入浅出:promise的各种用法
    深入浅出:了解常见的设计模式(闭包、垃圾回收机制)
    sql server xml 功能
    sqlite 用法
    PowerDesigner使用
    asp.net 开发注意的几点
    vue template
  • 原文地址:https://www.cnblogs.com/altlb/p/8078998.html
Copyright © 2011-2022 走看看