tft每日頭條

 > 生活

 > 機器學習線性回歸預測數據集

機器學習線性回歸預測數據集

生活 更新时间:2024-09-27 11:57:06

1. Multiple features(多維特征)

在機器學習之單變量線性回歸(Linear Regression with One Variable)我們提到過的線性回歸中,我們隻有一個單一特征量(變量)——房屋面積x。我們希望使用這個特征量來預測房子的價格。我們的假設在下圖中用藍線劃出:

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)1

不妨思考一下,如果我們不僅僅知道房屋面積(作為預測房屋價格的特征量(變量)),我們還知道卧室的數量、樓層的數量以及房屋的使用年限,那麼這就給了我們更多可以用來預測房屋價格的信息。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)2

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)3

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)4

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)5

即,支持多變量的假設為:

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)6

這個公式中有n 1個參數和n個特征量(變量),為了使得公式能夠簡化一些,引入x0=1,則公式轉化為:

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)7

可以簡化為如下形式:

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)8

2. Gradient descent for multiple variables(多變量梯度下降)

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)9

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)10

3. Gradient descent in practice:Feature Scaling(特征縮放)

1

下面我們來介紹一些關于梯度下降運算中的實用技巧,首先是特征縮放 (feature scaling) 方法。

如果你有一個機器學習問題,并且這個問題有多個特征。如果你能确保這些特征都處在一個相近的範圍(确保不同特征的取值在相近的範圍内),這樣梯度下降法就能更快地收斂。

具體來說,假如你有一個具有兩個特征的問題,其中 x1 是房屋面積大小,它的取值在0到2000之間,x2 是卧室的數量,這個值取值範圍在1到5之間。如果你畫出代價函數J(θ) 的輪廓圖:

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)11

那麼這個輪廓看起來,應該是如上圖左邊的樣子。

J(θ) 是一個關于參數 θ0 、θ1 和 θ2 的函數,我在此處忽略 θ0 (暫時不考慮 θ0)。并假想一個函數的參數,隻有 θ1 和 θ2,但如果變量 x1 的取值範圍遠遠大于 x2 的取值範圍的話,那麼最終畫出來的代價函數 J(θ) 的輪廓圖就會呈現出這樣一種非常偏斜并且橢圓的形狀。2000和5的比例會讓這個橢圓更加瘦長。

所以,這是一個又瘦又高的橢圓形輪廓圖,正是這些非常高大細長的橢圓形構成了代價函數 J(θ),如果你用這個代價函數來進行梯度下降的話,你要得到梯度值最終可能需要花很長一段時間才能得到。并且可能會來回波動,然後會經過很長時間,最終才收斂到全局最小值。

事實上,你可以想像如果這些輪廓再被放大一些的話,如上圖最左邊的那樣(如果你畫的再誇張一些,把它畫的更細更長),那麼可能情況會更糟糕。梯度下降的過程可能更加緩慢,需要花更長的時間,反複來回振蕩,最終才找到一條正确通往全局最小值的路。

在這樣的情況下一種有效的方法是進行特征縮放(feature scaling)。

2

舉例來說,把特征 x 定義為房子的面積大小除以2000,并且把 x2 定義為卧室的數量除以5。如此一來,表示代價函數 J(θ)的輪廓圖的形狀偏移就會沒那麼嚴重,也許看起來會更圓一些。

如果你用這樣的代價函數,來進行梯度下降的話,那麼梯度下降算法就會找到一條更快捷的路徑通向全局最小,而不是像剛才那樣,沿着一條讓人摸不着頭腦的路徑、一條複雜得多的軌迹來找到全局最小值。

因此,通過特征縮放,通過“消耗掉”這些值的範圍(在這個例子中,我們最終得到的兩個特征 x1 和 x2 都在 0 和 1 之間),你得到的梯度下降算法就會更快地收斂。

更一般地,我們執行特征縮放,将特征的取值約束到-1 到 1 的範圍内(注意:特征 x0 是總是等于1,已經在這個範圍内)。但對其他的特征,我們可能需要通過除以不同的數來讓它們處于同一範圍内。-1 和 1 這兩個數字并不是太重要。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)12

如果你有一個特征 x1 ,它的取值在 0 和 3 之間,這沒問題。

如果你有另外一個特征,取值在-2 到 0.5 之間,OK,這也沒什麼關系。因為這也非常接近 -1 到 1 的範圍。

但如果你有另一個特征,假如它的範圍在 -100 到 100 之間,那麼這個範圍跟 –1 到 1 就有很大不同了,所以,這可能是一個不那麼好的特征。

