1. 程式人生 > >《Machine Learning in Action》—— 淺談線性迴歸的那些事

《Machine Learning in Action》—— 淺談線性迴歸的那些事

tags:機器學習

《Machine Learning in Action》—— 淺談線性迴歸的那些事

手撕機器學習算法系列文章已經肝了不少,自我感覺質量都挺不錯的。目前已經更新了支援向量機SVM、決策樹、K-近鄰(KNN)、貝葉斯分類,讀者可根據以下內容自行“充電”(持續更新中):

  • 《Machine Learning in Action》—— 剖析支援向量機,單手狂撕線性SVM: https://www.zybuluo.com/tianxingjian/note/1755051
  • 《Machine Learning in Action》—— 剖析支援向量機,優化SMO: https://www.zybuluo.com/tianxingjian/note/1756832
  • 《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非線性支援向量機: https://www.zybuluo.com/tianxingjian/note/1758624
  • 《Machine Learning in Action》—— Taoye給你講講決策樹到底是支什麼“鬼”: https://www.zybuluo.com/tianxingjian/note/1757662
  • 《Machine Learning in Action》—— 小朋友,快來玩啊,決策樹呦: https://www.zybuluo.com/tianxingjian/note/1758236
  • 《Machine Learning in Action》—— 女同學問Taoye,KNN應該怎麼玩才能通關: https://www.zybuluo.com/tianxingjian/note/1759263
  • 《Machine Learning in Action》—— 白話貝葉斯,“恰瓜群眾”應該恰好瓜還是恰壞瓜: https://www.zybuluo.com/tianxingjian/note/1758540
  • 《Machine Learning in Action》—— 淺談線性迴歸的那些事: https://www.zybuluo.com/tianxingjian/note/1761762

閱讀過上述那些文章的讀者應該都知道,上述內容都屬於分類演算法,分類的目標變數都是標稱型資料(關於標稱型和資料型資料的意思的可參考上文)。而本文主要講述的內容是線性迴歸,它是一種迴歸擬合問題,會對連續性資料做出預測,而非判別某個樣本屬於哪一類。

本文主要包括的內容有如下幾部分:

  • 線性迴歸,我們來談談小姐姐如何相親
  • 揭開梯度下降演算法的神祕面紗
  • 基於梯度下降演算法實現線性迴歸擬合

一、線性迴歸,我們來談談小姐姐如何相親

迴歸預測,迴歸預測,說到底就包括兩個部分。

一個是迴歸(擬合),另一個是預測。迴歸是為預測做準備或者說是鋪墊,只有基於已有的資料集我們才能構建一個的迴歸模型,然後根據這個迴歸模型來處理新樣本資料的過程就是預測。

而線性迴歸就是我們的迴歸模型屬於線性的,也就是說我們樣本的每個屬性特徵都最多是一次的(進來的讀者 應該都知道吧)

為了讓讀者對線性迴歸有個基本的瞭解,我們來聊聊小姐姐的相親故事。

故事是這樣的。

在很久很久以前,有位小姐姐打算去相親,她比較在意物件的薪資情況,但這種事情也不太好意思直入主題,你說是吧?所以呢,她就想著通過相親物件本身的屬性特徵來達到一個預測薪資的目的。假如說這位小姐姐認為物件的薪資主要有兩個部分的資料的組成,分別是物件的年齡和頭髮量。對此,小姐姐想要構建出這麼一個關於薪資的線性模型:

中文形式的描述就是:

所以呢,小姐姐現在的目的就是想要得到這麼一個 的值,然後觀察和詢問相親物件的髮量以及年齡,就可以根據這個線性模型計算得出其相親物件的薪資情況。

那麼,如何得到 的值呢???就在小姐姐腦闊疼的厲害之時,Taoye是這麼手握手教小姐姐的:“小姐姐,你可以先相親1000個物件,觀察並詢問物件的髮量和年齡之後,然後通過社會工程學來得到他的薪資情況。有了這1000組物件資料之後,你就能訓練出 的值,從而得到誤差達到最小時候的這個線性模型”

小姐姐聽完Taoye的講述之後,真的是一語驚醒夢中人啊,心想:妙啊,就這麼幹!!!

以上例子中的內容純屬Taoye胡扯,只為描述線性迴歸的過程,不代表任何觀點。

二、揭開梯度下降演算法的神祕面紗

通過上述小姐姐的相親故事,相信各位看官都已經對線性迴歸的過程有了一個基本的認識,而要具體操作線性迴歸,我們還需明白一個在機器學習領域中比較重要的演算法,也就是梯度下降演算法。

要理解梯度下降演算法,我們可以將其類比成一個人下山的過程,這也是我們理解梯度下降演算法時候最常用的一個例子,也就是這麼一個場景:

