終于有人把線性回歸講明白了(1)
00 線性回歸:“鋼鐵直男”解決回歸問題的正確方法
本文將介紹機(jī)器學(xué)習(xí)算法,我們選擇從線性回歸(Linear Regression)開始。
許多機(jī)器學(xué)習(xí)教材習(xí)慣一上來就深入算法的細(xì)節(jié),這當(dāng)然也有好處,但學(xué)習(xí)一門之前不大接觸的新技術(shù)時(shí),我更傾向于遵循學(xué)習(xí)思維三部曲的節(jié)奏:是什么(What)、為什么(Why)和怎么做(How)。如果我們之前未接觸過機(jī)器學(xué)習(xí),那么開始學(xué)習(xí)時(shí)首先問的當(dāng)然是“機(jī)器學(xué)習(xí)是什么”。
所以我們選擇從線性回歸算法開始。線性回歸算法不但結(jié)構(gòu)簡(jiǎn)單,原理好懂,同時(shí)又包含了機(jī)器學(xué)習(xí)算法的典型運(yùn)作特征,方便你鳥瞰機(jī)器學(xué)習(xí)算法的運(yùn)行全貌,以及仔細(xì)觀察每個(gè)組成構(gòu)件的細(xì)節(jié)情況。如果此前你并不了解機(jī)器學(xué)習(xí),不妨將線性回歸當(dāng)作機(jī)器學(xué)習(xí)算法中的入門任務(wù)。
學(xué)習(xí)新技術(shù)一直存在這樣的矛盾:技術(shù)太復(fù)雜則擔(dān)心學(xué)不會(huì),技術(shù)太簡(jiǎn)單又擔(dān)心是不是已經(jīng)過時(shí)了。畢竟我們這個(gè)時(shí)代的計(jì)算機(jī)科學(xué)正在一日千里地飛速發(fā)展著,計(jì)算機(jī)類教材里的許多技術(shù)可能已經(jīng)被新興技術(shù)取代而退出了歷史舞臺(tái),只是出于知識(shí)結(jié)構(gòu)的完整性等考慮才像恐龍骨架一樣在教材里保留著一席之地。
但請(qǐng)放心,線性回歸完全不是這么一回事。線性回歸是一套在當(dāng)下仍然具有很高實(shí)戰(zhàn)價(jià)值的算法,在很多現(xiàn)實(shí)場(chǎng)景中仍然發(fā)揮著不可替代的作用,不但“麻雀雖小,五臟俱全”,適合介紹剖析,而且還像麻雀一樣,蹦蹦跳跳地活躍在機(jī)器學(xué)習(xí)應(yīng)用的第一線。
想要說清楚線性回歸,先回到“線性回歸”這個(gè)嚇人的名字上。在通往機(jī)器學(xué)習(xí)的路上有著各色各樣的攔路虎,首先跳出來嚇你一哆嗦的肯定是那些古古怪怪的術(shù)語,“線性回歸”就是里面的杰出代表。
初次接觸“線性回歸”,可能都不知道該怎么斷句,一不小心就要被嚇得干脆打退堂鼓。不要怕它,首先我們將這個(gè)看似無從下手的詞分成“線性”和“回歸”兩塊,可以認(rèn)為這代表了兩個(gè)知識(shí)領(lǐng)域:前者是一類模型,叫“線性模型”;后者是一類問題,叫“回歸問題”。這樣“線性回歸”這個(gè)詞可以理解成一句話,即用線性模型來解決回歸問題。
線性模型和回歸問題湊成一對(duì)并非是劇本一開始就安排好的?;貧w問題是機(jī)器學(xué)習(xí)中非常經(jīng)典的一類問題,換句話說,就是有許許多多的方法模型都會(huì)用于解決回歸問題。但除了回歸問題,這些方法模型也可以解決其他問題,如分類問題。
總而言之,問題和模型是多對(duì)多的關(guān)系,問題提出要求,模型給予解決,畢竟算法和人生一樣,沒有劇本只有驚喜,遇上了又能對(duì)得上,那才好湊成一對(duì),所以當(dāng)大家用線性模型解決回歸問題時(shí)發(fā)現(xiàn)還挺順手并經(jīng)常用,后來干脆起了“線性回歸”這個(gè)名字。
介紹完了名字,接下來就是“正菜”。大多數(shù)教材最習(xí)慣的做法是一上來就拋出各種眼花繚亂的公式,讓人深深陷入術(shù)語、符號(hào)和推導(dǎo)等細(xì)節(jié)之中,就像是正要開始學(xué)游泳,不知就里便被扔進(jìn)了大海,從此拖著長(zhǎng)長(zhǎng)的心理陰影。
細(xì)節(jié)很重要,但理念更重要,剛接觸機(jī)器學(xué)習(xí)誰都只是一張白紙,要在上面大展宏圖,首先得確定基本主題,然后勾勒整體脈絡(luò),最后才是添加細(xì)節(jié)。這也正是本書介紹機(jī)器學(xué)習(xí)的方式。
機(jī)器學(xué)習(xí)是問題導(dǎo)向的,正因有了問題才會(huì)設(shè)計(jì)算法,這是機(jī)器學(xué)習(xí)最主要的脈絡(luò)。本文要解決的問題是回歸問題,用的方法是線性回歸算法。如果也將線性回歸算法比作一架機(jī)器,那線性方程和偏差度量就是組成這架機(jī)器的兩大構(gòu)件,它們?cè)跈?quán)值更新這套機(jī)制下齊心協(xié)力地運(yùn)轉(zhuǎn),最終解決回歸問題。
這也是本文的要點(diǎn),請(qǐng)格外加以關(guān)注:
回歸問題
線性方程
偏差度量
權(quán)值更新
01 用于預(yù)測(cè)未來的回歸問題
所以如果你擔(dān)心接下來將要看到什么深?yuàn)W的術(shù)語則大可不必,機(jī)器學(xué)習(xí)并非憑空而生的學(xué)科,這里所說的回歸問題正是從統(tǒng)計(jì)學(xué)那里借來的救兵。
兩百年前,與達(dá)爾文同時(shí)代的統(tǒng)計(jì)學(xué)家高爾頓在研究父代與子代的身高關(guān)系時(shí),發(fā)現(xiàn)一種“趨中效應(yīng)”:如果父代身高高于平均值,則子代具有更高概率比他父親要矮,簡(jiǎn)單來說就是身高回歸平均值?!盎貧w”一詞也由此而來。
在回歸的世界里,萬物的發(fā)展軌跡都不是一條單調(diào)向上走或向下走的直線,而是循著均值來回波動(dòng),一時(shí)會(huì)墜入低谷,但也會(huì)迎來春暖花開,而一時(shí)春風(fēng)得意,也早晚會(huì)遇到坎坷挫折,峰回路轉(zhuǎn),否極泰來,從這個(gè)角度看,回歸與其說是一個(gè)統(tǒng)計(jì)學(xué)問題,不如說更像是一個(gè)哲學(xué)問題。
那么什么是回歸問題呢?回歸問題的具體例子很多,簡(jiǎn)單來說各個(gè)數(shù)據(jù)點(diǎn)都沿著一條主軸來回波動(dòng)的問題都算是回歸問題。
回歸問題中有許多非常接地氣的問題,譬如根據(jù)歷史氣象記錄預(yù)測(cè)明天的溫度、根據(jù)歷史行情預(yù)測(cè)明天股****的****、根據(jù)歷史記錄預(yù)測(cè)某篇文章的點(diǎn)擊率等都是回歸問題。正因?yàn)榛貧w問題充滿了濃厚的生活氣息,也就成為一類十分常見的機(jī)器學(xué)習(xí)問題。
當(dāng)然,回歸問題作為一種類型,有著自己獨(dú)特的結(jié)構(gòu)特征,在上面描述什么是回歸問題時(shí),我刻意反復(fù)使用“歷史”和“預(yù)測(cè)”這兩個(gè)詞,原因正是記錄歷史值和預(yù)測(cè)未來值是回歸問題的兩個(gè)代表性特征。
在機(jī)器學(xué)習(xí)中,回歸問題和分類問題都同屬有監(jiān)督學(xué)習(xí),在數(shù)據(jù)形式上也都十分相似,那么怎么區(qū)分一個(gè)問題究竟是回歸問題還是分類問題呢?
回歸問題和分類問題最大的區(qū)別在于預(yù)測(cè)結(jié)果
根據(jù)預(yù)測(cè)值類型的不同,預(yù)測(cè)結(jié)果可以分為兩種,一種是連續(xù)的,另一種是離散的,結(jié)果是連續(xù)的就是預(yù)測(cè)問題。
這里的“連續(xù)”不是一個(gè)簡(jiǎn)單的形容詞,而是有著嚴(yán)格的數(shù)學(xué)定義。不過額外引入太多復(fù)雜的概念反而會(huì)偏離主線,好在“連續(xù)”是一個(gè)可以感受的概念,最直接的例子就是時(shí)間,時(shí)間當(dāng)然是連續(xù)的,連續(xù)型數(shù)值在編程時(shí)通常用int和float類型來表示,包括線性連續(xù)和非線性連續(xù)兩種,如圖3-1所示。
▲圖3-1 連續(xù)型數(shù)據(jù)
相比之下,離散型數(shù)值的最大特征是缺乏中間過渡值,所以總會(huì)出現(xiàn)“階躍”的現(xiàn)象,譬如“是”和“否”,通常用bool類型來表示,如圖3-2所示。
▲圖3-2 離散型數(shù)據(jù)
02 怎樣預(yù)測(cè)未來
回歸問題是一類預(yù)測(cè)連續(xù)值的問題,而能滿足這樣要求的數(shù)學(xué)模型稱作回歸模型,我們即將介紹的線性回歸就是回歸模型中的一種。許多教材講到回歸模型,總是匆匆進(jìn)入具體的算法當(dāng)中,而往往忽略替初學(xué)者解答一個(gè)問題:為什么回歸模型能夠進(jìn)行預(yù)測(cè)?這是一個(gè)似乎理所當(dāng)然,但其實(shí)并沒有那么不喻自明的問題。
許多人對(duì)“預(yù)測(cè)”的第一印象也許是傳說中的一個(gè)故事,有兩位高人結(jié)伴出行,晚上歇于一處破廟,甲對(duì)乙說,“睡覺別靠墻,我剛掐指一算,寅時(shí)墻會(huì)倒?!币也恍家活櫟?cái)[擺手,“我剛才也掐指一算,墻是倒向右邊,我靠左睡可保無憂?!?/p>
故事里的高人也是要看書的,不過多半看的是《奇門遁甲》,而不太可能是《機(jī)器學(xué)習(xí)》。奇門遁甲不在本書的討論范圍,那么,機(jī)器學(xué)習(xí)的回歸模型能不能實(shí)現(xiàn)精準(zhǔn)的預(yù)測(cè)呢?
也許可以,不過要有條件:需要有充足的歷史數(shù)據(jù)。數(shù)據(jù)的重要性怎么強(qiáng)調(diào)都不為過,如果將機(jī)器學(xué)習(xí)算法比作一架機(jī)器,那么數(shù)據(jù)就是驅(qū)動(dòng)這架機(jī)器的燃料,沒有燃料驅(qū)動(dòng),機(jī)器設(shè)計(jì)得再精巧也只能是擺設(shè)。
我們不是要預(yù)測(cè)未來嗎,為什么反而說歷史數(shù)據(jù)這么重要呢?這個(gè)問題涉及哲學(xué),可以追溯到世界是萬事萬物相互聯(lián)系的統(tǒng)一整體,或者簡(jiǎn)單一點(diǎn),不妨把預(yù)測(cè)當(dāng)作一次偵探小說中的推理過程,犯罪手法總是要留下痕跡的,只要你找到相關(guān)聯(lián)的線索,就能夠推理出最終的結(jié)果。
當(dāng)然,預(yù)測(cè)難就難在待預(yù)測(cè)對(duì)象與什么相關(guān)是未知的,不過好在其中的關(guān)聯(lián)關(guān)系就藏在歷史數(shù)據(jù)之中,你要做的就是通過機(jī)器學(xué)習(xí)算法把它挖掘出來。機(jī)器學(xué)習(xí)算法并不發(fā)明關(guān)系,只是關(guān)聯(lián)關(guān)系的搬運(yùn)工。有一種尚存爭(zhēng)議的觀點(diǎn)甚至說得更直白:機(jī)器學(xué)習(xí)遠(yuǎn)不是什么欲說還休的神秘技術(shù),從數(shù)學(xué)的角度看就是擬合,對(duì)輸入數(shù)據(jù)點(diǎn)的擬合。
機(jī)器學(xué)習(xí)實(shí)現(xiàn)預(yù)測(cè)的流程
機(jī)器學(xué)習(xí)算法究竟有什么魔力,竟然能夠預(yù)測(cè)未來?不妨就以前面兩個(gè)高人的故事為例,用科學(xué)觀點(diǎn)來研究墻體坍塌的問題。墻體坍塌可能由許多偶然因素導(dǎo)致,我們都不是土木專家,不妨憑感覺隨手列出幾條可能導(dǎo)致墻坍塌的因素:
譬如可能與砌墻的材質(zhì)有關(guān),土坯墻總比水泥墻容易垮塌;
可能與使用時(shí)間的長(zhǎng)短有關(guān);
可能與承建商有關(guān),喜歡偷工減料的工程隊(duì)容易出“豆腐渣工程”;
還有一些外部環(huán)境因素,譬如整天風(fēng)吹雨淋的墻容易垮塌;
最后就是墻體坍塌之前總會(huì)有一些早期跡象,譬如已經(jīng)出現(xiàn)很多裂縫等。
上面所列因素有三種情況:與坍塌密切相關(guān),與坍塌有點(diǎn)關(guān)系,以及與坍塌毫無瓜葛。如果人工完成預(yù)測(cè)任務(wù),當(dāng)然最重要的工作就是找出哪些是密切相關(guān)的,放在第一位;哪些是有點(diǎn)關(guān)系的,放在參考位置;哪些毫無瓜葛,統(tǒng)統(tǒng)刪掉。
可是我們又怎么知道哪些因素有哪些關(guān)系呢?這時(shí)我們就可以制作一張調(diào)查表,把砌墻用的什么材料、已經(jīng)用了多久、出現(xiàn)了多少條裂縫等情況一一填進(jìn)去,這就是前面所說的數(shù)據(jù)集中每一條樣本數(shù)據(jù)的維度。就像商家很喜歡通過網(wǎng)上問卷來了解用戶偏好一樣,我們也利用調(diào)查表來了解墻體坍塌有什么“偏好”。
調(diào)查表大概形式如下表所示。
最后一欄是“坍塌概率”,這是我們最關(guān)心的,也是有監(jiān)督學(xué)習(xí)所必需的。這些已知的坍塌概率以及相關(guān)的維度數(shù)據(jù)將為未知概率的預(yù)測(cè)提供重要幫助。
最后也是最關(guān)鍵的一步,是找出各個(gè)維度和坍塌之間的概率,而這個(gè)步驟將由模型自行完成。
我們要做的只是將長(zhǎng)長(zhǎng)的歷史數(shù)據(jù)輸入回歸模型,回歸模型就會(huì)通過統(tǒng)計(jì)方法尋找墻體坍塌的關(guān)聯(lián)關(guān)系,看看使用時(shí)間的長(zhǎng)短和承建商的選擇誰更重要,相關(guān)術(shù)語叫作訓(xùn)練模型,從數(shù)學(xué)的角度看,這個(gè)過程就是通過調(diào)節(jié)模型參數(shù)從而擬合數(shù)據(jù)。怎樣調(diào)節(jié)參數(shù)來擬合數(shù)據(jù)是每一款機(jī)器學(xué)習(xí)模型都需要思考的重要問題。
模型訓(xùn)練完畢后,再把當(dāng)前要預(yù)測(cè)的墻體情況按數(shù)據(jù)維度依次填好,回歸模型就能告訴我們當(dāng)前墻體坍塌概率的預(yù)測(cè)結(jié)果了。流程如圖3-3所示。
▲圖3-3 回歸模型訓(xùn)練示意圖
可以看出,回歸模型就是預(yù)測(cè)的關(guān)鍵,我們通過給模型“喂”數(shù)據(jù)來訓(xùn)練它,最終讓它具備了預(yù)測(cè)的能力。也許你對(duì)“模型”這個(gè)詞感到陌生又好奇,不知道該在腦海里給它分配一個(gè)什么樣的形象。而圖3-3的“模型”是一個(gè)大大的四方盒子,塞進(jìn)數(shù)據(jù)就能吐出預(yù)測(cè)結(jié)果,像是奇幻故事中巫師手中具有神奇魔力的水晶球。
不用著急,“模型”這個(gè)詞將貫穿我們對(duì)機(jī)器學(xué)習(xí)的整個(gè)巡禮,就像慶典游行里的花車正等著我們逐一觀賞呢。接下來迎面走來的就是第一款模型——線性模型。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。