如何用python的sklearn的機器學習,實現簡單線性回歸分析?
(本文為小白的練手文分享,大神請忽略,閱讀本文需7分鐘左右,請多指教點贊哈謝謝!)
俺村Python的sklearn庫提供了方便的機器學習演算法,能很快實現一個簡單的一元線性回歸,具體有以下幾個步驟:
- 提出問題
- 理解數據
- 數據清洗
- 構建模型
- 評估
下面將根據一個簡單的案例,分析「學習時間」與「分數」之間的關係,兩者相關性如何?是否存在線性關係?回歸曲線的擬合度怎麼樣?
首先準備數據。
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.學習心得
- 一定要一鼓作氣,中間不能停!否則又要重新開始。
- 不能鑽牛角尖!遇到了一些不懂的應以當前需要為準,python的每個庫都有很多用法和功能,不可能一下全學會。逐次解決不懂的,以免被岔開而偏離了學習方向。
- 寫一篇分享文的難度並不比學習本身小,一圈下來我發現寫總結也很難,所以請看到這兒的朋友一定要以我為戒,不要拖拉,一次寫完。
- 「完成比完美更重要」,這句來自Facebook的話一直鼓舞著我。有時候按時完成了,比追求完美而拖拖拉拉的更重要。
推薦閱讀:
※python基礎篇之小白滾躺式入坑
※醫院銷售數據分析(數據分析第4關)
※基於Numpy、Pandas分析包對某藥店銷售數據分析
※大數據人的職業生涯規劃分享要點
※Python學習(一)