用TensorFlow写逻辑斯蒂回归

来源:互联网 发布:java斐波那契数列第n项 编辑:程序博客网 时间:2024/05/29 04:48

用TensorFlow写逻辑斯蒂回归

具体代码实现

import numpy as npimport tensorflow as tfimport math# data : num num num num num num num ...num(0||1)#              ......class data_reader:    file_name = str()    def __init__(self,file_name):        data_reader.file_name = file_name    def get_data_list(self,num_lost):        file_ = open(self.file_name,'r+')        db = list()               for line in file_.readlines():            reader_list = list()            for reader_ in line.split():                try:                    eval(reader_)                except:                    reader_list.append(num_lost)                  else:                    reader_list.append(eval(reader_))                 db.append(reader_list)              file_.close()        return db    def get_x_y_list(self,db):            if type(db) != type(list()):            return None        x_list = list()        y_list = list()        for reader_list in db:            length_list = len(reader_list)            y_list.append(reader_list[length_list-1])            del reader_list[length_list-1]            x_list.append(reader_list)        return x_list,y_listif __name__ == '__main__':    # 读取数据    reader = data_reader('test.dat')    # 数据初始化    x_list,y_list = reader.get_x_y_list(reader.get_data_list(num_lost = 1.0))    # 创建变量    x_data = tf.constant(np.array(x_list),dtype = tf.float32)    y_data = tf.constant(np.mat(y_list).transpose(),dtype = tf.float32)    # 权重的初始化    Weights = tf.Variable(tf.zeros([len(x_list[0]),1]))    biase = tf.Variable(tf.zeros([1, 1]))    # 方程 logistic    # matmul:矩阵乘法    # exp : e^x函数    y = 1.0 / (1 + tf.exp(-tf.matmul(x_data,Weights) - biase))    # 差值     loss = tf.reduce_mean(-(tf.log(y)*y_data + (1 - y_data)*tf.log(1 - y)))    # 建立优化器    optimizer = tf.train.GradientDescentOptimizer(0.1)    # 减少误差,提升准确度    train = optimizer.minimize(loss)    # 输入所有的变量    init = tf.global_variables_initializer()    # 初始化    with tf.Session() as sess:        # 激活神经网络        sess.run(init)        # 训练1000步        for step in range(1001):            sess.run(train)            print(step,'\n',sess.run(Weights),sess.run(biase),sess.run(loss))
原创粉丝点击