簡單線性回歸與機器學習基礎

什麼是機器學習?

對於機器學習我並沒有太過深刻的理解,對於這個近幾年來漸漸風靡的詞,個人也是一知半解。看了很多大神對它的定義和舉例,得到了很多淺顯有趣的回答。

首先,機器學習的本質是一種基於數據統計的方法。機器學習就好像人認知世界的過程。從方法論上來講,機器學習不是基於推理的「演繹法」,而是基於觀測的「歸納法」比如神農嘗百草就是機器學習的思想

拿挑橘子作為一個例子,普通計算機演算法是這樣子的

只有知道判斷橘子甜的所有因素,才能把規則寫得詳細,手動添加挑選的規則非常麻煩

機器學習演算法是由普通演算法演化過來的,通過自動的從提供的數據中學習,讓程序變得更聰明

還是拿上面例子,從市場的橘子里隨機抽取一個樣本,這個樣本在機器學習里稱為訓練數據

製作一張二維表格,上面標記著每個橘子的物理屬性,如顏色、大小等,這些屬性在機器學習里稱為特徵;最後得到預測結果橘子甜或者不甜,這個結果在機器學習中稱為標籤

只要把橘子的特徵輸入這個訓練好的模型,模型會自動輸出標籤即橘子甜不甜

把訓練數據提供給機器學習的演算法,這個演算法會建立橘子的特徵和標籤之間的一個模型,模型讀入更多的訓練數據後會變得更加準確,並且做了錯誤預測之後會自動修正,這樣隨著數據的增加,準確性就會越來越強。

機器學習的步驟

提出問題→理解數據→數據清洗→構建模型→評估模型

  • 提出問題

一切機器學習的目標都是為了解決生活中的實際問題,只有明確要研究的問題才能提供方向

  • 理解數據

這包括三方面:

  1. 採集數據:根據相關內容採集數據
  2. 導入數據:我們拿到的數據可能在Excel、網路、或者資料庫中,需將這些數據導入到Python數據結構中
  3. 查看數據集信息:包括描述統計信息,從整體上了解數據
  • 數據清洗

也叫數據預處理,對數據進行篩選和其他處理,使我們可以從數據集中提取想要的特徵信息

  • 構建模型

訓練數據來構建模型,即將上一步提取的數據特徵放入機器學習演算法(最核心)中來構建模型

  • 評估模型

測試數據來評估模型的準確性,看模型預測程度有多高


簡單線性回歸

什麼是特徵,標籤?

特徵就是指數據的屬性,標籤就是我們對數據的預測結果。

以聽歌舉例,我們在聽一首歌的時候,這首歌的「節奏」「強度」「時長」等特徵會輸入到我們的大腦,再由我們大腦處理後將其判斷為「喜歡」或者「不喜歡」兩個標籤

什麼是相關性分析?

相關分析:事物的基本聯繫

相關分析

相關分析是研究現象與現象之間關係的分析方法。

回歸分析

通過一個(些)變數的變化解釋另一變數的變化。

事物的關係:現象與現象的數量關係,或者說變數與變數之間的數量關係,一般體現為函數關係或者統計關係(相關關係)

那麼,變數與變數之間的關係有哪些呢:

1.因果關係:有原因變數,有結果變數

因果關係是一個事件(即「因」)和第二個事件(即「果」)之間的關係

因果關係的種類:

  • 單向因果:原因的產生、出現必然導致結果的產生、出現。

比如:父母的身高會決定孩子的身高

  • 雙向因果:以變數X為出發點,研究X的變化對Y的影響。則X為因Y為果

反之,以Y出發,研究Y對X的影響,則Y為因,X為果

比如:銷售量與銷售價格之間的關係。(銷售量受價格影響,而價格也會因銷售量變化而變化)

2.相關關係:變數與變數之間的一種平均的數量關係

  1. 變數與變數之間存在一種數量關係。
  2. 某一(組)變數與另一變數間有關係,但並非如函數關係般一一對應

比如:身高和體重的關係。

身高越高體重越重,但不代表身高增加1cm體重就增加0.5kg。因為基因,飲食,睡眠等等會影響到兩者的對應關係。

相關關係的種類:

  • 按變數的個數分類:

研究兩個變數之間的關係,為單相關

研究一個變數與N個變數之間的關係,為復相關

就多個變數測定其中兩個變數的相關程度而假定其他變數不變,為偏相關

  • 按變數的變動方向分類:

正相關

負相關

  • 按線性關係分類:

線性相關

非線性相關(大部分)

  • 按相關程度分類:

完全相關:即函數關係,X與Y之間的關係是一一對應的

不相關:X、Y沒有關係,X變動Y不變,Y變動X不變

機器學習經常拿來解決相關性分析的問題,如工作壓力和患抑鬱症之間的關係,這鐘研究不同變數相關關係的一個機器學習演算法,即簡單線性回歸演算法。

舉例,

現有20名學生,研究這些學生在考前複習時間與得到的成績之間的相關關係。

這裡是通過複習時間來預測成績,所以學習時間是數據的特徵(自變數或解釋變數),成績是數據的標籤(因變數)。

由於數據框不能很直觀的看出兩個變數有什麼關係,下面用散點圖表示出來

相關分析:量化相關程度

相關分析的特點

  • 兩個變數都是隨機變數
  • 變數X與變數Y只能計算出一個相關係數,相關係數唯一。(X對Y的相關係數為a,Y對X也為a)
  • 在計算相關係數時,變數X與Y獲取資料的方式相同。

注意:隨便兩組數據進行計算,都能產生相關係數。所以在進行相關係數計算時,首先要進行理論分析,確保兩個變數之間是真的相關的。否則容易出現偽相關的情況。一般來說可以看看兩個變數中間有沒有影響他們的中間變數,來判斷是否為偽相關。

