tft每日頭條

 > 生活

 > 常用的線性回歸法

常用的線性回歸法

生活 更新时间:2025-01-21 01:00:20

導讀:本文将介紹什麼是回歸問題、解決回歸問題的基本思路步驟和用機器學習模型解決回歸問題的基本原理,以及如何用線性模型解決回歸問題。

作者:莫凡

來源:華章科技

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)1

00 線性回歸:“鋼鐵直男”解決回歸問題的正确方法

本文将介紹機器學習算法,我們選擇從線性回歸(Linear Regression)開始。

許多機器學習教材習慣一上來就深入算法的細節,這當然也有好處,但學習一門之前不大接觸的新技術時,我更傾向于遵循學習思維三部曲的節奏:是什麼(What)、為什麼(Why)和怎麼做(How)。如果我們之前未接觸過機器學習,那麼開始學習時首先問的當然是“機器學習是什麼”。

所以我們選擇從線性回歸算法開始。線性回歸算法不但結構簡單,原理好懂,同時又包含了機器學習算法的典型運作特征,方便你鳥瞰機器學習算法的運行全貌,以及仔細觀察每個組成構件的細節情況。如果此前你并不了解機器學習,不妨将線性回歸當作機器學習算法中的入門任務。

學習新技術一直存在這樣的矛盾:技術太複雜則擔心學不會,技術太簡單又擔心是不是已經過時了。畢竟我們這個時代的計算機科學正在一日千裡地飛速發展着,計算機類教材裡的許多技術可能已經被新興技術取代而退出了曆史舞台,隻是出于知識結構的完整性等考慮才像恐龍骨架一樣在教材裡保留着一席之地。

但請放心,線性回歸完全不是這麼一回事。線性回歸是一套在當下仍然具有很高實戰價值的算法,在很多現實場景中仍然發揮着不可替代的作用,不但“麻雀雖小,五髒俱全”,适合介紹剖析,而且還像麻雀一樣,蹦蹦跳跳地活躍在機器學習應用的第一線。

想要說清楚線性回歸,先回到“線性回歸”這個吓人的名字上。在通往機器學習的路上有着各色各樣的攔路虎,首先跳出來吓你一哆嗦的肯定是那些古古怪怪的術語,“線性回歸”就是裡面的傑出代表。

初次接觸“線性回歸”,可能都不知道該怎麼斷句,一不小心就要被吓得幹脆打退堂鼓。不要怕它,首先我們将這個看似無從下手的詞分成“線性”和“回歸”兩塊,可以認為這代表了兩個知識領域:前者是一類模型,叫“線性模型”;後者是一類問題,叫“回歸問題”。這樣“線性回歸”這個詞可以理解成一句話,即用線性模型來解決回歸問題。

線性模型和回歸問題湊成一對并非是劇本一開始就安排好的。回歸問題是機器學習中非常經典的一類問題,換句話說,就是有許許多多的方法模型都會用于解決回歸問題。但除了回歸問題,這些方法模型也可以解決其他問題,如分類問題。

總而言之,問題和模型是多對多的關系,問題提出要求,模型給予解決,畢竟算法和人生一樣,沒有劇本隻有驚喜,遇上了又能對得上,那才好湊成一對,所以當大家用線性模型解決回歸問題時發現還挺順手并經常用,後來幹脆起了“線性回歸”這個名字。

介紹完了名字,接下來就是“正菜”。大多數教材最習慣的做法是一上來就抛出各種眼花缭亂的公式,讓人深深陷入術語、符号和推導等細節之中,就像是正要開始學遊泳,不知就裡便被扔進了大海,從此拖着長長的心理陰影。

細節很重要,但理念更重要,剛接觸機器學習誰都隻是一張白紙,要在上面大展宏圖,首先得确定基本主題,然後勾勒整體脈絡,最後才是添加細節。這也正是本書介紹機器學習的方式。

機器學習是問題導向的,正因有了問題才會設計算法,這是機器學習最主要的脈絡。本文要解決的問題是回歸問題,用的方法是線性回歸算法。如果也将線性回歸算法比作一架機器,那線性方程和偏差度量就是組成這架機器的兩大構件,它們在權值更新這套機制下齊心協力地運轉,最終解決回歸問題。

