簡單線性回歸的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的規則見下圖:
言歸正傳,將訓練集特徵和測試集特徵重塑為n行1列:
再訓練模型一次,並求出截距和斜率,寫出OLS方程:
由於在繪製OLS直線時,需要用到 模型對訓練集特徵預測出來的y值,此處求一下:
y_train_pred = model.predict(x_train)
三、評估模型
簡單線性回歸模型的效果用判別係數r^2
可以看到,判別係數r平方為0.74,模型擬合效果較好。
下面通過可視化,直觀感受一下效果:
推薦閱讀:
※基於Git的文件自動同步的思考和實現
※Python——廖雪峰老師的教程筆記(第二章
※python_anaconda安裝與環境配置
※【Python3網路爬蟲開發實戰】1.6.1-Flask的安裝