TensorFlow训练Logistic回归

Logistic回归

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

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


Logistic模型

对于二分类,输出假如线性回归模型为,则要将z转成y,即 y=g(z)。因而最直接的方式是用单位阶跃函数来表示,即 数据结构


如图,
机器学习

但阶跃函数不连续,因而用sigmoid函数替代之,为 函数


如图,

则有,
学习


即logistics函数,可化为, ui


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


如今要解决的问题是如何求得。对于给定样本集,每一个样本出现的几率为, 3d


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


对数似然为:


求对数似然最大化的。其中经过求导没办法求得解,因此确定要用迭代去逼近最优解,能够用梯度降低法或者牛顿法求的解。

实现代码

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())复制代码

相关阅读:

TensorFlow训练单特征和多特征的线性回归

机器学习之梯度降低法

机器学习的监督学习在研究什么

线性回归之最小二乘法

欢迎关注:

相关文章
相关标签/搜索