這也是本文的要點,請格外加以關注:

  • 回歸問題
  • 線性方程
  • 偏差度量
  • 權值更新

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)2

01 用于預測未來的回歸問題

所以如果你擔心接下來将要看到什麼深奧的術語則大可不必,機器學習并非憑空而生的學科,這裡所說的回歸問題正是從統計學那裡借來的救兵。

兩百年前,與達爾文同時代的統計學家高爾頓在研究父代與子代的身高關系時,發現一種“趨中效應”:如果父代身高高于平均值,則子代具有更高概率比他父親要矮,簡單來說就是身高回歸平均值。“回歸”一詞也由此而來。

在回歸的世界裡,萬物的發展軌迹都不是一條單調向上走或向下走的直線,而是循着均值來回波動,一時會墜入低谷,但也會迎來春暖花開,而一時春風得意,也早晚會遇到坎坷挫折,峰回路轉,否極泰來,從這個角度看,回歸與其說是一個統計學問題,不如說更像是一個哲學問題。

那麼什麼是回歸問題呢?回歸問題的具體例子很多,簡單來說各個數據點都沿着一條主軸來回波動的問題都算是回歸問題。

回歸問題中有許多非常接地氣的問題,譬如根據曆史氣象記錄預測明天的溫度、根據曆史行情預測明天股票的走勢、根據曆史記錄預測某篇文章的點擊率等都是回歸問題。正因為回歸問題充滿了濃厚的生活氣息,也就成為一類十分常見的機器學習問題。

當然,回歸問題作為一種類型,有着自己獨特的結構特征,在上面描述什麼是回歸問題時,我刻意反複使用“曆史”和“預測”這兩個詞,原因正是記錄曆史值和預測未來值是回歸問題的兩個代表性特征。

在機器學習中,回歸問題和分類問題都同屬有監督學習,在數據形式上也都十分相似,那麼怎麼區分一個問題究竟是回歸問題還是分類問題呢?

  • 回歸問題和分類問題最大的區别在于預測結果

根據預測值類型的不同,預測結果可以分為兩種,一種是連續的,另一種是離散的,結果是連續的就是預測問題。

這裡的“連續”不是一個簡單的形容詞,而是有着嚴格的數學定義。不過額外引入太多複雜的概念反而會偏離主線,好在“連續”是一個可以感受的概念,最直接的例子就是時間,時間當然是連續的,連續型數值在編程時通常用int和float類型來表示,包括線性連續和非線性連續兩種,如圖3-1所示。

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)3

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)4

▲圖3-1 連續型數據

相比之下,離散型數值的最大特征是缺乏中間過渡值,所以總會出現“階躍”的現象,譬如“是”和“否”,通常用bool類型來表示,如圖3-2所示。

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)5

▲圖3-2 離散型數據

02 怎樣預測未來

回歸問題是一類預測連續值的問題,而能滿足這樣要求的數學模型稱作回歸模型,我們即将介紹的線性回歸就是回歸模型中的一種。許多教材講到回歸模型,總是匆匆進入具體的算法當中,而往往忽略替初學者解答一個問題:為什麼回歸模型能夠進行預測?這是一個似乎理所當然,但其實并沒有那麼不喻自明的問題。

許多人對“預測”的第一印象也許是傳說中的一個故事,有兩位高人結伴出行,晚上歇于一處破廟,甲對乙說,“睡覺别靠牆,我剛掐指一算,寅時牆會倒。”乙不屑一顧地擺擺手,“我剛才也掐指一算,牆是倒向右邊,我靠左睡可保無憂。”

故事裡的高人也是要看書的,不過多半看的是《奇門遁甲》,而不太可能是《機器學習》。奇門遁甲不在本書的讨論範圍,那麼,機器學習的回歸模型能不能實現精準的預測呢?

也許可以,不過要有條件:需要有充足的曆史數據。數據的重要性怎麼強調都不為過,如果将機器學習算法比作一架機器,那麼數據就是驅動這架機器的燃料,沒有燃料驅動,機器設計得再精巧也隻能是擺設。