有個人被困在山上,他現在要做的就是下山,也就是到達山的最低點。但是呢,現在整座山煙霧繚繞,可見度非常的低,所以下山的路徑暫時無法確定,他必須通過自己此刻所在地的一些資訊來一步步找到下山的路徑。此時,就是梯度下降演算法大顯身手的時候了。具體怎麼做呢?

是這樣的,首先會以他當前所在地為基準,尋找此刻所處位置的最陡峭的地方,然後朝著下降的方向按照自己的設定走一步。走一步之後,就來到了一個新的位置,然後將這個新的位置作為基準,再找到最陡峭的地方,沿著這個方向再走一步,如此迴圈往復,知道走到最低點。這就是梯度下降演算法的類別過程,上山同理也是一樣,只不過變成了梯度上升演算法。

梯度下降演算法的基本過程就類似於上述下山的場景。

首先,我們會有一個可微分的函式。這個函式就類似於上述的一座山。我們的目標就是找到這個函式的最小值,也就是上述中山的最低點。根據之前的場景假設,最快的下山的方式就是找到當前位置最陡峭的方向,然後沿著此方向向下走,在這個可微分函式中,梯度反方向就代表這此山最陡峭的方向,也就是函式下降最快的方向。因為梯度的方向就是函式變化最快的方向(在後面會詳細解釋)

所以,我們重複利用這個方法,在達到一個新的位置之後,反覆求取梯度,最後就能到達區域性的最小值,這就類似於我們下山的過程。而求取梯度就確定了最陡峭的方向,也就是場景中測量方向的手段。那麼為什麼梯度的方向就是最陡峭的方向呢?接下來,我們從微分開始講起:

  • 單變數

對於單變數微分來講,由於函式只有一個變數,所以此時的梯度就是函式的微分,所代表的意義就是在該點所對應的斜率。

  • 多變數(以三個變數為例)

對於多變數函式來講,此時的梯度就不再是一個具體的值,而是一個向量。我們都知道,向量是有方向的,而該梯度的方向就代表著函式在指定點中上升最快的方向。

這也就說明了為什麼我們需要千方百計的求取梯度!我們需要到達山底,就需要在每一步觀測到此時最陡峭的地方,梯度就恰巧告訴了我們這個方向。梯度的方向是函式在給定點上升最快的方向,那麼梯度的反方向就是函式在給定點下降最快的方向,這正是我們所需要的。所以我們只要沿著梯度的方向一直走,就能走到區域性的最低點!

現在,我們不妨通過程式碼來模擬實現這個過程。假如說,我們現在的目標函式是:

則其對對應的梯度為:

相關推薦

Machine Learning in Action》—— 線性迴歸那些

tags:機器學習 《Machine Learning in Action》—— 淺談線性迴歸的那些事 手撕機器學習算法系列文章已經肝了不少,自我感覺質量都挺不錯的。目前已經更新了支援向量機SVM、決策樹、K-近鄰(KNN)、貝葉斯分類,讀者可根據以下內容自行“充電”(持續更新中): 《Machine

機器學習實戰(Machine Learning in Action)學習筆記————05.Logistic迴歸

