如何用python的sklearn的機器學習,實現簡單線性回歸分析?

(本文為小白的練手文分享,大神請忽略,閱讀本文需7分鐘左右,請多指教點贊哈謝謝!)

俺村Python的sklearn庫提供了方便的機器學習演算法,能很快實現一個簡單的一元線性回歸,具體有以下幾個步驟:

  1. 提出問題
  2. 理解數據
  3. 數據清洗
  4. 構建模型
  5. 評估

下面將根據一個簡單的案例,分析「學習時間」與「分數」之間的關係,兩者相關性如何?是否存在線性關係?回歸曲線的擬合度怎麼樣?

首先準備數據。

from collections import OrderedDictimport pandas as pd# 定義數據集examData={ 學習時間:[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25, 2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50], 分數:[10, 22, 13, 43, 20, 22, 33, 50, 62, 48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93]}# 生產有序字典examDataOrder=OrderedDict(examData)# 生產pandas數據表examDF=pd.DataFrame(examDataOrder)# 列印前5行examDF.head()

1.提出問題

數據如上,簡單列印前5行,更直觀的看看是什麼樣子:

可以看出,這是由20行、2列構成的數據表,比較規整。對這個只有2個變數的數據,我想到的問題是,這倆之間有沒有聯繫?是否存在因果關係?進一步說,是否存在線性關係?

2,理解數據

2.1 查看相關係數R

如圖所示,相關係數R=0.923985,說明相關程度很高。

2.2 繪製散點圖

由於examDF是個二維數據,且相關係數很高,此時可繪製散點圖,看看2個變數之間的相關關係和走勢。

如上圖所示,「學習時間」和「分數」呈現強烈的正相關的增長關係,下一步分析可考慮是否存在線性關係?若線性擬合,擬合優度怎麼樣?這是下一步的分析方向。

3,數據清晰

本例中的數據比較規整,經過上一步散點圖驗證,不需要數據清晰,略過。

4,構建模型

經過上一步的分析,兩者存在強烈的正相關模型,可考慮用sklenrn進行機器學習訓練,並構建一元線性回歸模型。

4.1 用train_test_split訓練數據

對原來的20個數據,按照8:2的比例進行了拆分,訓練數據train佔16個,測試數據test佔4個。

接下來繪製train_test散點圖,如下:

4.2 構建線性回歸模型

根據上面train_test_split得出來的訓練、測試數據,創建線性回歸模型並用train數據進行訓練:

然而卻出現了報錯:

報錯信息中顯示,需要一個2維的數據卻只得到了1維數組,下面的提示中說「如果只有1個特徵,請用reshape將數據形式改為(-1,1)的形式」,即只有1列的形式,如下:

如上所示,這回訓練模型成功了,接下來求最佳擬合線:

繪製最佳擬合線:

5,評估模型

決定係數R平方是檢驗回歸線擬合程度的重要指標,表示有多少的y波動可以由回歸線來描述,如下:

如上,模型model的決定係數R平方等於0.8,表示絕大多數的波動都可被描述,則表示回歸線的擬合度很高。

下面在一張圖上繪製訓練數據、測試數據和最佳擬合線,如下:

綜上,可得出分析結論:

(1)「學習時間」和「分數」具有強烈的正線性相關關係,相關係數約為0.92;

(2)兩者關係可以用函數「y=9.16062528319+15.96828274x」來進行預測,準確度為85%。

6.學習心得

  1. 一定要一鼓作氣,中間不能停!否則又要重新開始。
  2. 不能鑽牛角尖!遇到了一些不懂的應以當前需要為準,python的每個庫都有很多用法和功能,不可能一下全學會。逐次解決不懂的,以免被岔開而偏離了學習方向。
  3. 寫一篇分享文的難度並不比學習本身小,一圈下來我發現寫總結也很難,所以請看到這兒的朋友一定要以我為戒,不要拖拉,一次寫完。
  4. 「完成比完美更重要」,這句來自Facebook的話一直鼓舞著我。有時候按時完成了,比追求完美而拖拖拉拉的更重要。

推薦閱讀:

python基礎篇之小白滾躺式入坑
醫院銷售數據分析(數據分析第4關)
基於Numpy、Pandas分析包對某藥店銷售數據分析
大數據人的職業生涯規劃分享要點
Python學習(一)

TAG:數據分析 | 數據分析師 | Python入門 |