邏輯回歸模型是預(yù)測連續(xù)值或者是任何真數(shù)的?,F(xiàn)在我們將展現(xiàn)一個類似“這是垃圾郵件么?”問題回答Yes-No這種類型問題的模型。
這里通常用的函數(shù)是邏輯回歸函數(shù)(logistic function).由于這個函數(shù)的形狀是S型的,所以該函數(shù)也被稱為sigmoid function。

邏輯回歸函數(shù)是一個概率分布函數(shù):給出指定的輸入值,并且計算輸出正確的可能性。
這個函數(shù)只能接受一個單一的值。為了讓函數(shù)接收來自訓(xùn)練數(shù)據(jù)集的多維數(shù)據(jù)值或特征值,我們需要將他們轉(zhuǎn)換成一個單一值。這個時候我們可以使用線性回歸函數(shù)表達(dá)式來這樣做。這一點(diǎn)我們在上一節(jié)講過。
上述的內(nèi)容在代碼上展示的話,你可以再次使用線性模型;但是你需要修改成應(yīng)用sigmoid的預(yù)測模型:

現(xiàn)在,讓我們關(guān)注一下這個模型的損失函數(shù)(loss function).我們將會使用平方差。邏輯函數(shù)會計算答案是“Yes”的概率。在訓(xùn)練集合中,一個“Yes”代表著答案是“Yes”的概率是100%或者說是輸出的值將會是1;那么loss應(yīng)該計算的是模型針對指定樣本分配的概率小于1的概率的平方。所以(consequently),一個“no”的答案的概率應(yīng)該是0;于是(hence),loss是為該示例分配的模型的概率,再次平方。
(PS:其實(shí)作者這句話說的有點(diǎn)低估大家的數(shù)學(xué)基礎(chǔ)了。人人都知道(x-y)^2中當(dāng)y=0的時候,那就是x自身的平方。當(dāng)y=1的時候,就是x與1的距離再次平方。注意是距離,標(biāo)量,不是向量)
考慮這樣一種情況:當(dāng)期望輸出的答案是Yes (P.S:這里的yes在機(jī)器學(xué)習(xí)中是被稱為label),而模型的對于這個期望的可能值非常小,接近于0,那就意味著這個模型輸出的結(jié)果100%的是“no”.
如果模型的預(yù)測結(jié)果是20,30甚至是有50%的可能性是“no”,那么平方差應(yīng)該去懲罰(penalizes)這樣的情況(a case)。
針對這種情況,有一種loss function的效果會比較好,那就是交叉熵(cross entrpy)函數(shù)。

我們可以根據(jù)預(yù)測“yes”的可能性,對兩種loss function的變化做出對比。

交叉搧和平方差(L2)被繪制在了一起。交叉熵的輸出是一些很大的值,這是因?yàn)樗嬎愠龅妮敵雠c期望的結(jié)果距離很遠(yuǎn)。
在交叉驗(yàn)證上,預(yù)測的概率接近于0的時候表示“Yes”,懲罰值會接近于無窮大。這會使得訓(xùn)練后的模型不會做出任何錯誤預(yù)測。交叉熵更加適合作為該模型的損失函數(shù)。
tensorflow中有提供直接計算S函數(shù)輸出的交叉熵、優(yōu)化步驟等:

好了,現(xiàn)在讓我們給模型一些數(shù)據(jù)來訓(xùn)練。我們的數(shù)據(jù)集合來自Titanic survivor
Kaggle contest datasethttps://www.kaggle.com/c/titanic/data.
這個模型會根據(jù)乘客的年齡、性別以及車票等級來推斷乘客是否能夠幸存下來。
為了使程序更有趣,我們來使用文件來讀取數(shù)據(jù)。所以要繼續(xù)下載train.csv文件。
以下是讀取cvs文件的基本代碼。在我們寫的框架里面添加一個新的方法。這個方法可以讀取并且解析csv文件,同時可以創(chuàng)建一個批次來讀取在單個張量中打包的許多行,以有效地計算推理。

在這個數(shù)據(jù)集合中你不得不使用分類數(shù)據(jù)(categorical data)。票類和性別是字符串類型的特征,這兩類是具有預(yù)定義的可能的值集合。我們要在推理模型中使用它們,就需要將它們轉(zhuǎn)換為數(shù)字。最簡單的方法(A naive approach)可能為每個可能的值分配一個數(shù)字。例如,您可以使用“1”作為第一門票類,“2”為第二,“3”為第三。然而,這迫使價值觀在它們之間存在一個并不存在的線性關(guān)系。
實(shí)際上,你可以把每個分類擴(kuò)展為N個Boolean特征,或者給它設(shè)置一個初始值。這樣就可以獨(dú)立的里哦阿杰每個可能值的重要性了。在我們數(shù)據(jù)樣本中,買“一等”票的人,應(yīng)該比其他人有更大可能性幸免。
When working with categorical data, convert it to multiple boolean features,one for each possible value. This allows the model to weight each possiblevalue separately.
在這個分類的例子中,可能出現(xiàn)的值只有兩種,比如數(shù)據(jù)集中的性別。任何一個單一變量就可以表示一種性別,這是因?yàn)榭梢杂脭?shù)值來表達(dá)值之間的線性關(guān)系。
例如,如果female=1,且male=0,那么:female= 1- male (男性= 1-女性), 同時一個權(quán)重就可以學(xué)的兩種可能狀態(tài)。

在上面的代碼中,我們在調(diào)用read_csv作為定義輸入,同時在轉(zhuǎn)換數(shù)據(jù)。為了轉(zhuǎn)換boolean,我們使用tf.equal方法去對比一個去定常量值。我們還必須將布爾值轉(zhuǎn)換為一個數(shù)字,需要用tf.to_float的推斷。然后我們用tf.pack將所有的布爾包裝在一個單張張量中。
最終,讓我們看看我們的模型:

為了評估結(jié)果,我們將對一批訓(xùn)練集進(jìn)行推理,并計算正確預(yù)測的實(shí)例數(shù)量。
我們稱之為測量精度(measuring the accuracy)。

由于模型計算出答案為“yes”的概率,如果示例的輸出大于0.5,我們將其轉(zhuǎn)換為正確回答(也就是“Yes”)。然后我們使用tf.equal比較實(shí)際值的關(guān)系。最后,我們使用tf.reduce_mean,它計算所有正確答案(每個都添加1),并將該批次中的樣本總數(shù)除以正確答案的百分比。
下期介紹:
4.4 Softmax classification
敬請期待。。。