類似地,如果你的特征在一個非常非常小的範圍内,比如 -0.0001 和 0.0001 之間,那麼這同樣是一個比 –1 到 1 小得多的範圍,因此,我們同樣會認為這個特征也不太好。

所以,你所認可的範圍可以大于或者小于 -1 到 1 的範圍,但是也别太大或者太小到不可以接受的範圍。通常不同的人有不同的經驗,但是我們一般是這麼考慮的:如果一個特征是在 -3 到 3 的範圍内,那麼你應該認為這個範圍是可以接受的。但如果這個範圍大于了 -3 到 3 的範圍,我們可能就要開始注意了。如果它的取值在 -1/3 到 1/3 的話,我們覺得也還不錯,可以接受,或者是 0 到 1/3 或 -1/3 到 0 這些典型的範圍,我們都認為是可以接受的。但如果特征的範圍取得很小的話,你就要開始考慮進行特征縮放了。

總的來說,不用過于擔心你的特征是否在完全相同的範圍或區間内,隻要他們足夠接近的話,梯度下降法就會正常地工作。

3

除了在特征縮放中,将特征除以最大值以外,有時我們也會進行一個稱為均值歸一化的工作(mean normalization)

我的意思是這樣的,如果你有一個特征 xi,你就用 xi - μi 來替換它,通過這樣做,讓你的特征值,具有為0的平均值(μi 指所有 xi 的平均值)。

很明顯,我們不需要把這一步應用到 x0 中,因為 x0 總是等于1的,所以它不可能有為0的的平均值。

但是對其他的特征來說,比如房子的大小,取值介于 0 到 2000,并且假設房子面積的平均值等于1000,那麼你可以用這個公式将 x1 的值變為 x1 減去平均值 μ1,再除以2000。

類似地,如果你的房子有五間卧室,并且平均一套房子有兩間卧室,那麼你可以使用這個公式來歸一化你的第二個特征 x2。

在這兩種情況下你可以算出新的特征 x1 和 x2,這樣它們的範圍,可以在 -0.5 和 0.5 之間。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)13

當然這肯定不對,例如 x2 的值實際上有可能會大于0.5(例如(5-2)/ 5 = 0.6 ) 但很接近。

更一般的規律是,你可以用如下的公式:

(x1 - μ1)/S1

來替換原來的特征 x1。

其中定義μ1的意思是,在訓練集中,特征 x1 的平均值。而 S1 是該特征值的範圍(最大值減去最小值)。當然,也可以把 S1 設為變量的标準差,但其實用最大值減最小值就可以了。

類似地,對于第二個特征 x2,你也同樣可以運用這個特征減去平均值再除以範圍,來替換原特征(範圍的意思依然是最大值減最小值)。

這類公式将把你的特征變成如下這樣的範圍,也許不是完全這樣,但大概是這樣的範圍:

-0.5 < Xi < 0.5

順便提一下,有些同學可能看文章比較仔細,如果我們用最大值減最小值來表示範圍的話,上面的 5 應該改成 4(如果最大值為5,那麼減去最小值1,這個範圍值就是4)。

但不管這麼說,這些取值都是非常近似的,隻要将特征轉換為相近似的範圍,就都是可以的,特征縮放其實并不需要太精确,隻是為了讓梯度下降能夠運行得更快一點而已。

小結

通過使用特征縮放這個簡單的方法,你可以讓梯度下降的速度變得更快,讓梯度下降收斂所需的循環次數更少

接下來我們将介紹另一種技巧來使梯度下降在實踐中工作地更好 。

4. Gradient descent in practice: Learning rate(學習速率)

1

接下來,我們将集中讨論學習速率 α。

具體來說,這是梯度下降算法的更新規則,這裡我想介紹的是如何調試(也就是如何确定梯度下降是正常工作的)以及如何選擇學習率 α。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)14

2

怎樣确定梯度下降正常工作的?

梯度下降算法所做的事情就是為你找到一個 θ 值,并希望它能夠最小化代價函數 J(θ)。

我們通常可以在梯度下降算法運行時繪制出代價函數 J(θ) 的值。注意這裡的 x 軸是表示梯度下降算法的疊代步數。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)15

你可能會得到上圖那樣的一條曲線。

