線性回歸分析是數(shù)據(jù)挖掘里一個(gè)非常重要的方法,相信大家以前在高中或者大學(xué)時(shí)都學(xué)過一點(diǎn)點(diǎn)線性回歸的概念。在統(tǒng)計(jì)學(xué)中,線性回歸(Linear Regression)是利用稱為線性回歸方程的最小平方函數(shù)對(duì)一個(gè)或多個(gè)自變量和因變量之間關(guān)系進(jìn)行建模的一種回歸分析。聽著有點(diǎn)復(fù)雜,簡單來說,就是看一組零散的數(shù)據(jù)是否存在相關(guān)性。線性回歸分析涉及到的數(shù)學(xué)理論知識(shí)比較復(fù)雜,本文不會(huì)涉及到這些數(shù)學(xué)理論知識(shí),僅是介紹應(yīng)用場(chǎng)景以及制作方法,請(qǐng)大家放心食用。

一、應(yīng)用場(chǎng)景:
在開始之前,我們先來了解一下線性回歸分析有什么用。線性回歸分析在日常工作中運(yùn)用非常廣泛,通過線性回歸,我們可以用模型去描述兩組數(shù)據(jù)中是否存在相關(guān)性。例如在分析銷售數(shù)據(jù)時(shí),我們經(jīng)常要對(duì)廣告費(fèi)用以及銷售額的關(guān)系進(jìn)行判斷,評(píng)估廣告費(fèi)用對(duì)銷售額的作用到底有多大,公司應(yīng)不應(yīng)該加大廣告費(fèi)投入,如果未來投入一定的廣告費(fèi)用,預(yù)測(cè)銷售額可以達(dá)到多少…這一系列問題都可以通過線性回歸分析去得出答案。

只要存在兩組以上的數(shù)據(jù),我們都可以利用線性回歸的方法去對(duì)其進(jìn)行檢驗(yàn)。下面我利用Python去對(duì)線性回歸分析的方法和過程進(jìn)行詳細(xì)的描述,力求以最簡潔語言帶你走進(jìn)數(shù)據(jù)挖掘的神秘大門。
二、Python實(shí)現(xiàn)過程:
第一步:數(shù)據(jù)導(dǎo)入
首先要做的就是把本地的EXCEL或者CSV文件讀取到Python里,我們可以引用pandas庫去讀取數(shù)據(jù):

讀取成功后,我們先來打印看一下數(shù)據(jù)是否和EXCEL里的是一致的:

第二步:計(jì)算相關(guān)系數(shù)
上面我們說過了,只要存在兩組數(shù)據(jù),我們就可以檢驗(yàn)其是否存在相關(guān)性,在數(shù)學(xué)上通常是用皮爾遜相關(guān)系數(shù)來進(jìn)行檢驗(yàn),這個(gè)數(shù)值越接近1,就代表兩組數(shù)據(jù)越具有相關(guān)性,我們可以用corr這個(gè)函數(shù)來對(duì)廣告費(fèi)以及銷售額進(jìn)行檢驗(yàn):

接下來我們打印一下data1,大家可以看到相關(guān)系數(shù)的值已經(jīng)算出來了,達(dá)到了0.93,非常接近1,說明這兩組數(shù)據(jù)具有非常高的相關(guān)性:

第三步:畫圖
為了更加直觀地對(duì)這兩組數(shù)據(jù)進(jìn)行呈現(xiàn),我們可以畫一個(gè)散點(diǎn)圖,這時(shí)要引入另外一個(gè)庫:matplotlib,首先把廣告費(fèi)用設(shè)置為X軸,把銷售額設(shè)置為Y軸,然后再利用plot()函數(shù)進(jìn)行畫圖,最后再利用利用show()進(jìn)行圖表呈現(xiàn):

打印一下,我們看看圖形的效果,從圖中可以看中,這個(gè)散點(diǎn)圖里面所有點(diǎn)的排列基本是在一條直線上的,擬合的非常緊密,說明廣告費(fèi)用與銷售額是呈正相關(guān)的,廣告費(fèi)用越多,銷售額也會(huì)隨之增長,這也對(duì)我們上面計(jì)算出來的相關(guān)系數(shù)提供了一個(gè)非常好的佐證:

第四步:建立線性回歸模型
線性回歸的方程我們可以用y=ks+b這個(gè)公式來表示,其中x是自變量,y是因變量,k是斜率,b是直線在軸上的截距。接下來我們就可以對(duì)上面的這組數(shù)據(jù)去建立線性回歸模型,這里要引用的是sklearn庫,這個(gè)庫是的主要作用是進(jìn)行機(jī)器學(xué)習(xí)。首先先定義一個(gè)線性回歸的對(duì)象LinearRegression(),然后再利用fit()函數(shù)對(duì)X、Y的值進(jìn)行模型訓(xùn)練,最后要輸出兩個(gè)數(shù)據(jù),一個(gè)是coef_,代表k值,另一個(gè)是intercept_,代表b值:

輸出后的數(shù)據(jù)如下,k是17.3,b是291.9:

這里我們可以檢驗(yàn)一下模型的擬合程度,這里可以用score()函數(shù)進(jìn)行驗(yàn)證,這個(gè)代表的意思是,數(shù)值越接近1,代表這個(gè)模型的擬合程度就越好:

結(jié)果算出來是0.879,說明模型的擬合程度非常好,可信度非常高,也就是可以投入到實(shí)際應(yīng)用中去使用:

第五步:數(shù)據(jù)預(yù)測(cè)
從上面的步驟中我們得知了k和b的值,只要有x的值,那么就可以算出y的值是多少了,通常我們可以利用這個(gè)原理去對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)。這里可以利用predict()函數(shù)接入一個(gè)參數(shù)對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè),例如下面我們看看廣告費(fèi)在20萬的時(shí)候,銷售額預(yù)計(jì)會(huì)有多少:
?

最后算出來的銷售額是638萬:

三、后續(xù)建議
從python的實(shí)現(xiàn)過程來看,雖然通過寫代碼的形式可以把整個(gè)線性回歸分析完美地實(shí)現(xiàn)了,但是畢竟大部分小伙伴都沒有接觸過這門編程語言,如果真要用python去做的話可能會(huì)難度比較大。那么有沒有更加簡潔一點(diǎn)的方法呢?答案是肯定的,下面我開始嘗試用smartbi這個(gè)工具對(duì)上面的流程進(jìn)行簡化。

進(jìn)入數(shù)據(jù)挖掘的界面后,可以看到左邊的工具欄上有很多組件,這個(gè)就是ETL的工作界面。ETL在數(shù)據(jù)清洗上運(yùn)用比較廣泛,可以把很多復(fù)雜、不規(guī)則的數(shù)據(jù)源治理的井然有序。如果把ETL和數(shù)據(jù)挖掘結(jié)合起來,必然可以大幅提高數(shù)據(jù)分析的效率。

第一步要做的是先把數(shù)據(jù)源讀取到ETL的界面里,我們可以把EXCEL文件這個(gè)組件拖拽進(jìn)來,并把上面的廣告費(fèi)用的EXCEL文件讀取進(jìn)來:

如果EXCEL文件中存在著多個(gè)sheet,還需要把讀取Excel sheet這個(gè)組件拖拽進(jìn)來,并讀取您的目標(biāo)sheet:

讀取完成后,可以先對(duì)數(shù)據(jù)源進(jìn)行預(yù)覽:

我們先來計(jì)算一下廣告費(fèi)用與銷售額的相關(guān)系數(shù)怎么算出來的,在統(tǒng)計(jì)分析中我們可以看到相關(guān)性分析的組件,把它拖拽進(jìn)來,并與上面的組件進(jìn)行相連:

鼠標(biāo)選中相關(guān)系分析,在右邊的待選列里把銷售額和廣告費(fèi)用選中,并移動(dòng)到右邊:

最后我們看一下執(zhí)行后的輸出效果,點(diǎn)擊廣告費(fèi)用與銷售額中間的區(qū)域,可以看到相關(guān)性系數(shù)是0.94,這個(gè)數(shù)據(jù)和我們上面用Python算出來的結(jié)果是一致的:

由于篇幅有限,散點(diǎn)圖、數(shù)據(jù)預(yù)測(cè)等其他功能實(shí)現(xiàn)的方法就不多做介紹了,有興趣的小伙伴可以自行去研究一下。