機器學習實戰(Machine Learning in Action)學習筆記————05.Logistic迴歸關鍵字:Logistic迴歸、python、原始碼解析、測試作者:米倉山下時間:2018-10-26機器學習實戰(Machine Learning in Action,@author: Peter H

Machine Learning in Action》—— 剖析支援向量機,單手狂撕線性SVM

《Machine Learning in Action》—— 剖析支援向量機,單手狂撕線性SVM 前面在寫NumPy文章的結尾處也有提到,本來是打算按照《機器學習實戰 / Machine Learning in Action》這本書來手撕其中程式碼的,但由於實際原因,可能需要先手撕SVM了,這個演算法感覺還是

Machine Learning in Action》—— Taoye給你講講Logistic迴歸是咋回事

在手撕機器學習系列文章的上一篇,我們詳細講解了線性迴歸的問題,並且最後通過梯度下降演算法擬合了一條直線,從而使得這條直線儘可能的切合資料樣本集,已到達模型損失值最小的目的。 在本篇文章中,我們主要是手撕Logistic迴歸,這個在李航老師的《統計學習方法》一書中也叫做為**邏輯斯諦迴歸**。聽到**迴歸**

Machine Learning in Action-chapter2-k近鄰算法

turn fma 全部 pytho label -c log eps 數組 一.numpy()函數 1.shape[]讀取矩陣的長度 例: import numpy as np x = np.array([[1,2],[2,3],[3,4]]) print x

<Machine Learning in Action >之二 樸素貝葉斯 C#實現文章分類

options 直升機 water 飛機 math mes 視頻 write mod def trainNB0(trainMatrix,trainCategory): numTrainDocs = len(trainMatrix) numWords =

機器學習實戰(Machine Learning in Action)學習筆記————02.k-鄰近演算法(KNN)

機器學習實戰(Machine Learning in Action)學習筆記————02.k-鄰近演算法(KNN)關鍵字:鄰近演算法(kNN: k Nearest Neighbors)、python、原始碼解析、測試作者:米倉山下時間:2018-10-21機器學習實戰(Machine Learning in

機器學習實戰(Machine Learning in Action)學習筆記————04.樸素貝葉斯分類(bayes)

機器學習實戰(Machine Learning in Action)學習筆記————04.樸素貝葉斯分類(bayes)關鍵字:樸素貝葉斯、python、原始碼解析作者:米倉山下時間:2018-10-25機器學習實戰(Machine Learning in Action,@author: Peter Harri

機器學習實戰(Machine Learning in Action)學習筆記————03.決策樹原理、原始碼解析及測試

機器學習實戰(Machine Learning in Action)學習筆記————03.決策樹原理、原始碼解析及測試關鍵字:決策樹、python、原始碼解析、測試作者:米倉山下時間:2018-10-24機器學習實戰(Machine Learning in Action,@author: Peter Harr

機器學習實戰(Machine Learning in Action)學習筆記————08.使用FPgrowth演算法來高效發現頻繁項集

機器學習實戰(Machine Learning in Action)學習筆記————08.使用FPgrowth演算法來高效發現頻繁項集關鍵字:FPgrowth、頻繁項集、條件FP樹、非監督學習作者:米倉山下時間:2018-11-3機器學習實戰(Machine Learning in Action,@autho

機器學習實戰(Machine Learning in Action)學習筆記————07.使用Apriori演算法進行關聯分析

機器學習實戰(Machine Learning in Action)學習筆記————07.使用Apriori演算法進行關聯分析關鍵字:Apriori、關聯規則挖掘、頻繁項集作者:米倉山下時間:2018-11-2機器學習實戰(Machine Learning in Action,@author: Peter H

機器學習實戰(Machine Learning in Action)學習筆記————06.k-均值聚類演算法(kMeans)學習筆記

機器學習實戰(Machine Learning in Action)學習筆記————06.k-均值聚類演算法(kMeans)學習筆記關鍵字:k-均值、kMeans、聚類、非監督學習作者:米倉山下時間:2018-11-3機器學習實戰(Machine Learning in Action,@author: Pet

Machine Learning in Action》| 第1章 k-近鄰演算法

準備:使用 Python 匯入資料 """ @函式說明: 建立資料集 """ def createDataSet(): # 四組二維特徵 group = np.array([[3,104],[2,100],[101,10],[99,5]])

Machine Learning in Action》| 第2章 決策樹

決策樹 調包 import numpy as np import matplotlib.pyplot as plt import operator from matplotlib.font_manager import FontProperties 3.1.決

機器學習實戰(Machine Learning in Action)學習筆記————10.奇異值分解(SVD)原理、基於協同過濾的推薦引擎、資料降維

關鍵字:SVD、奇異值分解、降維、基於協同過濾的推薦引擎作者:米倉山下時間:2018-11-3機器學習實戰(Machine Learning in Action,@author: Peter Harrington)原始碼下載地址:https://www.manning.com/books/machine-le

機器學習實戰(Machine Learning in Action)學習筆記————10.奇異值分解(SVD)原理、基於協同過濾的推薦引擎、數據降維

www 實現 由於 就是 計算 學習筆記 圖片 blob 標示 關鍵字:SVD、奇異值分解、降維、基於協同過濾的推薦引擎作者:米倉山下時間:2018-11-3機器學習實戰(Machine Learning in Action,@author: Peter Harringto

Machine Learning in Action 之 kNN

k臨近演算法(kNN)採用測量不同特徵值之間的距離方法進行分類,也是一種非常直觀的方法。本文主要記錄了使用kNN演算法改進約會網站的例子。 任務一:分類演算法classify0  就是使用距離公式計算特徵值之間的距離,選擇最鄰近的k

Machine Learning In Action》學習筆記(1)-KNN(k-近鄰演算法)

  knn演算法我在之前的部落格從零開始-Machine Learning學習筆記(20)-kNN(k-Nearset Neignbor)學習筆記中也已經提到了,大家如果感興趣可以回過頭去看看,knn原理非常簡單。不需要訓練,當有待分類樣本時,只需要從資料集中選取k個與這個樣本距離最近的

Machine Learning第二講[多變數線性迴歸] --(一)多變數線性迴歸

內容來自Andrew老師課程Machine Learning的第二章內容的Multivariate Linear Regression部分。 一、Multiple Features(多特徵) 1、名詞 (1)mm:樣本的數量,上例中m=4 (2)nn

《 機器學習實戰》(Machine Learning in Action) 一書 中的錯誤之處(內容、程式碼)

最近在學 機器學習,發現此書有錯誤的地方,寫成部落格,方便以後查詢。(慢慢更新中……) 1.中文書第22頁(英文版第26頁)中 有一行程式碼: classLabelVector.append(