曲線上一點的含義是這樣的:假如當我運行完100步的梯度下降疊代之後,無論我得到什麼 θ 值(無論如何,100步疊代之後,我将得到一個 θ 值),根據100步疊代之後得到的這個 θ 值,我們可以計算出代價函數 J(θ) 的值,而這個點的垂直高度就代表梯度下降算法經過100步疊代之後而算出的 J(θ) 值。

因此這條曲線顯示的是梯度下降算法疊代過程中代價函數 J(θ) 的值。

如果梯度下降算法正常工作,那麼每一步疊代之後J(θ) 都應該下降。這條曲線用處在于,它可以告知你一些信息:例如,你可以觀察到上圖的這條曲線,當你達到300步疊代之後,也就是在300步到400步疊代之間,看起來 J(θ) 并沒有下降多少。當你到達400步疊代時,這條曲線看起來已經很平坦了。

也就是說,在這裡400步疊代的時候,梯度下降算法基本上已經收斂了,因為代價函數并沒有繼續下降。

所以說,觀察這條曲線可以幫助你判斷梯度下降算法是否已經收斂。

順便提一下,對于每一個特定的問題而言,梯度下降算法所需的疊代次數可以相差很大。

也許對于某一個問題,梯度下降算法隻需要30步疊代就可以收斂;然而換一個問題,也許梯度下降算法就需要3000步疊代;再對于另一個機器學習問題而言,則可能需要三百萬步疊代。

實際上,我們很難提前判斷梯度下降算法需要多少步疊代才能收斂。因此,通常我們需要畫出這類曲線,畫出代價函數随疊代步數增加的變化曲線。

通常,我們可以通過看這種曲線,來試着判斷梯度下降算法是否已經收斂。

3

此外,也可以進行一些自動的收斂測試,也就是說用一種算法,來告訴你梯度下降算法是否已經收斂。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)16

自動收斂測試一個非常典型的例子是:如果代價函數 J(θ) 的下降小于一個很小的值 ε ,那麼就認為已經收斂。

比如可以選擇1e-3,但是通常要選擇一個合适的阈值 ε 是相當困難的。

因此 為了檢查梯度下降算法是否收斂,我們實際上還是通過觀察之前介紹的代價函數随疊代步數增加的變化曲線,而不是依靠自動收斂測試。

4

此外,這種曲線圖也可以在算法沒有正常工作時,提前警告你。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)17

具體地說,如果代價函數 J(θ) 随疊代步數的變化曲線是上圖左上角的這個樣子,J(θ) 實際上在不斷上升,那麼這就很明确的表示梯度下降算法沒有正常工作。

而這樣的曲線圖,通常意味着你應該使用較小的學習率 α。

同樣的 有時你可能看到上圖左下角這種形狀的 J(θ) 曲線,它先下降,然後上升,接着又下降,然後又上升,如此往複。

而解決這種情況的方法,通常同樣是選擇較小 α 值。

我們并不打算證明這一點,但對于我們讨論的線性回歸,可以很容易從數學上證明,隻要學習率足夠小,那麼每次疊代之後,代價函數 J(θ)都會下降,因此如果代價函數沒有下降,那麼可以認為是學習速率過大造成的。此時,你就應該嘗試一個較小的學習率。

當然,你也不希望學習速率太小。因為如果這樣,那麼梯度下降算法可能收斂得很慢。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)18

總結一下:

如果學習率 α 太小,你會遇到收斂速度慢的問題,而如果學習率 α 太大,代價函數 J(θ) 可能不會在每次疊代都下降,甚至可能不收斂,在某些情況下,如果學習率 α 過大,也可能出現收斂緩慢的問題。但更常見的情況是,你會發現代價函數 J(θ),并不會在每次疊代之後都下降。

而為了調試所有這些情況,繪制J(θ)随疊代步數變化的曲線,通常可以幫助你弄清楚到底發生了什麼。

具體來說,當我們運行梯度下降算法時,通常會嘗試一系列α值,如:

…,0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1,…

然後對于這些不同的 α 值,繪制 J(θ)随疊代步數變化的曲線,然後選擇看上去使得 J(θ)快速下降的一個 α 值。

所以,在為梯度下降算法選擇合适的學習率時,可以大緻按3的倍數來取值一系列α值,直到我們找到一個值它不能再小了,同時找到另一個值,它不能再大了。然後我盡量挑選,其中最大的那個 α 值,或者一個比最大值略小一些的合理的值。當我們做了以上工作時,通常就可以得到一個不錯的學習 速率值。

5. Features and polynomial regression(特征與多項式回歸)

1