我們不是要預測未來嗎,為什麼反而說曆史數據這麼重要呢?這個問題涉及哲學,可以追溯到世界是萬事萬物相互聯系的統一整體,或者簡單一點,不妨把預測當作一次偵探小說中的推理過程,犯罪手法總是要留下痕迹的,隻要你找到相關聯的線索,就能夠推理出最終的結果。

當然,預測難就難在待預測對象與什麼相關是未知的,不過好在其中的關聯關系就藏在曆史數據之中,你要做的就是通過機器學習算法把它挖掘出來。機器學習算法并不發明關系,隻是關聯關系的搬運工。有一種尚存争議的觀點甚至說得更直白:機器學習遠不是什麼欲說還休的神秘技術,從數學的角度看就是拟合,對輸入數據點的拟合。

  • 機器學習實現預測的流程

機器學習算法究竟有什麼魔力,竟然能夠預測未來?不妨就以前面兩個高人的故事為例,用科學觀點來研究牆體坍塌的問題。牆體坍塌可能由許多偶然因素導緻,我們都不是土木專家,不妨憑感覺随手列出幾條可能導緻牆坍塌的因素:

  • 譬如可能與砌牆的材質有關,土坯牆總比水泥牆容易垮塌;
  • 可能與使用時間的長短有關;
  • 可能與承建商有關,喜歡偷工減料的工程隊容易出“豆腐渣工程”;
  • 還有一些外部環境因素,譬如整天風吹雨淋的牆容易垮塌;
  • 最後就是牆體坍塌之前總會有一些早期迹象,譬如已經出現很多裂縫等。

上面所列因素有三種情況:與坍塌密切相關,與坍塌有點關系,以及與坍塌毫無瓜葛。如果人工完成預測任務,當然最重要的工作就是找出哪些是密切相關的,放在第一位;哪些是有點關系的,放在參考位置;哪些毫無瓜葛,統統删掉。

可是我們又怎麼知道哪些因素有哪些關系呢?這時我們就可以制作一張調查表,把砌牆用的什麼材料、已經用了多久、出現了多少條裂縫等情況一一填進去,這就是前面所說的數據集中每一條樣本數據的維度。就像商家很喜歡通過網上問卷來了解用戶偏好一樣,我們也利用調查表來了解牆體坍塌有什麼“偏好”。

調查表大概形式如下表所示。

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)6

最後一欄是“坍塌概率”,這是我們最關心的,也是有監督學習所必需的。這些已知的坍塌概率以及相關的維度數據将為未知概率的預測提供重要幫助。

最後也是最關鍵的一步,是找出各個維度和坍塌之間的概率,而這個步驟将由模型自行完成。

我們要做的隻是将長長的曆史數據輸入回歸模型,回歸模型就會通過統計方法尋找牆體坍塌的關聯關系,看看使用時間的長短和承建商的選擇誰更重要,相關術語叫作訓練模型,從數學的角度看,這個過程就是通過調節模型參數從而拟合數據。怎樣調節參數來拟合數據是每一款機器學習模型都需要思考的重要問題。

模型訓練完畢後,再把當前要預測的牆體情況按數據維度依次填好,回歸模型就能告訴我們當前牆體坍塌概率的預測結果了。流程如圖3-3所示。

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)7

▲圖3-3 回歸模型訓練示意圖

可以看出,回歸模型就是預測的關鍵,我們通過給模型“喂”數據來訓練它,最終讓它具備了預測的能力。也許你對“模型”這個詞感到陌生又好奇,不知道該在腦海裡給它分配一個什麼樣的形象。而圖3-3的“模型”是一個大大的四方盒子,塞進數據就能吐出預測結果,像是奇幻故事中巫師手中具有神奇魔力的水晶球。

不用着急,“模型”這個詞将貫穿我們對機器學習的整個巡禮,就像慶典遊行裡的花車正等着我們逐一觀賞呢。接下來迎面走來的就是第一款模型——線性模型。

03 線性方程的“直男”本性

也許你對名為“模型”的大盒子充滿期待,同時又擔心會冒出一大堆數學符号,所以不敢馬上掀開一窺究竟。不過,線性模型反倒更像是一個過度包裝的大禮盒,大大的盒子打開一看,裡面孤零零隻有一樣東西:線性方程。第一次接觸時各種名詞很容易把人繞糊塗,不急,我們先把名詞之間的關系捋一捋。

