之前的文章中已經講述了簡單的一元線性回歸的基礎知識,現在我們來繼續討論多元線性回歸。本文針對吳恩達機器學習第二週課程多元線性回歸部分。
所謂多元線性回歸正如其名字一樣,就是說這裡的變數是多個的,下面介紹一下如何表示含有多個變數情況下的假設函式:
$$ h_\theta(x) = \theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+...+\theta_nx_n $$
之前的一元線性回歸中有變數$x^(i)$表示i個訓練樣本的特徵值,現在由於有多個變數,因此我們用$x_j^(i)$表示第i個訓練樣本的特徵j的值,用$x^(i)$表示第i個訓練樣本的所有特徵,m表示訓練集的大小,n表示特徵的數量。為了更好的理解這個函式,我們可以舉個房價的例子:想象$\theta_0$是房子的基礎**,$\theta_1$表示單位面積的房價,$\theta_2$表示每一層的房價,以此類推,則$x_1$表示房子的面積,$x_2$表示房子的樓層數等等。
使用矩陣的定義我們可以更簡潔的表達出假設函式,這裡我們假設$x_0^i=1(i\in1,2,...m)$,這使得我們可以很方便的進行$\theta,x$的矩陣運算。
$$ h_\theta(x) = [\theta_0\quad\theta_1\quad...\quad\theta_n] \begin x_0 \\ x_1 \\ x_2 \\ ... \\ x_n\end\\ = \theta^tx $$
同樣的,針對多遠線性回歸的梯度下降演算法的公式肯定也會不同,我們這裡只需要補充上需要重複的n個特徵量即可:
repeat until convergence:\sum_^(h_\theta(x^(i))-y^(i))x_0^(i)\\ \theta_1 := \theta_1 - \alpha\frac\sum_^(h_\theta(x^(i))-y^(i))x_1^(i)\\ \theta_2 := \theta_2 - \alpha\frac\sum_^(h_\theta(x^(i))-y^(i))x_2^(i)\\ ...\\ ...\\ \theta_j := \theta_j - \alpha\frac\sum_^(h_\theta(x^(i))-y^(i))x_j^(i)\quad j:=0,1...n $$
當然,這裡也不要忘了,$\theta_0,\theta_1...\theta_j$是同步更新的。
那麼現在如果有乙個問題包含了多個特徵,比如說上面的房價問題,我們先假設有兩個特徵:
$$ x_1 = 房子面積(0-200平公尺)\\ x_2 = 房間數量(1-5) $$
那麼我們畫出的代價函式輪廓圖影象可能就是相對比較細長,那麼我們通過梯度下降去尋找最小值的時候需要花很長時間才能走到終點,並且可能會來回波動,如下圖所示:
避免這種情況的方法就是想辦法將我們的變數範圍縮小到乙個合適且相近的範圍,一般來說定義到[-1,1]或者[-0.5,0.5]。如何縮小到這個範圍呢,我們可以使用下面這個公式:
$$ x_i := \frac $$
其中$\mu_i$表示該特徵所有值的平均值,$s_i$表示該特徵取值範圍(最大值減去最小值)或者標準差,在這個例子中假設你的房子面積為110,房間為3,我們可以得出:
$$ x_1 := \frac = 0.05\\ x_2 := \frac = 0.25 $$
兩個變數都是在[-0.5,0.5]之間,從而我們畫出的輪廓圖可能就會相對較圓一點:
這樣我們梯度下降到最小值點的速度就會相對較快一點。我們這裡用的方法就叫做特徵縮放(feature scaling)。
$$ \theta_j := \theta_j - \fracj(\theta) $$
那麼我們這裡就講講如何對α進行取值,首先畫出代價函式$j(\theta)$的影象,x軸表示梯度下降演算法的迭代步數,注意這裡和之前的橫軸表達的意思不一樣,之前一般是用來表示引數$\theta$,縱軸表示$j(\theta)$的值。簡單的說就是這個影象表示了我們梯度下降迭代了多少步後對應的代價函式的值。
那麼也就是說,如果梯度下降演算法是正常工作的,那這個影象就應該是一直處於下降狀態的。圖中的曲線到400步的時候已經趨於平坦,即已經基本收斂了。因此這條曲線可以用來判斷梯度下降演算法是否已經收斂。有時候也可以進行一些自動的收斂測試,比如如果發現代價函式的下降小於乙個很小的值那麼就可以看作為已經收斂如$10^-3$,但選擇這個閾值往往只很困難的,因此大部分情況下還是要通過檢視這個曲線圖來判斷是否收斂。
至於梯度下降執行不正確的情況下的影象就可能有如下幾種情況:
第一張圖影象是一直往上公升的方向去的,明顯是錯誤的執行狀況。第二張和第三張說明你的α取值偏大了一點,需要取小一點試試。對於真正的有效的α,$j(\theta)$應當每一步都在遞減,但如果α太小了,之前說過,梯度下降的速度會很慢。
以上我們已經大致了解了多項式回歸,那這裡我們先談談如何選擇特徵。比如說上面的房子問題,我們可以選房子的長和寬當做兩個特徵$x_1,x_2$來看,但這只是一種想法,其實我們也可以把房子的面積$x_1*x_2$來當做特徵,這樣我們只使用了這乙個特徵,這取決於你從什麼樣的角度去審視這個問題,通過定義乙個新的特徵,我們有時候可能會得到乙個更好的模型。
與選擇特徵相關的乙個概念,被稱作多項式回歸(polynomial regression)。我們還是用房價的例子,我們一開始用的可能是一次函式去模擬這個資料集的情況,但嘗試了之後發現可能一次函式不足以模擬出實際情況。二次函式很顯然不行,房價會有下降的趨勢,房價不可能達到一定高度後又下降回來,那這裡就可以嘗試使用三次函式,比如:
$$ h_\theta(x) = \theta_0+\theta_1x_1+\theta_2x_1^2+\theta_3x_1^3 $$
這裡第乙個特徵$x_1$設為房子的面積,第二個特徵為房子面積的平方$x_2 = x_1^2$,第三個為房子面積的立方$x_3 = x_1^3$。最終將這個三次函式擬合到我們的資料上。但我們現在用這樣的方式選擇特徵的話,三個特徵的範圍的差距就會很大,假設房子面積[1,100],那麼$x_1\in[1,100],x_2\in[1,100^2],x_3\in[1,100^3]$。那麼如果使用梯度下降法的話,特徵值的歸一化就很重要,即將不同型別的特徵數值大小變為一致。那這裡就不適用三次函式的模型,我們試試平方根函式,我們可以假設模型為$h_\theta(x) = \theta_0+\theta_1x_1+\theta_2\sqrt x_1$,平方根函式也是乙個遞增的函式,而且遞增速度會越來越趨於平緩,可能與我們的資料更為契合。
可能在選擇特徵的這個問題上經常難以抉擇,再後面的內容中我們會繼續討論一些演算法,他們能自動選擇要使用什麼特徵,因此可以使用某乙個演算法觀察資料,決定最終使用什麼函式。
吳恩達 多元線性回歸
練習1還包括乙個房屋 資料集,其中有2個變數 房子的大小,臥室的數量 和目標 房子的 我們使用我們已經應用的技術來分析資料集 匯入資料集並檢視 把資料進行歸一化 處理資料得到x,y與theta data2.insert 0,one 1 cols data2.shape 1 x2 data2.iloc...
吳恩達機器學習作業(2) 多元線性回歸
目錄 1 資料處理 2 代價函式 3 scikit learn訓練資料集 4 正規方程 練習1還包括乙個房屋 資料集,其中有2個變數 房子的大小,臥室的數量 和目標 房子的 我們使用我們已經應用的技術來分析資料集。還是那個建議,大家拿到資料先看看資料長什麼樣子。path ex1data2.txt d...
吳恩達機器學習之線性回歸
x代表屬性的矩陣,x i x x i 代表x的第i行,xj i x j xj i 代表x第i行第j列,theta 是引數向量。估計函式h x i 0mx i x h x sum mx theta x theta h x i 0 m x i x 代價函式j 12 m i 0m x i y i 2 12...