回歸是監督方法的延續,而回歸與分類不同,在于其目標變量是連續數值。
8.1 用線性回歸找到最佳擬合直線
回歸的目的是預測數值型的目標值,最直接的方法是依據輸入寫出一個目標值的計算公式。,這就是所謂的回歸方程。求回歸系數的過程就是回歸。
線性回歸就是將輸入項分別乘以一些常量,再將結果加起來輸出。
經過一系列數學變化,求系數向量w最終可以同對X和Y的矩陣計算得到。X是輸入數據矩陣,Y是分類標簽向量。通過調用NumPy庫里(哇靠!庫里!)的矩陣方法,僅使用幾行代碼就能實現功能,這種方法又叫做“普通最小二乘法”。
對文件ex0.txt進行操作,得到如下圖:
為了計算預測值yHat序列和真實值y序列的匹配程度,我們可以計算這兩個序列的相關系數。NumPy庫提供了相關系數的計算方法。通過一個命令就能計算出來。
該矩陣包含所有兩兩組合相關系數,對角線數據是1.0,即自己跟自己完美匹配。
8.2 局部加權線性回歸
線性回歸有一個問題:欠擬合。因為它求的是具有最小均方誤差的無偏估計。所以有些方法就允許在估計中引入一些偏差,從而降低預測的均方誤差。
其中一個方法就是局部加權線性回歸。原理:給每個待預測點附近的每一個點賦予一定的權重,然后再基于最小均方差來進行普通的回歸。它會給每個待預測點附近的點給以對應的權重,這種權重的分配是:隨著樣本點與待預測點距離的遞增,權重以指數級衰減。權重計算依據高斯核公式。得到只含對角元素的權重矩陣W就能將權重矩陣代入回歸系數計算公式來計算回歸系數。
在計算高斯核的公式中,有一個參數k是我們可以設置的,它決定了對附近的點賦予多大的權重。下面是k取不同值時的結果。
可以看到,1圖的權重很大,最佳擬合直線跟上一節線性回歸一致,說明欠擬合。2圖得到了很好的效果,揭示了數據的潛在規律。3圖呢,過擬合了,納入了太多了噪聲點,使擬合的直線和數據點過于貼切。
8.3 示例:預測鮑魚的年齡
鮑魚年齡是根據鮑魚殼的層數推算出來的(漲姿勢 。。。)
可以看到,使用較小的核可以得到較低的誤差。但是使用最小的核會導致過擬合,對新數據不一定能達到最好的預測效果。
所以,看看它們在新數據上的表現:
接下來,再來和簡單的線性回歸作比較:
簡單線性回歸達到了與局部加權線性回歸類似的效果。
這也表明,必須在未知數據上比較結果才能選取最佳模型。而局部加權線性回歸的問題在于:為了作出預測,需要保存所有訓練數據。下面介紹提高預測精度的方法。
8.4 縮減系數來“理解”數據
如果特征比樣本點還多,那么輸入數據矩陣就不是滿秩矩陣了,也就無法計算逆矩陣,無法求得回歸系數。為解決這個問題,本寶寶提出了三個辦法:嶺回歸,lasso法,前向逐步回歸。
8.4.1 嶺回歸
嶺回歸最先用來處理特征數多于樣本數的情況,現在也用于在估計中加入偏差,從而得到更好的估計。引入lambda限制所有w之和,通過引入懲罰項,能夠減少不重要的參數,這個技術就叫做縮減。縮減去掉了不重要的參數,所以能更好地理解數據。
PS:代碼里出現了幾個“有趣”的操作:1、一個n*1矩陣可以減去一個1*1的矩陣,并且這個結果是列矩陣所有元素都減去那個唯一的元素。2、一個n*m的矩陣A可以減去或者除以一個1*m的矩陣,結果是n*m矩陣每行都減去或者除以1*m矩陣的對應元素。
我表示很服,不禁感嘆:python大法好啊~各種神操作,這要是java。。。
下圖是30個不同lambda所對應是回歸系數:
注:
書上:圖中最左邊,lambda最小時,可以得到所有系數的原始值(與線性回歸一致),到最右邊,系數全部縮減成0。中間部分的某值可以取得最好的預測效果。為了定量地找到最佳參數值,還需要交叉驗證。此外,要判斷哪些變量對結果預測最具有影響力,在圖中觀察它們對應的系數大小即可。
我:圖中八條線段,其實代表天龍八部八個特征,八個特征的回歸系數在不同lambda下的變化。畫圖用的是回歸系數的數組,數組每行是用不同lambda算出的回歸系數,一共30行8列。也就意味著同一行數據是同一個lambda下8個不同特征的值,代表圖某一豎線經過的8個點。同一列數據是一個特征在30個不同lambda下的變化,也就是圖上8條線段之一。lambda不斷變大,最終所有回歸系數都縮減到0。而要想知道那個特征對預測結果的影響最大,可以觀察圖中回歸系數的大小,系數越大,其對應的特征對預測結果影響越大。(疑惑:這就是所謂的“理解數據”??這到底怎么體現對數據的理解的?書中說縮減可以去掉不重要的參數以理解數據。這個參數是對預測結果影響小的特征呢還是某條數據呢?暫且認為是特征吧~)
8.4.2 lasso
尷尬~公式打不上來~
看書吧,區別啥的都在書上,不敲了~
但是,這邊是有疑惑的,嶺回歸中是lambda非常大時,回歸系數縮減為0,這個根據求回歸系數的矩陣公式大概能明白為什么。而lasso的約束條件表達了當lambda足夠小時,回歸系數縮減為0,這個看約束條件也能明白。可是為什么兩個趨勢相反呢???奇了怪了,難道都用lambda但是其實是兩個意思相反的參數值?黑人問號臉。。。
8.4.3 前向逐步回歸
能取得和lasso差不多效果,但更簡單,而且還是個貪心算法(從代碼可以體會),代碼主要就是每次只改某一個特征的一個值,加或減一個很小的步長然后算和真實分類的誤差,誤差變小就將回歸系數記錄下來,多次迭代,不斷優化。
下圖是使用0.005的步長經過1000次迭代的結果:
這個算法的優點在于幫助人們理解現有模型并改進。這個理解就是:你可以看到哪個特征對結果影響最大或最小,這樣人們就可以及時停止對不重要特征信息的采集。比如圖中紅線代表的特征在0處徘徊,那就可以減少對它的信息采集,減少工作量。
此外,我們應用縮減方法(嶺回歸或逐步線性回歸)時,模型中就增加了偏差,與此同時也減少了方差。下一節就揭示它們的關系并分析它們對結果的影響。
PS:又發現一個神奇的操作,書P151將逐步線性回歸的預測結果與最小二乘法的預測結果進行比較時,調用普通線性回歸的函數來計算回歸系數,這也沒啥,然而這個實參是居然是矩陣,形參居然是數組,也就是說可以直接把矩陣賦給了數組,驚呆了我的小伙伴,這要是在java里。。。
8.5? 權衡偏差和方差
本不能理解這兩個為什么會有相關性,看到網上一些博客才恍然大悟。原來志華的西瓜書里已經介紹過,當時看時沒有體會,此時代入一個具體的算法再來比較這兩者的區別和聯系才明白其中真正的含義。除西瓜書P44頁外,再給出一些資料:
簡單總結:
(1)西瓜書總結
偏差度量了學習算法的期望預測與真實結果的偏離程度,即刻畫了學習算法本身的擬合能力。
方差度量了同樣大小的訓練集的變動所產生的學習性能的變化,即刻畫了數據擾動所造成的影響。
噪聲表達了當前任務上任何學習算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度。
而泛化性能是由學習算法的能力,數據的充分性以及學習任務本身的難度共同決定的。給定一個學習任務,想要獲得較好的泛化性能,則需要偏差較小,方差較小。偏差小意味著能夠充分擬合數據,方差小意味著數據擾動產生的影響小。
一般而言,偏差與方差有沖突,即偏差-方差窘境:給定一個學習任務,訓練程度不足時,學習器擬合能力不強,訓練數據的擾動不足以使學習器產生明顯變化,此時偏差主導了泛化錯誤率。而隨著訓練強度加大,學習器擬合能力不斷增強,訓練數據發生的擾動就能漸漸被學習器學到,此時方差主導了泛化錯誤率。在訓練程度充足之后,學習器擬合能力極強,訓練數據的輕微擾動都會使學習器發生顯著變化,當訓練數據自身的、非全局性的特性被學習器學到,那就是過擬合了。
(2)機器學習實戰總結
方差和偏差概念強調:方差是模型之間的差異,比如說,從鮑魚數據集中隨機取100個數據用線性模型擬合得到了一組回歸系數W1,再隨機取100個數據用線性模型擬合得到了一組回歸系數W2。模型方差的大小就是W1和W2之間的差異大小。而偏差是模型產生的預測值與真實值的差異大小。
前面提到降低核的大小,就是在局部加權線性回歸中,k越來越小時,就是提高模型復雜度,這樣學習器擬合程度漸漸提高,導致方差變大,偏差變小。降低核在下圖里就是黑線從左到右的過程。
而前面提到的縮減法相反,因為它將一些系數縮減成很小的值或是0,就減少了模型復雜度,增大了模型偏差。通過縮減可以去掉某些不重要的特征,使模型容易理解,同時降低預測誤差。縮減法在下圖里就是黑線從右到左的過程。圖中左側是參數縮減過于嚴厲,右側是無縮減。
(3)丫的,還想對上面兩個博客來一個總結,仔細看看也沒啥好寫,知識點差不多寫完了。so~that? is? all~
8.6? 示例:預測樂高玩具套裝價格
完犢子。。。
要訪問Google API控制臺返回產品信息然后做操作。。。
老子在中國啊。。。萬里長城啊。。。
代碼簡記:交叉驗證測試嶺回歸,驗證10次,每次隨機選90%作訓練集,10%作測試集,用訓練得來的回歸系數對測試集算預測誤差,因為是嶺回歸,所以可以得到30個不同lambda下預測誤差。再求30個不同lambda下10次驗證的均值,找到最小誤差對應的lambda,也就是說這個lambda縮減效果最好,然后找到這個lambda對應的回歸系數,這就是要求的回歸系數了。最后將數據還原呈現出來即可。(好吧,我承認說的很亂,大概流程我能明白就行,這也不太好說啊~)
?8.7? 本章小結
在回歸方程里,求得特征對應的最佳回歸系數的方法是最小化誤差的平方和。
輸入數據集x,如果(x的轉置)*x的逆存在,那么回歸法都可以用,這就是線性回歸。
因為線性回歸欠擬合,所以使用“核”來對待預測點附近的點賦予更高的權重,這就是局部加權線性回歸。它在估計中引入了偏差,從而降低了預測的均方誤差。核越小,擬合越好,核太小會導致過擬合,偏差很小方差很大。
當數據樣本數少于特征數時,(x的轉置)*x的逆無法計算,或者雖然數據樣本數多于特征數,但是特征之間高度相關,這時就要用到嶺回歸算法,它是縮減法的一種,對回歸系數的大小施加了限制,
另一種縮減法是lasso,但它難以求解,我們就用計算簡便的逐步線性回歸方法來求得近似結果。縮減法可以看做是對一個模型增加偏差的同時減少方差。
PS:這是我記筆記最多的一章。。。。我也是醉了,越看越多越寫越多~感悟不少,很充實,但是~真的好多啊~除了這些文字代碼也注釋了很多~~常看常新吧~東西多了容易忘哦~