博客專欄

        EEPW首頁 > 博客 > 終于有人把線性回歸講明白了(1)

        終于有人把線性回歸講明白了(1)

        發布人:數據派THU 時間:2021-07-23 來源:工程師 發布文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        回歸問題

        線性方程

        偏差度量

        權值更新

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

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

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

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

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

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

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

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

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

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

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

        1.png2.png

        ▲圖3-1 連續型數據

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

        3.png

        ▲圖3-2 離散型數據

        02 怎樣預測未來

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

        許多人對“預測”的第一印象也許是傳說中的一個故事,有兩位高人結伴出行,晚上歇于一處破廟,甲對乙說,“睡覺別靠墻,我剛掐指一算,寅時墻會倒?!币也恍家活櫟財[擺手,“我剛才也掐指一算,墻是倒向右邊,我靠左睡可保無憂?!?/p>

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

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

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

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

        機器學習實現預測的流程

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

        譬如可能與砌墻的材質有關,土坯墻總比水泥墻容易垮塌;

        可能與使用時間的長短有關;

        可能與承建商有關,喜歡偷工減料的工程隊容易出“豆腐渣工程”;

        還有一些外部環境因素,譬如整天風吹雨淋的墻容易垮塌;

        最后就是墻體坍塌之前總會有一些早期跡象,譬如已經出現很多裂縫等。

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

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

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

        4.png

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

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

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

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

        5.png

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

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

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

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 大數據

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 张家界市| 连云港市| 阿合奇县| 湘阴县| 黔江区| 年辖:市辖区| 精河县| 安化县| 平陆县| 古丈县| 龙游县| 肇庆市| 台东县| 托克托县| 堆龙德庆县| 桂东县| 宜都市| 竹北市| 甘肃省| 长白| 五原县| 海门市| 克山县| 德惠市| 台东市| 那坡县| 霍邱县| 游戏| 黔江区| 淮安市| 玛纳斯县| 泸溪县| 承德县| 苍梧县| 通州市| 阳山县| 安丘市| 新龙县| 新蔡县| 阿图什市| 正蓝旗|