數據預處理是個有意思的問題,因為它讓線性模型變得可以」工作「了。

別急,我不是說我們之前講的什麼用都沒有,只是它只能在比較小的範圍內工作。今天,讓我講一些可以擴大線性模型威力的方法!

首先,我們可以對一些數據評估,來判斷這個數據和我們想要的結果是否是線性關係的。

比如,你收集了別墅距離市中心的位置(你可能已經厭倦了這個例子,在講下一個模型時,我儘可能換一個例子)。但實際上,別墅的價格很可能和距離的平方是線性關係,如果你不對距離提前處理,很可能讓你最後訓練出來的模型不夠精確。怎麼辦呢?如果你是個高中生,正在飽受高考摧殘的高中生,你應該知道該怎麼做。如果你不知道的話,讓我來給你補補數學。實際上,你只需要把之前代入公式的x換成x的平方就可以了。當然,我們也可以假設某些屬性和數據的標記呈更複雜的關係。更一般的,我們假設所有的屬性和標記的關係如下:

(這些是我編的,如果你真的收集了數據,看完今天的文章,你可以自己計算具體的關係)按照上面的表,我們把處理後的數據代入線性回歸的模型,就可以讓它變得真正起作用了。但是,我們是怎麼知道數據之間的關係的呢?

實際上,我們不知道,是機器發現的。所以,關於數據預處理,我們有更一般的做法。

我們可以作出這樣的假設:

還記得「:=「是賦值符號吧?沒錯,我們可以猜測原來的數據的一次項,二次項,三次項都分別和標記呈線性相關。這樣一來,我們就有了3 x 8 + 1 = 25個θ了。這不是什麼問題,讓計算機用梯度下降法計算出幾十個θ確實是小case。重新寫一下我們的x:

這樣看起來可能怪怪的,我們用a表示處理後的x

我們得到了新的特徵值:

所以,相應的,我們要求的θ也就變成了這樣:

到這裡,你可能會有疑問,那如果屬性值和標記呈指數或者對數關係,該怎麼辦呢?其實,我們已經不知不覺的解決了這個問題。如果你學過麥克勞林展開或是泰勒展開:

你會知道,對數或者指數也可以寫成多項式的形式:

我們沒有把ln10這樣的係數寫出來,因為它應該包含在θ里。我的意思是,如果你不寫ln10,訓練出來的θ可能是ln10,如果你寫了ln10,訓練出來的θ可能是1。最後的結果是一樣的。

還有一個問題,那就是標記可能和某兩個屬性的乘積呈線性關係。

這也不是什麼問題,因為你只要用更多的a把它們都表示出來就行了,當然,相應的,你會有更多的θ需要計算。

像這樣:


接下來,讓我介紹數據預處理的其他步驟。這主要包括了特徵縮放均值歸一。所謂特徵縮放,其實就是屬性縮放。特徵,屬性,其實是一個意思,只是叫法不同。

特徵縮放的思想是讓所有屬性的取值範圍大致相同,這樣可以有效的加快梯度下降的速度。

例如,你收集到的最小的別墅是200平的,最大是別墅是1000平的。最矮的是2層的,最高的是5層的。那麼,屬性值滿足的範圍是:

在上面的例子中,不同的特徵值取值的範圍差別很大。讓我來給你演示為什麼我們不希望特徵值取值的範圍差別很大。假如我們收集到了以下數據:

(也是我編的)我們能得到下面的cost函數:

如果你幾何想像能力比較好,你應該能顯得出來它大致的形狀。實際上,它的圖像很像馬里亞納海溝或是千島海溝,總之,它很像一個海溝。如果一個代價函數像一個海溝,而不是一個火山,那以為著我們在梯度下降的時候很難找到最合適的方向。(說到代價函數,其實人們更習慣用大寫的字母J表示,但由於某些奇怪的歷史原因,我一直用cost表示代價函數)直觀的想像一下,當你身處一座火山的內壁,你想找到海拔最低的點,那隻需要往中間的方向跑(或者滾)就行了。但如果你身處一個海溝,那麼,你可能很容易的從內壁走到溝底,但接下來你會在溝底不停的徘徊。因此,我們的想法是把一個海溝變成火山。怎麼辦呢?我剛才已經說出了答案,只需要把我們的屬性值進行適當的縮放,讓他們的範圍大致相同就可以了。那縮放到什麼範圍合適呢?實際上,並沒有什麼約定俗成的行業規範,但如果你問我的話,我推薦你用-1到1這個範圍(其他範圍也是完全可以的)。按照這種想法,我們可以對前兩個特徵值進行縮放:

如果你按照我的建議,把(-1,1)當作你屬性值的範圍的話,你只需要把每個元素都除上這個屬性的絕對值的最大值就可以了。你可能還有一個疑惑,特徵縮放是放在把一個屬性值分成它的不同次冪這個過程之前,還是之後呢?其實,應該是之前的。而且,如果你足夠細心的話,你可以發現我選擇(-1,1)作為範圍的另一個原因,那就是一個屬於(-1,1)的數的任意次冪還是屬於(-1,1)。這樣,我就不用再費神重新特徵縮放了。

最後的過程叫做均值歸一,你應該在學習統計學時見過這個名詞。它的用處就是讓屬性值的平均值為0,這樣的目的也是讓梯度下降進行的更快一點。我猜你已經想到怎麼做了,只要先求出原來數據的平均值,在讓每個值減去這個平均值就可以了。所以,綜合特徵縮放和均值歸一,我們能得到下面的公式:

其中m為總樣本數,也就是數據集的數目,k是任意一個樣本的屬性值。下一章,我們會講解如何優化你的線性回歸方程。
推薦閱讀:
相关文章