線性回歸: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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM