
第十九節邏輯回歸之優化點(4)
(資料圖片僅供參考)
上一節中我們講解了邏輯回歸導函數求解的問題,一步步推導出交叉熵損失函數的梯度。很是不容易,這節中我們一起看下邏輯回歸的優化有哪些點?
第一點關于邏輯回歸優化:和多元性回歸是一模一樣。要不要設置w0?比如下圖:
之前說多元性回歸是做擬合,假如現在要分類的話,我們知道分類對于一維來說是找一個點,對于二維來說是來找條線。如果根據現在已知的點,利用多元線性回歸做分類,找到比較好的分界線就是w1*x1+w2*x2+b=0這條線,它肯定會有截距,并且截距不為零。如果不設置w0的話,就意味著要找的線,它必須得過原點。所以說在多元性回歸里面,設置w0,就意味著有更多找到最優解的可能性。下圖是有w0和無w0的對比:
而對于邏輯回歸來說,同樣如此。如果設置w0,意味著有更多的可能性去找到最優解的分界線,然后把已有的數據分開;如果不設置w0,意味著分界線必須得穿過原點,不可能找到完美的把紅綠兩個類別分開。 我們設置截距w0的方式是手動的為數據集x增加一列全1。因此第一點:邏輯回歸的優化或者也可以把它泛化成多元線性回歸的優化,就是設置截距w0。
第二點關于邏輯回歸優化:如果碰到線性不可分的問題,我們可以考慮進行升維。怎么來看它到底是不是線性不可分呢?我們可以把數據集放到邏輯回歸里面去,算個模型出來,如果那個模型的準確率差了八丈遠,很有可能會產生線性不可分的問題,你調整數據就行了。沒有必要說拿到數據,先看數據的分布,看它是不是線性不可分的。比如下圖:
如果做分類,要找到分界線,橫軸是x2,縱軸是x1,兩個維度,我們能不能在二維里面找到一個線,對已有的數據進行很好的分割?答案是不能,為什么要強調線?因為邏輯回歸,它就是θTx,只不過是對它進行一步縮放。
所以邏輯回歸的本質還是線性的,如果用邏輯回歸基于現在的數據點不動,我們就一定得找個直線,對二維的數據點進行分割,但是這是線性不可分的情況。不可能找到直線對數據進行分割。所以直線不行,能不能找一個曲線,對已有數據進行分割?當然可以,但是用曲線的話就不叫邏輯回歸,就叫其它的算法了。如果非要用邏輯回歸,將data數據帶到agorithm算法里面,開發結果是模型。如果算法保持不動,為了讓模型擬合的更好,或者是分類更好,我們就要改數據。之前在多元線性回歸改變數據叫升維,比如說年齡和收入它不是線性變化的,那么給x數據里面多加一個age的平方,再多加一個維度進來。
這個地方思路也是一樣的,升維。經驗告訴我們是相乘,就是再多加一個維度,計算機模擬之后這個加的維度是x1*x2。當然如果用多項式回歸對原來數據集加上x1^2+x2^2+x1*x2也可以,所以當維度少的情況下,可以人為地去升維,添加新的維度;維度多的情況下,直接多項式回歸。
我們用幾何圖示表示,把點投影到高維空間中去,也就是升維,比如下面這張圖:
會發現當再多一個維度的話,原來的數據點就得把它映射到更高的維度里面去,這里面多了一個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,那我們可以把它調高或者調低,根據需求來定。