前面在介紹機器學習的基本原理時,提到“假設函數”這個術語,假設函數是一類函數,所起的作用就是預測,這裡的線性方程就是線性回歸模型的假設函數。

别看名字挺“高冷”,其實特别簡單。“線性”就是“像直線那樣”,譬如線性增長就是像直線那樣增長。我們知道,直線是最簡單的幾何圖形,而線性方程說直白一點,就是能畫出直線的一種方程。如果方程有性格的話,那麼線性方程一定就是“直男”的典型代表。

直線方程最大的特點就是“耿直”,由始至終都是直來直去,函數圖像如圖3-4所示。

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)8

▲圖3-4 線性函數的函數圖像

這樣看好像也沒什麼,但對比一下同樣常見的以2為底數的對數函數(見圖3-5a)和指數函數(見圖3-5b)就能明顯看出,其他函數多多少少都要帶一點弧度,這是變化不均勻所導緻的。相比之下,直線方程開始是什麼樣子則始終是什麼樣子。

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)9

▲圖3-5 非線性函數的函數圖像

直線方程通常寫作y=kx b,k稱為斜率,b稱為截距,這兩個參數可以看作兩枚重要的旋鈕,直接控制直線進行“旋轉”和“平移”的動作。具體來說,通過調整斜率,可以改變直線的角度。

在圖3-6的四幅圖中,直線均具有相同的截距,黑實線斜率均為2,但右上、左下、右下的三幅圖中灰線斜率分别為1、1/2和0,對比黑實線可以看出,通過改變斜率可以使直線出現“旋轉”的動作效果。

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)10

▲圖3-6 4條斜率不同的線性函數圖像對比

直線還有另一種調節方法。通過調整截距b,可以實現直線的上下平移。如圖3-7所示,這三條平行的直線具有相同的斜率,但截距相差1,可以看到直線出現了上下平移的動作效果。

“旋轉”和“平移”就是直線的全部看家本領了,這正體現了線性方程簡單直率的“直男”本性。

準确來說,線性方程和直線方程還是存在一點微小差别的。直線是二維平面圖形,而線性所在的空間則可能是多維的。不過,無論是在二維平面還是在多維空間,直線所能做的也就是“旋轉”和“平移”兩套動作,線性模型想要拟合能夠調節的參數,主要也就隻有這兩個。

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)11

▲圖3-7 三條截距相差1的線性函數圖像對比

在機器學習中,斜率k通常用字母w表示,是權值(weight)的首字母。通過調整w和b的值就能控制直線在多維空間中進行旋轉和平移,扮演的角色很像老式收音機上的旋鈕,通過旋轉旋鈕就可能收聽到想要的電台。

這個通過調整權值來達到目的的過程叫作權值調整或者權值更新,對于線性模型而言,學習過程的主要工作就是權值調整,隻要旋動旋鈕,合理搭配旋轉和平移這兩套簡單的動作,就能完成對輸入數據的拟合工作,從而解決回歸問題。

  • 關于調整權值的另一種解釋

在機器學習中,通過調整權值來完成學習,并最終進行預測的算法很多,這也是一種非常常見的學習手段。對于為什麼調整權值能夠進行預測,實際上也有多種解釋,上面從幾何角度給出了解釋,此外還有代數角度的解釋。

以三個輸入維度A、B、C來預測P為例,我們的線性方程可以寫為:

F=W1*A W2*B W3*C

假設我們知道P的值其實就是與A的值有關,與B、C毫無關系,那麼,怎樣調整線性方程才可以根據輸入準确預測出P的值呢?

我們知道,線性方程的計算結果F是三個維度的加權和,想要使F與P最接近,隻需要讓線性方程中B、C這兩個加項對結果影響最小即可。這個好辦,隻要使這兩項的權值最小,也就是W2和W3的值為0就可以了。

這就是從代數角度來解釋為什麼調整權值能夠提高預測結果的準确性。這裡實際上體現了一種假設,就是待預測的結果與輸入的某個或某幾個維度相關,而調整權值的目的就是使得與預測結果相關度高的權值越高,确保相關維度的值對最終加權和的貢獻越大,反之權值越低,貢獻越小。

04 最簡單的回歸問題——線性回歸問題

