1. 程式人生 > 實用技巧 >線性迴歸:Sklearn與Excel

線性迴歸:Sklearn與Excel

作者|Kaushik Choudhury
編譯|VK
來源|Towards Data Science

大約13年前,David Cournapeau的Scikit learn作為Google Summer of Code專案的一部分開始。隨著時間的推移,Scikit learn成為Python中最著名的機器學習庫之一。它提供了幾種分類、迴歸和聚類演算法,在我看來,它的關鍵優勢是與Numpy、Pandas和Scipy無縫整合。

在本文中,我將用excel比較Scikit-learn多元線性迴歸的預測精度。Scikit-learn提供了許多引數(稱為估計器(estimator)的超引數)來微調模型的訓練並提高預測的準確性。

在excel中,我們沒有太多的東西可以調整迴歸演算法。為了公平比較,我將使用預設引數訓練sklearn迴歸模型。


目的

此比較旨在瞭解excel和Scikit learn中線性迴歸的預測精度。另外,我將簡要介紹在excel中執行線性迴歸的過程。

示例資料檔案

為了進行比較,我們將使用10萬個降水量、最低溫度、最高溫度和風速的資料集。工作人員在8年中的每一天進行測量多次從而得到了這些資料。

我們將利用降水量、最低氣溫和最高氣溫來預測風速。因此,風速是因變數,其他資料是自變數。


我們將首先在excel上建立和預測風速的線性迴歸模型。然後我們將使用Scikit learn進行相同的練習,最後,我們將比較預測結果。

要在excel中執行線性迴歸,我們將開啟示例資料檔案並單擊excel功能區中的“Data”選項卡。在“Data”選項卡中,選擇資料分析選項。

提示:如果看不到“資料分析”選項,請單擊 File > Options> Add-ins。選擇“AnalysisToolPak”並單擊“Go”按鈕,如下所示

單擊“Data Analysis”選項,將開啟一個彈出視窗,顯示excel中可用的不同分析工具。我們將選擇Regression迴歸,然後單擊“OK”。

將顯示另一個彈出視窗。“Input Y range欄位中填寫風速(因變數)的Excel單元格參考。在“Input X Range”中,我們將為獨立變數(即降水量、最低溫度和最高溫度)提供單元參考。

我們需要選中複選框“Label”,因為示例資料中的第一行有變數名。

在指定資料後單擊“確定”按鈕,excel將建立一個線性迴歸模型。你可以將其視為Scikit learn中的訓練(fit 函式)。

Excel進行計算,並以良好的格式顯示資訊。在我們的例子中,excel可以擬合R方為0.953的線性迴歸模型。考慮到訓練資料集中的100000條記錄,excel在不到7秒的時間內執行了線性迴歸。與其他統計資訊一起,它還顯示了不同自變數的截距和係數。

基於excel線性迴歸輸出,我們可以把下面的數學關係組合起來。

風速=2.438+(降水量*0.026)+(最小溫度*0.393)+(最大溫度*0.395)

我們將用這個公式來預測測試資料集的風速,測試集資料是excel沒有用於訓練的資料。

例如,對於第一個測試資料集,風速=2.438+(0.51*0.026)+(17.78*0.393)+(25.56*0.395)=19.55

此外,我們還計算了預測的殘差並繪製了圖,以瞭解其趨勢。我們可以看到,在幾乎所有的情況下,風速預測值都低於實際值,而風速越快,預測的誤差就越大。


讓我們在Scikit learn中鑽研線性迴歸。

第1步-我們將匯入要用於分析的包。獨立變數的值分佈在不同的值範圍內,並且不是標準正態分佈的,因此我們需要StandardScaler來實現自變數的標準化。

from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

第2步-將訓練資料和測試資料分別從excel檔案讀取到PandasDataframe作為訓練資料和測試資料。

Training_data=pd.read_excel(“Weather.xlsx”, sheet_name=”Sheet1") 

Test_data=pd.read_excel(“Weather Test.xlsx”, sheet_name=”Sheet1") 

在本文中,我將不著重於初步的資料質量檢查,如空白值、離群值等以及相應的校正方法

第3步-在下面的程式碼中,我們聲明瞭除“風速”外的所有列資料為自變數,只有“風速”作為因變數用於訓練和測試資料。請注意,我們不會使用“SourceData_test_dependent”進行線性迴歸,而是將預測值與其進行比較。

SourceData_train_independent= Training_data.drop(["WindSpeed"], axis=1) # 從訓練資料集中刪除WindSpeed變數

SourceData_train_dependent=Training_data["WindSpeed"].copy() #  訓練資料集只有自變數

SourceData_test_independent=Test_data.drop(["WindSpeed"], axis=1)
SourceData_test_dependent=Test_data["WindSpeed"].copy()

第4步-由於獨立變數的範圍是完全不同的,因此我們需要調整它以避免有些變數範圍大,有些變數範圍小導致的效能影響。在下面的程式碼中,自變數被縮放,並分別儲存到X-train和X_test。在y_train中,相關訓練變數被儲存而不縮放。

sc_X = StandardScaler()

X_train=sc_X.fit_transform(SourceData_train_independent.values) #縮放自變數

y_train=SourceData_train_dependent # 因變數不需要縮放

X_test=sc_X.transform(SourceData_test_independent)
y_test=SourceData_test_dependent

第5步-現在我們將分別輸入獨立和因變數資料,即X_train 和y_train ,以訓練線性迴歸模型。出於本文開頭提到的原因,我們將使用預設引數執行模型擬合。

reg = LinearRegression().fit(X_train, y_train)
print("The Linear regression score on training data is ", round(reg.score(X_train, y_train),2))

訓練資料的線性迴歸得分與我們用excel觀察到的結果一致。

第6步-最後,我們將根據測試集預測風速。

predict=reg.predict(X_test)

從預測風速值和殘差散點圖可以看出,Sklean預測值更接近實際值。

將Sklearn和Excel殘差並行比較,可以看出隨著風速的增加,模型與實際值的偏差都比較大,但Sklearn比Excel好。

另一方面,excel確實預測了類似sklearn的風速值範圍。如果一個近似的線性迴歸模型對你的商業案例來說足夠好的話,那麼快速預測方面excel是一個不錯的選擇。

Excel可以在與sklearn相同的精度水平上執行線性迴歸預測。因為sklearn可以通過對引數的微調,可以大幅度提高sklearn線性迴歸預測精度,並且更適合處理複雜模型。對於快速和近似的預測,excel是一個非常好的選擇,具有可接受的精確度。

原文連結:https://towardsdatascience.com/linear-regression-in-python-sklearn-vs-excel-6790187dc9ca

歡迎關注磐創AI部落格站:
http://panchuang.net/

sklearn機器學習中文官方文件:
http://sklearn123.com/

歡迎關注磐創部落格資源彙總站:
http://docs.panchuang.net/