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