回歸是監(jiān)督方法的延續(xù)寸宵,而回歸與分類不同,在于其目標變量是連續(xù)數(shù)值元咙。
8.1 用線性回歸找到最佳擬合直線
回歸的目的是預測數(shù)值型的目標值梯影,最直接的方法是依據(jù)輸入寫出一個目標值的計算公式。庶香,這就是所謂的回歸方程甲棍。求回歸系數(shù)的過程就是回歸。
線性回歸就是將輸入項分別乘以一些常量赶掖,再將結果加起來輸出感猛。
經(jīng)過一系列數(shù)學變化,求系數(shù)向量w最終可以同對X和Y的矩陣計算得到奢赂。X是輸入數(shù)據(jù)矩陣陪白,Y是分類標簽向量。通過調用NumPy庫里(哇靠膳灶!庫里T凼俊)的矩陣方法,僅使用幾行代碼就能實現(xiàn)功能,這種方法又叫做“普通最小二乘法”序厉。
對文件ex0.txt進行操作锐膜,得到如下圖:
為了計算預測值yHat序列和真實值y序列的匹配程度,我們可以計算這兩個序列的相關系數(shù)脂矫。NumPy庫提供了相關系數(shù)的計算方法枣耀。通過一個命令就能計算出來。
該矩陣包含所有兩兩組合相關系數(shù)庭再,對角線數(shù)據(jù)是1.0捞奕,即自己跟自己完美匹配。
8.2 局部加權線性回歸
線性回歸有一個問題:欠擬合拄轻。因為它求的是具有最小均方誤差的無偏估計颅围。所以有些方法就允許在估計中引入一些偏差,從而降低預測的均方誤差恨搓。
其中一個方法就是局部加權線性回歸院促。原理:給每個待預測點附近的每一個點賦予一定的權重,然后再基于最小均方差來進行普通的回歸斧抱。它會給每個待預測點附近的點給以對應的權重常拓,這種權重的分配是:隨著樣本點與待預測點距離的遞增,權重以指數(shù)級衰減辉浦。權重計算依據(jù)高斯核公式弄抬。得到只含對角元素的權重矩陣W就能將權重矩陣代入回歸系數(shù)計算公式來計算回歸系數(shù)。
在計算高斯核的公式中宪郊,有一個參數(shù)k是我們可以設置的掂恕,它決定了對附近的點賦予多大的權重。下面是k取不同值時的結果弛槐。
可以看到懊亡,1圖的權重很大,最佳擬合直線跟上一節(jié)線性回歸一致乎串,說明欠擬合店枣。2圖得到了很好的效果,揭示了數(shù)據(jù)的潛在規(guī)律叹誉。3圖呢艰争,過擬合了,納入了太多了噪聲點桂对,使擬合的直線和數(shù)據(jù)點過于貼切甩卓。
8.3 示例:預測鮑魚的年齡
鮑魚年齡是根據(jù)鮑魚殼的層數(shù)推算出來的(漲姿勢 。蕉斜。逾柿。)
可以看到,使用較小的核可以得到較低的誤差机错。但是使用最小的核會導致過擬合爬范,對新數(shù)據(jù)不一定能達到最好的預測效果。
所以弱匪,看看它們在新數(shù)據(jù)上的表現(xiàn):
接下來青瀑,再來和簡單的線性回歸作比較:
簡單線性回歸達到了與局部加權線性回歸類似的效果。
這也表明萧诫,必須在未知數(shù)據(jù)上比較結果才能選取最佳模型斥难。而局部加權線性回歸的問題在于:為了作出預測,需要保存所有訓練數(shù)據(jù)帘饶。下面介紹提高預測精度的方法哑诊。
8.4 縮減系數(shù)來“理解”數(shù)據(jù)
如果特征比樣本點還多,那么輸入數(shù)據(jù)矩陣就不是滿秩矩陣了及刻,也就無法計算逆矩陣镀裤,無法求得回歸系數(shù)。為解決這個問題缴饭,本寶寶提出了三個辦法:嶺回歸暑劝,lasso法,前向逐步回歸颗搂。
8.4.1 嶺回歸
嶺回歸最先用來處理特征數(shù)多于樣本數(shù)的情況铃岔,現(xiàn)在也用于在估計中加入偏差,從而得到更好的估計峭火。引入lambda限制所有w之和,通過引入懲罰項智嚷,能夠減少不重要的參數(shù)卖丸,這個技術就叫做縮減≌档溃縮減去掉了不重要的參數(shù)稍浆,所以能更好地理解數(shù)據(jù)。
PS:代碼里出現(xiàn)了幾個“有趣”的操作:1猜嘱、一個n*1矩陣可以減去一個1*1的矩陣衅枫,并且這個結果是列矩陣所有元素都減去那個唯一的元素。2朗伶、一個n*m的矩陣A可以減去或者除以一個1*m的矩陣弦撩,結果是n*m矩陣每行都減去或者除以1*m矩陣的對應元素。
我表示很服论皆,不禁感嘆:python大法好啊~各種神操作益楼,這要是java猾漫。。感凤。
下圖是30個不同lambda所對應是回歸系數(shù):
注:
書上:圖中最左邊悯周,lambda最小時,可以得到所有系數(shù)的原始值(與線性回歸一致)陪竿,到最右邊禽翼,系數(shù)全部縮減成0。中間部分的某值可以取得最好的預測效果族跛。為了定量地找到最佳參數(shù)值闰挡,還需要交叉驗證。此外庸蔼,要判斷哪些變量對結果預測最具有影響力解总,在圖中觀察它們對應的系數(shù)大小即可。
我:圖中八條線段姐仅,其實代表天龍八部八個特征花枫,八個特征的回歸系數(shù)在不同lambda下的變化。畫圖用的是回歸系數(shù)的數(shù)組掏膏,數(shù)組每行是用不同lambda算出的回歸系數(shù)劳翰,一共30行8列。也就意味著同一行數(shù)據(jù)是同一個lambda下8個不同特征的值馒疹,代表圖某一豎線經(jīng)過的8個點佳簸。同一列數(shù)據(jù)是一個特征在30個不同lambda下的變化,也就是圖上8條線段之一颖变。lambda不斷變大生均,最終所有回歸系數(shù)都縮減到0。而要想知道那個特征對預測結果的影響最大腥刹,可以觀察圖中回歸系數(shù)的大小马胧,系數(shù)越大,其對應的特征對預測結果影響越大衔峰。(疑惑:這就是所謂的“理解數(shù)據(jù)”佩脊??這到底怎么體現(xiàn)對數(shù)據(jù)的理解的垫卤?書中說縮減可以去掉不重要的參數(shù)以理解數(shù)據(jù)威彰。這個參數(shù)是對預測結果影響小的特征呢還是某條數(shù)據(jù)呢?暫且認為是特征吧~)
8.4.2 lasso
尷尬~公式打不上來~
看書吧穴肘,區(qū)別啥的都在書上歇盼,不敲了~
但是,這邊是有疑惑的评抚,嶺回歸中是lambda非常大時旺遮,回歸系數(shù)縮減為0赵讯,這個根據(jù)求回歸系數(shù)的矩陣公式大概能明白為什么。而lasso的約束條件表達了當lambda足夠小時耿眉,回歸系數(shù)縮減為0边翼,這個看約束條件也能明白∶簦可是為什么兩個趨勢相反呢组底??筐骇?奇了怪了债鸡,難道都用lambda但是其實是兩個意思相反的參數(shù)值?黑人問號臉铛纬。厌均。。
8.4.3 前向逐步回歸
能取得和lasso差不多效果告唆,但更簡單棺弊,而且還是個貪心算法(從代碼可以體會),代碼主要就是每次只改某一個特征的一個值擒悬,加或減一個很小的步長然后算和真實分類的誤差模她,誤差變小就將回歸系數(shù)記錄下來,多次迭代懂牧,不斷優(yōu)化侈净。
下圖是使用0.005的步長經(jīng)過1000次迭代的結果:
這個算法的優(yōu)點在于幫助人們理解現(xiàn)有模型并改進。這個理解就是:你可以看到哪個特征對結果影響最大或最小僧凤,這樣人們就可以及時停止對不重要特征信息的采集畜侦。比如圖中紅線代表的特征在0處徘徊,那就可以減少對它的信息采集躯保,減少工作量旋膳。
此外,我們應用縮減方法(嶺回歸或逐步線性回歸)時吻氧,模型中就增加了偏差,與此同時也減少了方差咏连。下一節(jié)就揭示它們的關系并分析它們對結果的影響盯孙。
PS:又發(fā)現(xiàn)一個神奇的操作,書P151將逐步線性回歸的預測結果與最小二乘法的預測結果進行比較時祟滴,調用普通線性回歸的函數(shù)來計算回歸系數(shù)振惰,這也沒啥,然而這個實參是居然是矩陣垄懂,形參居然是數(shù)組骑晶,也就是說可以直接把矩陣賦給了數(shù)組痛垛,驚呆了我的小伙伴,這要是在java里桶蛔。匙头。。
8.5? 權衡偏差和方差
本不能理解這兩個為什么會有相關性仔雷,看到網(wǎng)上一些博客才恍然大悟蹂析。原來志華的西瓜書里已經(jīng)介紹過,當時看時沒有體會碟婆,此時代入一個具體的算法再來比較這兩者的區(qū)別和聯(lián)系才明白其中真正的含義电抚。除西瓜書P44頁外,再給出一些資料:
簡單總結:
(1)西瓜書總結
偏差度量了學習算法的期望預測與真實結果的偏離程度蝙叛,即刻畫了學習算法本身的擬合能力。
方差度量了同樣大小的訓練集的變動所產(chǎn)生的學習性能的變化公给,即刻畫了數(shù)據(jù)擾動所造成的影響借帘。
噪聲表達了當前任務上任何學習算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度妓布。
而泛化性能是由學習算法的能力姻蚓,數(shù)據(jù)的充分性以及學習任務本身的難度共同決定的。給定一個學習任務匣沼,想要獲得較好的泛化性能狰挡,則需要偏差較小,方差較小释涛。偏差小意味著能夠充分擬合數(shù)據(jù)加叁,方差小意味著數(shù)據(jù)擾動產(chǎn)生的影響小。
一般而言唇撬,偏差與方差有沖突它匕,即偏差-方差窘境:給定一個學習任務,訓練程度不足時窖认,學習器擬合能力不強豫柬,訓練數(shù)據(jù)的擾動不足以使學習器產(chǎn)生明顯變化,此時偏差主導了泛化錯誤率扑浸。而隨著訓練強度加大烧给,學習器擬合能力不斷增強,訓練數(shù)據(jù)發(fā)生的擾動就能漸漸被學習器學到喝噪,此時方差主導了泛化錯誤率础嫡。在訓練程度充足之后,學習器擬合能力極強,訓練數(shù)據(jù)的輕微擾動都會使學習器發(fā)生顯著變化榴鼎,當訓練數(shù)據(jù)自身的伯诬、非全局性的特性被學習器學到,那就是過擬合了巫财。
(2)機器學習實戰(zhàn)總結
方差和偏差概念強調:方差是模型之間的差異盗似,比如說,從鮑魚數(shù)據(jù)集中隨機取100個數(shù)據(jù)用線性模型擬合得到了一組回歸系數(shù)W1翁涤,再隨機取100個數(shù)據(jù)用線性模型擬合得到了一組回歸系數(shù)W2桥言。模型方差的大小就是W1和W2之間的差異大小。而偏差是模型產(chǎn)生的預測值與真實值的差異大小葵礼。
前面提到降低核的大小号阿,就是在局部加權線性回歸中,k越來越小時鸳粉,就是提高模型復雜度扔涧,這樣學習器擬合程度漸漸提高,導致方差變大届谈,偏差變小枯夜。降低核在下圖里就是黑線從左到右的過程。
而前面提到的縮減法相反艰山,因為它將一些系數(shù)縮減成很小的值或是0湖雹,就減少了模型復雜度,增大了模型偏差曙搬。通過縮減可以去掉某些不重要的特征摔吏,使模型容易理解,同時降低預測誤差纵装≌鹘玻縮減法在下圖里就是黑線從右到左的過程。圖中左側是參數(shù)縮減過于嚴厲橡娄,右側是無縮減诗箍。
(3)丫的,還想對上面兩個博客來一個總結挽唉,仔細看看也沒啥好寫滤祖,知識點差不多寫完了。so~that? is? all~
8.6? 示例:預測樂高玩具套裝價格
完犢子。棘劣。俏让。
要訪問Google API控制臺返回產(chǎn)品信息然后做操作楞遏。茬暇。首昔。
老子在中國啊。糙俗。勒奇。萬里長城啊。巧骚。赊颠。
代碼簡記:交叉驗證測試嶺回歸,驗證10次劈彪,每次隨機選90%作訓練集竣蹦,10%作測試集,用訓練得來的回歸系數(shù)對測試集算預測誤差沧奴,因為是嶺回歸痘括,所以可以得到30個不同lambda下預測誤差。再求30個不同lambda下10次驗證的均值滔吠,找到最小誤差對應的lambda纲菌,也就是說這個lambda縮減效果最好,然后找到這個lambda對應的回歸系數(shù)疮绷,這就是要求的回歸系數(shù)了翰舌。最后將數(shù)據(jù)還原呈現(xiàn)出來即可。(好吧冬骚,我承認說的很亂椅贱,大概流程我能明白就行,這也不太好說啊~)
?8.7? 本章小結
在回歸方程里唉韭,求得特征對應的最佳回歸系數(shù)的方法是最小化誤差的平方和夜涕。
輸入數(shù)據(jù)集x,如果(x的轉置)*x的逆存在属愤,那么回歸法都可以用女器,這就是線性回歸。
因為線性回歸欠擬合住诸,所以使用“核”來對待預測點附近的點賦予更高的權重驾胆,這就是局部加權線性回歸。它在估計中引入了偏差贱呐,從而降低了預測的均方誤差丧诺。核越小,擬合越好奄薇,核太小會導致過擬合驳阎,偏差很小方差很大。
當數(shù)據(jù)樣本數(shù)少于特征數(shù)時,(x的轉置)*x的逆無法計算呵晚,或者雖然數(shù)據(jù)樣本數(shù)多于特征數(shù)蜘腌,但是特征之間高度相關,這時就要用到嶺回歸算法饵隙,它是縮減法的一種撮珠,對回歸系數(shù)的大小施加了限制,
另一種縮減法是lasso金矛,但它難以求解芯急,我們就用計算簡便的逐步線性回歸方法來求得近似結果∈豢。縮減法可以看做是對一個模型增加偏差的同時減少方差娶耍。
PS:這是我記筆記最多的一章。饼酿。伺绽。。我也是醉了嗜湃,越看越多越寫越多~感悟不少奈应,很充實,但是~真的好多啊~除了這些文字代碼也注釋了很多~~彻号看常新吧~東西多了容易忘哦~