第十九節邏輯迴歸之優化點(4)算法
上一節中咱們講解了邏輯迴歸導函數求解的問題,一步步推導出交叉熵損失函數的梯度。非常不容易,這節中咱們一塊兒看下邏輯迴歸的優化有哪些點?app
第一點關於邏輯迴歸優化:和多元性迴歸是如出一轍。要不要設置w0?好比下圖:函數
而對於邏輯迴歸來講,一樣如此。若是設置w0,意味着有更多的可能性去找到最優解的分界線,而後把已有的數據分開;若是不設置w0,意味着分界線必須得穿過原點,不可能找到完美的把紅綠兩個類別分開。 咱們設置截距w0的方式是手動的爲數據集x增長一列全1。所以第一點:邏輯迴歸的優化或者也能夠把它泛化成多元線性迴歸的優化,就是設置截距w0。優化
第二點關於邏輯迴歸優化:若是碰到線性不可分的問題,咱們能夠考慮進行升維。怎麼來看它究竟是不是線性不可分呢?咱們能夠把數據集放到邏輯迴歸裏面去,算個模型出來,若是那個模型的準確率差了八丈遠,頗有可能會產生線性不可分的問題,你調整數據就好了。沒有必要說拿到數據,先看數據的分佈,看它是否是線性不可分的。好比下圖:spa
若是作分類,要找到分界線,橫軸是x2,縱軸是x1,兩個維度,咱們能不能在二維裏面找到一個線,對已有的數據進行很好的分割?答案是不能,爲何要強調線?由於邏輯迴歸,它就是θTx,只不過是對它進行一步縮放。設計
因此邏輯迴歸的本質仍是線性的,若是用邏輯迴歸基於如今的數據點不動,咱們就必定得找個直線,對二維的數據點進行分割,可是這是線性不可分的狀況。不可能找到直線對數據進行分割。因此直線不行,能不能找一個曲線,對已有數據進行分割?固然能夠,可是用曲線的話就不叫邏輯迴歸,就叫其它的算法了。若是非要用邏輯迴歸,將data數據帶到agorithm算法裏面,開發結果是模型。若是算法保持不動,爲了讓模型擬合的更好,或者是分類更好,咱們就要改數據。以前在多元線性迴歸改變數據叫升維,好比說年齡和收入它不是線性變化的,那麼給x數據裏面多加一個age的平方,再多加一個維度進來。3d
這個地方思路也是同樣的,升維。經驗告訴咱們是相乘,就是再多加一個維度,計算機模擬以後這個加的維度是x1*x2。固然若是用多項式迴歸對原來數據集加上x1^2+x2^2+x1*x2也能夠,因此當維度少的狀況下,能夠人爲地去升維,添加新的維度;維度多的狀況下,直接多項式迴歸。blog
咱們用幾何圖示表示,把點投影到高維空間中去,也就是升維,好比下面這張圖:element
會發現當再多一個維度的話,原來的數據點就得把它映射到更高的維度裏面去,這裏面多了一個x1x2的軸,這樣咱們能不能給它分割?咱們知道一維的狀況下,若是找到分界,一個軸的分界就是一個點;二維的狀況下是個平面,若是要找到分界,對於線性迴歸來講是條直線;若是是三維的話,若是把一個立體分紅兩部分,咱們須要一個平面。變成三維以後生成一個維度,原來線性不可分的就變成線性可分的了,就是去找一個平面,把兩個很差分的類別很好的分開。這就意味着咱們能夠再一次去應用線性的模型邏輯迴歸去找一個平面,至關於改變數據點,去升維來作分類了。開發
第三點關於邏輯迴歸優化:改變閾值。以前灌輸的概念是0到1的區間,咱們拿0.5來做爲分界,大於0.5的就是1這個類別;小於0.5的就是0這個類別。可是0.5這個閾值能夠調能夠變,根據需求來變。若是是0到1這個區間範圍內,把0.5做爲一個分類的閾值的話,你以爲對正例和負例進行分類是公平的。什麼叫不公平?就是把閾值從0.5調到0.3,小於0.3的纔是負例,大於0.3的纔是正例。
咱們看個生活中的例子,假如模型是來判別某個病人它是否得了癌症,若是病人是癌症,模型給它斷定成不是癌症,這件事情很明顯是判錯;還有一種狀況若是病人它沒有得癌症,模型判別是癌症,也是判錯了。這件事情哪個更不能接受,就要看需求,看醫院算法工程師告訴你的需求是什麼,假如醫院告訴個人需求是若是病人是癌症,模型給它斷定成不是癌症這種狀況不可饒恕。你就要把這種錯誤發生的機率給它變小。什麼狀況斷定爲不是癌症?是和不是就是一個正例和一個負例。若是想要避免上面這種狀況發生,咱們能夠把閾值從0.5調成0.3,換句話說就是模型判別的結果ŷ小於0.3,咱們認爲沒有得癌症,若是大於0.3,就認爲得了癌症,也就是儘量的多判斷些癌症病人出來,使若是病人是癌症,模型給它斷定成不是癌症這種狀況少發生點。由於ŷ大於0.3就說你得癌症了,其實不少人沒有得癌症,因此錯誤率變大就是代價。雖然總體的錯誤率大了,可是規避一些不能接受的風險。這風險按需求來定。
事實上閾值調整常常發生,好比你設計一個模型,公司讓你用這個模型去炒股,若是是0.5的話就意味只要大於0.5,認爲這支股票會漲;只要小於0.5,就告訴公司會跌很高了。實際上大於0.5的狀況不少,0.51大於0.5,0.99大於0.5,0.49小於0.5,0.01小於0.5。因此那些股票的軟件它一般都是把這個閾值大於0.8,它會告訴公司說這支股票會漲,小於0.2纔會告訴公司這支股票會跌。根據調整閾值能夠來規避一些不能接受的風險。由於51%會漲,49%會跌,這個風險仍是很大的。好比說去銀行裏面買理財,它首先會讓我到一個表,以後她說我是最保守型用戶,意味着理財產品大於0.95的時候我纔會去買,小於0.95的都不會去買。其實就是它經過填表,獲取到了你這我的心中的一個閾值。因此閾值是能夠來調的。
閾值是在何時來調的?就是θ已經算出來了,你要去使用這個模型,θ和x帶到1/(1+e-θTx)公式裏面來,而後會獲得一個ŷ,是0到1之間的一個值,在使用ŷ的時候,你再也不跟0.5進行判別了,而是跟0.3進行判別。特地強調一下,閾值0.5和0.3是在使用的時候纔會去改,在訓練的時候其實和閾值不要緊。由於訓練時候,正例就是1.0的機率,負例就是0.0機率,因此它在訓練的時候沒有這樣的閾值,只有在使用的時候纔有閾值。
咱們總結下邏輯迴歸優化:
第一點是設置w0,最好加上,多元性迴歸裏面一樣也能夠加上w0,爲了有更多的模型的可能性。
第二點是升維, 升維在多元性迴歸裏面,是爲了更好的擬合非線性的數據,在邏輯迴歸裏進行升維是爲了解決線性不可分的問題。
第三點是爲了去規避一些風險,在使用模型的時候能夠去調一下閾值,默認二分類閾值就是0.5,那咱們能夠把它調高或者調低,根據需求來定。