前面我們介紹了什麼是回歸問題,也直觀感受了線性方程的“直男”本性,那麼在這一節将對為什麼模型能進行預測給出一個很直接的回答。當然,學術界對于這個問題的認識還未完全統一,這裡選擇沿用一種當前最主流的觀點。

直到目前為止,我們還不能全面地了解這個世界,但紛繁複雜的現實世界大體還是遵循着某種規律的,我們不妨叫作“神秘方程”。而我們在機器學習領域所做的,就是通過曆史數據訓練模型,希望能夠使我們的模型最大限度地去拟合“神秘方程”——一旦偷看了導演的劇本,還怕有什麼劇情不能預測嗎?

不過,也許你已經發現,這存在一個問題。

就拿線性模型來說吧,線性模型是用直線方程去拟合數據,但直線可是“鋼鐵直男”,它的動作也隻有兩套而已啊!模型的能力是有上限的,能力跟不上,想最大限度地拟合也還是心有餘而力不足。

所以,選擇模型的關鍵不在于模型的複雜程度,而在于數據分布。你也許會擔心,線性模型簡單好懂,這也是它為什麼特别适合用來做入門任務,但唯一的問題是它太簡單了,現實世界這麼複雜,它真的能夠解決問題嗎?

要知道尺有所短,寸有所長,回歸問題是一個大類,其中有一類問題叫線性回歸問題,遇到這種問題不用線性模型還真就不行。下面,我們就來看看線性回歸是怎樣完成預測的。

  • 利用線性回歸進行預測的極速入門

在線性回歸問題裡,所要預測的“神秘方程”當然也是線性方程。這類方程存在固有特征,最明顯的就是數據集點沿線性分布,所以用線性模型效果最好。也許你不敢相信,這個世界這麼複雜,真的有這麼簡單的“神秘方程”嗎?真的有,而且你肯定還見過,一起來回憶一下:

已知小明前年3歲,去年4歲,今年5歲,請問小明明年幾歲?

首先這無疑是個預測連續值的問題,明明白白是一個回歸問題。回歸關注的是幾個變量之間的相互變化關系,如果這種關系是線性的,那麼這就是一個線性回歸問題,适合用線性模型解決。我們按照機器學習的習慣,把已知條件整理成數據集,這是一個三行兩列的矩陣:

[[2017,3],

[2018,4],

[2019,5]]

這是一個二維矩陣,如果畫出圖像,兩個維度之間的線性關系就一目了然。這裡以年份為X軸、年齡為Y軸将記錄的數據畫出來,得到3個呈線性排列的數據點(見圖3-8a)。把這些點用線段連接起來,就能更清楚地看到這3個點排成了一條直線(見圖3-8b)。

這條直線寫成線性方程就是y=x-2014,即所謂的“假設函數”。線性回歸的預測就依賴于這條方程,2019年剛剛過去,我們當然隻能知道2019年之前的真實數據,但對于未來也就是小明在2019年之後的年齡,通過這條線性方程即可以預測得到。

譬如把“2020”作為x輸入,就能計算出對應的y值是“6”,也就得到了2020年小明将是6歲的預測結果。這個例子很簡單,但已經完整地展示了線性回歸“預測魔力”背後的原理,線性回歸的預測魔力還經常被運用在經濟和金融等場景,聽起來更高端,不過就原理來說,也隻是這個簡單例子的延伸和拓展。

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)12

▲圖3-8 呈線性關系的數據集點分布(a),如果連起來會出現一條直線(b)

關于作者:莫凡,新技術深度愛好者,曾經從事信息安全前沿技術跟蹤研究和數據分析工作,在各類信息安全類技術期刊發表文章五十餘篇,現轉為投身高端知識“白菜化”項目,希望能讓将更多聽起來高大上的名詞沾一沾“人間煙火”,成為日常生活中真正用得上的知識。

本文摘編自《機器學習算法的數學解析與Python實現》,經出版方授權發布。

常用的線性回歸法(可能是講解線性回歸算法最通俗易懂的一篇文章)13

延伸閱讀《機器學習算法的數學解析與Python實現》

推薦語:從生活案例中理解算法,發現算法的樂趣,再把算法應用到機器學習中。零基礎掌握算法精髓,快速進入人工智能開發領域。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved