簡單線性回歸的Python建模方法

簡單線性回歸,就是兩個隨機變數存在一定大小的相關係數的前提下,結合散點圖觀察,採用最小二乘OLS方法,嘗試建立一條回歸直線,使得誤差平方和SSE最小。OLS是一種參數方法,通過確定直線的斜率b和截距a,求得直線方程y=a+bx。利用該直線方程,可對滿足條件的測試集中的x值,預測出相應的y值,並評價模型效果。

本文通過一些人造數據,講解Python實現簡單線性回歸的建模方法。

數據集包含兩個隨機變數:學習時間、分數。


一、統一概念

機器學習和數據分析的步驟相似:

①提出問題

②理解數據

③數據清洗

④建立模型

⑤評估模型

本文重點關注建模過程,故而忽略前3步。

簡單線性回歸就是一元線性回歸。含有一個自變數(特徵)+一個因變數(標籤)。

通用表達式為y=a+bx,a為截距項,b為斜率(也叫回歸係數)。

機器學習的一般建模分析方法,需先將原始數據集拆分出一定比例的數據子集,作為訓練集。其餘的數據則作為測試集,用來評估模型效果。

拆分的時候採用隨機拆分,只需指定比例即可。

簡單線性回歸的特徵一般為連續型變數,標籤也為連續型變數。


二、建立模型

解釋了可能出現的概念之後,可以著手準備建立模型了。

0.準備數據

通過有序字典的方式,手動創建一個原始數據集,包括兩個隨機變數(特徵:x;標籤:y):

創建原始數據集

1.建模第一步:計算相關係數矩陣,提取特徵和標籤

提取原始數據集的特徵和標籤

2.建模第二步:得到訓練集和測試集

在導入機器學習交叉驗證包的分割模塊時,會彈出警告,經搜索,sklearn 0.20以後的版本將不支持sklearn.cross_validation包:

解決辦法:修改為高級版本支持的包sklearn.model_selection.

在分割數據集的過程中,又彈出警告:

警告信息說的很清楚了,讓我們補足testsize的大小。加一個參數test_size=0.2。如下:

原始數據集的特徵:exam_x;訓練集特徵:x_train;測試集特徵:x_test;

原始數據集的標籤:exam_y;訓練集特徵:y_train;測試集特徵:y_test。

二八分,訓練集80%,測試集20%。

這裡補充一下第一步需要的散點圖,由於散點圖的繪製過程需要提取出特徵和標籤,所以放在這裡補充:

這裡也可看出,適合用簡單線性回歸模型。

3.建模第三步:創建並訓練模型

首先,導入 機器學習的線性模型包:from sklearn.linear_model import LinearRegression

然後,創建線性回歸模型;再用訓練集訓練模型:

此處會報錯:

通過劃線部分我們得到:此處需要二維參數,而我們只傳入了一維參數,如果只有一個特徵,需要通過numpy重塑形狀為n行1列。

備註:reshape為numpy的ndarray類型所具有的方法,Series需要先取出值的部分,即Series.values,再reshape(-1,1)成n行1列。關於reshape的規則見下圖:

numpy.array.reshape規則

言歸正傳,將訓練集特徵和測試集特徵重塑為n行1列:

再訓練模型一次,並求出截距和斜率,寫出OLS方程:

求出OLS方程

由於在繪製OLS直線時,需要用到 模型對訓練集特徵預測出來的y值,此處求一下:

y_train_pred = model.predict(x_train)


三、評估模型

簡單線性回歸模型的效果用判別係數r^2

可以看到,判別係數r平方為0.74,模型擬合效果較好。

下面通過可視化,直觀感受一下效果:

訓練集:藍色;測試集:紅色


推薦閱讀:

基於Git的文件自動同步的思考和實現
Python——廖雪峰老師的教程筆記(第二章
python_anaconda安裝與環境配置
【Python3網路爬蟲開發實戰】1.6.1-Flask的安裝

TAG:線性回歸 | Python |