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訓練單特徵和多特徵的線性迴歸

機器學習之梯度降低法

機器學習的監督學習在研究什麼

線性迴歸之最小二乘法

歡迎關注:

相關文章
相關標籤/搜索