兩變數相關分析:

1.相關圖

將相關表中各對數值在直角坐標繫上描出,可以看出相關點的分布狀況

2.相關表

通過實際調查取得一系列成對的變數值資料,作為相關分析的原始數據;然後,根據資料是否分組,將原始數據編織成相關表。

3.相關係數的計算

對變數間關係密切程度的度量

1)離差積的方向,與變數之間的相關方向相同。

2)變數之間的相關程度:

協方差的大小除了與變數之間的相關程度有關,也與變數的本身數值大小有關,所以除去X和Y的標準差,得到相關係數的積差法計算公式:

注意:

  1. 此公式計算的是變數之間的線性相關係數。如果變數之間屬於非線性相關,則此公式失效。(如r=0時,只能說明變數之間不存在線性關係,可能存在非線性關係。)
  2. 相關係數計算出的結果是唯一的,並且數值在±1之間。樣本資料說明總提示,要進行假設檢驗。
  3. 相關分析,其分析的是之間關係,不是間接關係。
  4. 根據數值大小判定相關的密切程度方面,一般常劃分為四級:︱r︱數值在0.3一下視為不相關,0.3~0.5屬低度相關,0.5~0.8屬顯著相關,0.8以上屬高度相關。

用Python實現相關係數

使用pandas中數據框的corr()可以得到2個變數的相關性係數,並返回與數據框,數據框裡面存放的是相關係數矩陣

上圖中學習時間和分數之間的相關係數為0.92,說明兩者有很強的相關性,1指的是變數與自身的相關係數是1,之所以用相關係數矩陣來表示相關係數,是因為一個可以通過矩陣裡面的數直接找到對應拿兩個變數之間的關係。

例如下面這個例子

研究男性是否更願意與自己年齡相同的女性結婚(基於282對美國夫妻中分別記錄男性和女性的年齡)

如圖和r的值可知,男性與女性配偶的結婚年齡有很強的正相關性。

回歸分析的目的

  • 將X與Y的關係以一種量化的方式來表達
  • 檢驗有關於X與Y之間關係的理論
  • 測量X與Y之間的關係強度
  • 在已知X值得條件下對Y作預測,預測值為

概率模型

若X=xi時,Y值不確定,而是服從某概率分布,則X,Y的關係稱為概率模型

什麼是最佳擬合線(回歸線)?

x表示學習時間y表示考試分數,我們要用x來預測y。a叫做截距,b叫做回歸係數只要我們能用訓練數據求出a和b的數值,我們就能求出最佳擬合線。

只要算出每個實際的值和預測值的距離差,再將其求和。求和取最小值時就是我們要求的a,b

如下圖為詳細解釋:

接下來根據求極值的知識,

對a求微分

對b求微分

b還有很多變式:

用Python實現簡單線性回歸

首先我們可以用loc將之前放入examDF數據框的里的學習數據中的特徵和標籤提取出來。

  • 建立訓練數據和測試數據

  • 建立訓練模型

運行後會報錯,因為這裡輸入的特徵只有1個。注意看報錯信息,通過這個例子也學會如何分析報錯信息

上面的報錯內容,最後一行是這樣提示我們的:

Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

上面報錯的內容翻譯過來就是:

如果你輸入的數據只有1個特徵,需要用array.reshape(-1, 1)來改變數組的形狀

shape是形狀的意思,在數據里就是指數據的大小。

numpy的reshape就是指改變數組的形狀,下面通過幾個案例你就明白了

reshape行的參數是-1表示什麼呢?例如reshape(-1,列數)

如果行的參數是-1,就會根據所給的列數,自動按照原始數組的大小形成一個新的數組,

例如reshape(-1,1)就是改變成1列的數組,這個數組的長度是根據原始數組的大小來自動形成的。

原始數組總共是2行*3列=6個數,那麼這裡就會形成6行*1列的數組

reshape列的參數是-1表示什麼呢?例如reshape(行數,-1)

如果列的參數是-1,就會根據所給的行數,自動按照原始數組的大小形成一個新的數組,

例如reshape(1,-1)就是改變成1行的數組,這個數組的列數是根據原始數組的大小來自動形成的。

原始數組總共是2行*3列=6個數,那麼這裡就會形成1行*6列的數組

理解了reshape後,我們再來看下邏輯回歸模型

sklearn要求輸入的特徵必須是二維數組的類型,但是因為我們目前只有1個特徵,所以需要用安裝錯誤提示用reshape轉行成二維數組的類型。

錯誤提示信息:Reshape your data either using array.reshape(-1, 1) if your data has a single feature

  • 求出最佳擬合線(回歸方程)

具體的畫圖方法屬於數據可視化的內容,在之後的文章里會詳細說明

  • 評估模型精確度

如圖,實際值的數量會影響誤差平方和的值,從而產生誤差。顯然圖2中的擬合點比圖1的擬合點精度會更高,但是這並不意味著圖1的擬合度就不高。所以為了檢驗模型精度,我們給出一個不受實際值數量影響的值「決定係數R」

這裡y的總波動實際就是指y的方差

以此,誤差平方和/總波動=20% 就意味著有20%的y波動沒有被回歸線計算出來。

用計算機計算R

用相關係數r來衡量直線與數據的擬合程度,可知相關係數為0.84,也就是說,有84%的考試成績y波動能被回歸線描述出來。


推薦閱讀:

Kaggle機器學習之泰坦尼克號生還預測
python基礎篇之小白滾躺式入坑
R語言4月到6月全職學習計劃
就是它了-結合自己興趣與事業發展的新方向
2018年一定要收藏的20款免費預測分析軟體!

TAG:數據分析 | 機器學習 | 線性回歸 |