你現在已經了解了多變量的線性回歸,本章将介紹選擇特征的方法以及如何得到不同的學習算法。當選擇了合适的特征後,這些算法往往是非常有效的。另外,我們會介紹多項式回歸,它使得你們能夠使用線性回歸的方法來拟合非常複雜的函數,甚至是非線性函數。

以預測房價為例,假設你有兩個特征,分别是房子臨街的寬度和垂直寬度。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)19

實際上,當我們在運用線性回歸時,你不一定非要直接用給出的 x1 和 x2 作為特征,其實你可以自己創造新的特征。

如果我要預測的是房子的價格,我真正要需做的是确定真正能夠決定我房子大小的因素是什麼,因此,我可能會創造一個新的特征 x ,它是臨街寬度與縱深的乘積,這得到的就是我擁有的土地的面積。然後,我可以讓假設 h 隻使用一個特征,也就是土地的面積。

有時,通過定義新的特征,你可以得到一個更好的模型。

2

與選擇特征密切相關的一個概念被稱為多項式回歸(polynomial regression)。

如果你有一個住房價格的數據集,為了拟合它,可能會有多個不同的模型供選擇。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)20

直線似乎并不能很好地拟合這些數據,你可以選擇二次模型,但是你會發現二次函數的模型似乎也并不好用,因為,一個二次函數的曲線最終會降回來。而我們并不認為房子的價格在高到一定程度後會下降回來。

因此,我們可以選擇另一個不同的多項式模型,例如,三次函數,在這裡三次函數,對這個數據集拟合得更好,因為它不會在最後下降回來。

那麼,我們到底應該如何将模型與我們的數據進行拟合呢?

我們隻要将多元線性回歸算法做一個非常簡單的修改,就可以更好的與數據進行拟合。

按照我們以前假設的形式,我們知道如何對這樣的模型進行拟合,可以是:

hθ(X) = θ0 θ1 × X1 θ2 × X2 θ3 × X3

其中 X1,X2 和 X3 分别代表不同的特征。

那麼,如果如何将數據拟合成三次模型?

可以将第一個特征 x1 設為房子的面積,将第二個特征 x2 設為房屋面積的平方,将第三個特征 x3 設為房子面積的立方。

那麼僅僅通過将,這三個特征如上這樣設置,然後再應用線性回歸的方法,我們就可以拟合這個模型,并最終将一個三次函數拟合到我的數據上。

以上所做的,也可以理解為通過設置3個特征,從而将模型轉化為線性回歸模型。注:如果我們采用多項式回歸模型,在運行梯度下降算法前,進行特征縮放非常有必要。

3

需要說明的是,如果你像上面介紹的這樣選擇特征,那麼特征的歸一化就變得更重要了,因為這三個特征的範圍有很大的不同。

因此,如果你使用梯度下降法,使用特征值的歸一化是非常重要的,這樣才能将他們的值的範圍變得具有可比性。

再來看一個例子,關于如何使你真正選擇出要使用的特征。

此前我們談到一個像這樣的二次模型并不是理想的,因為你知道也許一個二次模型能很好地拟合這個數據,但二次函數最後會下降,這是我們不希望看到的。

但是,除了轉而建立一個三次模型以外,你也許有其他的選擇特征的方法,如下:

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)21

小結

本章中,我們探讨了多項式回歸,也就是如何将一個多項式,如一個二次函數或一個三次函數拟合到你的數據上。

除此之外,我們還讨論了在使用特征時的選擇性。例如,我們不使用房屋的臨街寬度和縱深,而是把它們乘在一起,從而得到房子的土地面積這個特征。實際上,這似乎有點難以抉擇,這裡有這麼多不同的特征選擇,我該如何決定使用什麼特征呢?

在之後的文章中,我們将探讨一些算法,它們能夠自動選擇要使用什麼特征,因此,你可以使用一個算法,它将通過你給出的數據,自動為你選擇到底應該選擇一個二次函數、一個三次函數或者還是其他别的函數。

但是,在我們學到那種算法之前,我希望你們知道你需要選擇使用什麼特征,并且通過設計不同的特征,能夠其使用用更複雜的函數去拟合你的數據,而不是隻用一條直線去拟合。

6. Normal equation(正規方程)

之前,我們一直都在使用梯度下降算法,但是對于某些線性回歸問題,正規方程式更好的解決方案。

正規方程通過求解以下的方程:

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)22

來求出使得代價函數最小的參數。

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)23

機器學習線性回歸預測數據集(機器學習之多變量線性回歸)24

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved