作者|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=https://www.cnblogs.com/panchuangai/p/pd.read_excel(“Weather.xlsx”, sheet_name=”Sheet1")
Test_data=https://www.cnblogs.com/panchuangai/p/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/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/194816.html
標籤:其他
下一篇:[轉]楷書書寫教程
