TensorFlow训练Logistic回归

Logistic回归

在用线性模型进行回归训练时,有时需要根据这个线性模型进行分类,则要找到一个单调可微的用于分类的函数将线性回归模型的预测值关联起来。这时就要用到逻辑回归,之前看吴军博士的《数学之美》中说腾讯和谷歌广告都有使用logistics回归算法。

如下图,可以清晰看到线性回归和逻辑回归的关系,一个线性方程被逻辑方程归一化后就成了逻辑回归。.

Logistic模型

对于二分类,输出y∈{0,1},假如线性回归模型为z=θTx,则要将z转成y,即y=g(z)。于是最直接的方式是用单位阶跃函数来表示,即

y=?????0,0.5,1,z<0;z=0;z>0;

如图,

但阶跃函数不连续,于是用sigmoid函数替代之,为

y=11+e?z

如图,

则有,

y=11+e?(θTx)

即logistics函数,可化为,

lny1?y=θo+θ1x1+θ2x2+...+θmxm

此即为对数几率回归模型,其中y看成是样本x正例的概率,1-y则为样本x负例的概率,则

lnp(y=1|x)1?p(y=1|x)=θTx

现在要解决的问题是如何求得θ。对于给定样本集{(xi,yi)}mi=1,每个样本出现的概率为,

p(yi,xi)=p(yi=1|xi)yi(1?p(yi=1|xi))1?yi

其中yi为1或0。则样本集出现的似然函数为

L(θ)=∏i=1mp(yi,xi)=∏i=1mp(yi=1|xi)yi(1?p(yi=1|xi))1?yi

对数似然为:

l(θ)=∑i=1mlnp(yi,xi)

=∑i=1myilnp(yi=1|xi)+(1?yi)ln(1?p(yi=1|xi))

=∑i=1myilnp(yi=1|xi)1?p(yi=1|xi)+∑i=1mln(1?p(yi=1|xi))

=∑i=1myiθTxi?∑i=1mln(1+eθTxi)

求对数似然最大化的θ。其中通过求导没办法求得解,所以肯定要用迭代去逼近最优解,可以用梯度下降法或者牛顿法求的解。

实现代码

import tensorflow as tf
from numpy import *

x_train = [[1.0, 2.0], [2.0, 1.0], [2.0, 3.0], [3.0, 5.0], [1.0, 3.0], [4.0, 2.0], [7.0, 3.0], [4.0, 5.0], [11.0, 3.0],
           [8.0, 7.0]]
y_train = [1, 1, 0, 1, 0, 1, 0, 1, 0, 1]
y_train = mat(y_train)

theta = tf.Variable(tf.zeros([2, 1]))
theta0 = tf.Variable(tf.zeros([1, 1]))
y = 1 / (1 + tf.exp(-tf.matmul(x_train, theta) + theta0))

loss = tf.reduce_mean(- y_train.reshape(-1, 1) * tf.log(y) - (1 - y_train.reshape(-1, 1)) * tf.log(1 - y))
train = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

init = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init)
for step in range(1000):
    sess.run(train)
print(step, sess.run(theta).flatten(), sess.run(theta0).flatten())


欢迎关注:

时间: 2024-11-09 06:00:29

TensorFlow训练Logistic回归的相关文章

TensorFlow经典案例4:实现logistic回归

#TensorFlow实现Logistic 回归 import tensorflow as tf #导入手写数字集 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("/tmp/data/", one_hot=True) #学习参数 learning_rate = 0.01 training_epoches = 25 batch_size = 100

2.2 logistic回归损失函数(非常重要,深入理解)

上一节当中,为了能够训练logistic回归模型的参数w和b,需要定义一个成本函数 使用logistic回归训练的成本函数 为了让模型通过学习来调整参数,要给出一个含有m和训练样本的训练集 很自然的,希望通过训练集找到参数w和b,来得到自己得输出 对训练集当中的值进行预测,将他写成y^(I)我们希望他会接近于训练集当中的y^(i)的数值 现在来看一下损失函数或者叫做误差函数 他们可以用来衡量算法的运行情况 可以定义损失函数为y^和y的差,或者他们差的平方的一半,结果表明你可能这样做,但是实际当中

2.9 logistic回归中的梯度下降法(非常重要,一定要重点理解)

