tensorflow入门(4)逻辑回归分类器
2017-05-27 13:53
555 查看
1、逻辑回归
Logistic回归是一种广义线性模型(generalized linear model),一般用于分类问题。其因变量可以是二分类的,也可以是多分类的。如果因变量是连续的,就是多重线性回归;
如果因变量是二项分布,就是Logistic回归;
如果因变量是Poisson分布,就是Poisson回归;
如果因变量是负二项分布,就是负二项回归。
逻辑回归与线性回归的区别在于:增加了一个logitstic函数,把输出从负无穷到正无穷,压缩到0和1之间,变成概率(可能性)
2、逻辑回归分类器
2.1 原理
逻辑回归分类器(multinonial logistic classification)原理图
计算过程
输入一个样本X—>logit分数—>概率值probability—>标签向量label
其中用到了线性模型、softmax函数和One-Hot编码。
2.2 模型构建
广义线性模型:向量表示。y=wx+bsoftmax函数:把结果(score/logit)转换成概率(probability),结果越大,概率越大;概率之和为1。
softmax(a) 当a为数组时,返回相同大小的数据;当a为矩阵时,返回相同大小的矩阵,将每一列看作一个样本,因此每一列的和为1。
注意:等比例增加数组a中的每一个值,可以分类更加明显,比如,softmax(10*a)与softmax(a/10)的区别。
sigmoid和softmax函数的区别:
sigmoid将一个实数real value映射到(0,1)的区间
s(x)=L/1+e−k(x−x0)
其中,x0表示了函数曲线的中心(sigmoid midpoint),k是曲线的坡度。
softmax函数的本质就是将一个K 维的任意实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。
s(x)j=exj/∑k=1Kexk
One-Hot编码:把概率(probability)转换成标签(label)
优点:简单方便
缺点:当遇到数以万计的分类类别时,One-Hot编码向量会非常大,而且里面有很多0。可以用嵌入的方法来解决该问题。
2.3 性能评价
交叉熵:通过计算概率向量与经过One-Hot编码的标签向量的距离,来衡量分类的优劣。罚函数loss
先对训练集中每一个样本与其对应标签的距离求和,再求平均。
2.4 模型求解方法
梯度下降法:找到权重项w和偏差b使罚函数loss最小。2.5正则化输入与初始化参数
问题1:图像如何输入?问题2:如何初始化参数?
问、为什么要使正则化变量(使其均值为0且尽可能同方差)?
1、保证数值计算的稳定性:极大的数和极小的数相加会有错误。
比如:设一个变量是10亿 1 billion (10^9), 然后向它加 10^(-6) 加一百万 (10^6) 次,然后再减去10亿,结果是0.95,而不是1。
2、优化理论证明:当计算的值均值为0且尽可能同方差,优化搜索更快。
正则化输入(训练数据):
初始化参数(随机权重和偏差):从正态分布(0,sigma)中随机抽样作为权重和偏差
sigma值决定了在初始点输出的数量级,sigma越大,分布越扁,意味着有很大可能取到峰值;sigma越小,分布越集中,意味着取值越不确定。一般是开始于一个不确定的分布,随着训练的过程越来越优。因此sigma取值要偏小。
3、tensorflow代码
# encoding: utf-8 import input_data import tensorflow as tf mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) # 建立抽象模型 x = tf.placeholder(tf.float32, [None, 784]) # 占位符 y = tf.placeholder(tf.float32, [None, 10]) W = tf.Variable(tf.zeros([784, 10])) # matrix 784*10 b = tf.Variable(tf.zeros([10])) # matrix 1*10 # a = f(W*x + b) a = tf.nn.softmax(tf.matmul(x, W) + b) # 定义损失函数和训练方法 # tow_loss = E[1/2*(y-a)^2] # cross_loss = E[y*ln(a)+(1-y)ln(1-a)] # reduce_sum(input_tensor, reduction_indices) # function: return the mean of a tensor on row or column # input_tensor: a matrix # reduction_indices: which index? none:all, 0: each column, 1: each row cross_entropy = tf.reduce_mean(-tf.reduce_sum(y * tf.log(a), reduction_indices=[1])) # 损失函数为交叉熵 optimizer = tf.train.GradientDescentOptimizer(0.5) # 梯度下降法,学习速率为0.5 train = optimizer.minimize(cross_entropy) # 训练目标:最小化损失函数 # Test trained model # argmax(input, axis=None, name=None, dimension=None) # function: return maximum value of a tensor on row or column # axis is opposite to dimension: axis=0 means dimension=1 # equal(x, y, name=None) # function: return boolean value of two tensors # cast(x, dtype, name=None): # function: Casts a tensor to a new type. correct_prediction = tf.equal(tf.argmax(a, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # Train sess = tf.InteractiveSession() # 建立交互式会话 tf.initialize_all_variables().run() for i in range(1000): batch_xs, batch_ys = mnist.train.next_batch(100) train.run({x: batch_xs, y: batch_ys}) print(sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels}))
相关文章推荐
- [TensorFlow]入门学习笔记(4)-BasicModel 线性回归,逻辑回归和最近邻模型
- 深度学习入门实战(三)-图片分类中的逻辑回归
- (理解)线性回归, 逻辑回归和线性分类器,Softmax回归。
- 逻辑回归:从入门到精通
- 深度学习入门(二) 线性回归、逻辑回归、正则化过程、神经网络简介
- 深度学习框架Tensorflow学习(四)----逻辑回归
- 机器学习-逻辑回归分类器
- sklearn分类器算法:逻辑回归及案例分析
- 机器学习入门(13)--逻辑回归(1)
- 零基础入门深度学习五:逻辑回归
- 判别式分类器vs生成式分类器:逻辑回归和朴素贝叶斯的比较
- spark厦大----逻辑斯蒂回归分类器--spark.ml
- 利用TensorFlow实现多元逻辑回归
- TensorFlow深度学习笔记 逻辑回归 实践篇
- Tensorflow实现逻辑分类器
- Machine Learning - WEEK 1 2 3- 线性回归 、逻辑回归、梯度下降法及其优化算法、传统方法、 Octave 入门
- 机器学习入门(14)--逻辑回归(2)
- Tensorflow学习笔记(三)——用Tensorflow实现线性回归和逻辑回归
- 代码,逻辑回归(logistic_regression)实现mnist分类(TensorFlow实现)
- tensorflow之逻辑回归