在用線性模型進行迴歸訓練時,有時須要根據這個線性模型進行分類,則要找到一個單調可微的用於分類的函數將線性迴歸模型的預測值關聯起來。這時就要用到邏輯迴歸,以前看吳軍博士的《數學之美》中說騰訊和谷歌廣告都有使用logistics迴歸算法。web
以下圖,能夠清晰看到線性迴歸和邏輯迴歸的關係,一個線性方程被邏輯方程歸一化後就成了邏輯迴歸。.算法
對於二分類,輸出假如線性迴歸模型爲,則要將z轉成y,即
如圖,
機器學習
但階躍函數不連續,因而用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())複製代碼
相關閱讀:
歡迎關注: