大白話5分鐘帶你走進人工智慧-第十九節邏輯迴歸之優化點(4)

LHBlog發表於2019-05-01

                                                                                      第十九節邏輯迴歸之優化點(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,那我們可以把它調高或者調低,根據需求來定。

 

相關文章