怎么样计算偏导数来实现logistic回归的梯度下降法 它的核心关键点是其中的几个重要公式用来实现logistic回归的梯度下降法 接下来开始学习logistic回归的梯度下降法 logistic回归的公式 现在只考虑单个样本的情况,关于该样本的损失函数定义如上面第三个公式,其中a是logistic回归的输出,y是样本的基本真值标签值, 下面写出该样本的偏导数流程图 假设样本只有两个特征x1和x2 为了计算Z,我们需要输入参数w1和w2和b 因此在logistic回归中,我们要做的就是变换参数w

Logistic回归

Logistic回归 主要思想: 根据训练集找到一个适合的预测函数(线性函数),一般用h表示,该函数就是我们需要找的分类函数,用它来预测输入数据的分类. 构造一个Cost(损失函数),该函数为每个输入数据的预测类别(h)与真实数据的类别(y)之间的偏差,可以以二者间的差值,即(h-y)或其他形式来计算偏差.由于需要综合考虑所有训练数据的损失,需要将数据的损失求和或求平均,表示所有训练数据预测出的类别与实际类别的偏差,将Cost求和或者求平均,记为J(θ),表示所有训练数据预测值与实际值得偏差.

logistic回归与手写识别例子的实现

本文主要介绍logistic回归相关知识点和一个手写识别的例子实现 一.logistic回归介绍: logistic回归算法很简单,这里简单介绍一下: 1.和线性回归做一个简单的对比 下图就是一个简单的线性回归实例,简单一点就是一个线性方程表示 (就是用来描述自变量和因变量已经偏差的方程) 2.logistic回归 可以看到下图,很难找到一条线性方程能将他们很好的分开.这里也需要用到logistic回归来处理了. logistic回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数映射,

Logistic回归模型和Python实现

回归分析是研究变量之间定量关系的一种统计学方法,具有广泛的应用. Logistic回归模型 线性回归 先从线性回归模型开始,线性回归是最基本的回归模型,它使用线性函数描述两个变量之间的关系,将连续或离散的自变量映射到连续的实数域. 模型数学形式: 引入损失函数(loss function,也称为错误函数)描述模型拟合程度: 使J(w)最小,求解优化问题得到最佳参数. Logistic回归 logistic回归(Logistic regression 或 logit regression)有时也被

对线性回归,logistic回归和一般回归的认识

假设有一个房屋销售的数据如下:这个表类似于北京5环左右的房屋价钱,我们可以做出一个图,x轴是房屋的面积.y轴是房屋的售价,如下: 如果来了一个新的面积,假设在销售价钱的记录中没有的,我们怎么办呢? 我们可以用一条曲线去尽量准的拟合这些数据,然后如果有新的输入过来,我们可以在将曲线上这个点对应的值返回.如果用一条直线去拟合,可能是下面 的样子:绿色的点就是我们想要预测的点. 首先给出一些概念和常用的符号. 房屋销售记录表:训练集(training set)或者训练数据(training data)

机器学习实战3:逻辑logistic回归:病马实例

本文介绍logistic回归,和改进算法随机logistic回归,及一个病马是否可以治愈的案例.例子中涉及了数据清洗工作,缺失值的处理. 一 引言 1 sigmoid函数,这个非线性函数十分重要,f(z) = 1 / (1 + e^(-z) ), 画图如下: 这个函数可以很好的把数轴上的值映射到0,1区间,所以很好的解决了分类问题.下面是代码: def sigmoid(inX): return 1.0/(1+exp(-inX)) 2 梯度上升法是我们常用的最优化方法,公式.就是说沿这梯度方向迭代

5 Logistic回归(二)

5.2.4 训练算法:随机梯度上升 梯度上升算法:在每次更新回归系数时都需要遍历整个数据集,在数十亿样本上该算法复杂度太高. 改进方法:随机梯度上升算法:一次仅用一个样本点更新回归系数. 由于可以在新样本到来时对分类器进行增量式更新,因此随机梯度上升算法是一个在线学习算法.与“在线学习”相对应,一次处理所有数据被称作“批处理”. #5-3:随机梯度上升算法 def stocGradAscent0(dataMatrix, classLabels): m, n = shape(dataMatrix)