線性回歸模型


  • 常用數學符號

  http://fhdq.net/sx/14.html

  • 因變量與自變量

  因變量(dependent variable)函數中的專業名詞,也叫函數值。函數關系式中,某些特定的數會隨另一個(或另幾個)會變動的數的變動而變動,就稱為因變量。

  如:Y=f(X)。此式表示為:Y隨X的變化而變化。Y是因變量,X是自變量。

    自變量是“原因”,而因變量就是“結果”。

判斷是否存在兩個變量之間是否存在線性或者非線性關系

1、畫散點圖並觀察

 

2、通過特定公式計算

公式的代碼實現

import numpy
import pandas
​
# 因變量與自變量
X = [52,19,7,33,2]
Y = [162,61,22,100,6]
1.公式計算
# 均值
XMean = numpy.mean(X)
YMean = numpy.mean(Y)
# 標准差
XSD = numpy.std(X)
YSD = numpy.std(Y)
# Z分數
ZX = (X-XMean)/XSD
ZY = (Y-YMean)/YSD
# 相關的系數
r = numpy.sum(ZX*ZY)/(len(X))
'''
    計算過程略微繁瑣,不過可以使用模塊自帶的方法直接計算
'''
2.利用numpy的corrcoef方法直接計算
    t = numpy.corrcoef(X,Y)
3.利用pandas的corr方法直接計算
    data = pandas.DataFrame({'X':X,'Y':Y})
    t2 = data.corr()

判斷結果的方法

  1、絕對值大於0.8             因變量和自變量具有明顯的線性關系   

  2、絕對值大於等於0.5且小於等於0.8    因變量和自變量具有線性關系   

  3、絕對值大於等於0.3且小於0.5      因變量和自變量可能具有線性關系   

  4、絕對值小於0.3              因變量和自變量幾乎不具有線性關系

通過公式計算可知,上述數據X與Y具有明顯的線性關系。

  • 線性回歸

線性回歸是利用數理統計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關系的一種統計分析方法,運用十分廣泛。

  表達形式為 y = wx+ee為服從均值為0的正態分布的誤差值。

線性回歸分析中,只包括一個自變量和一個因變量,且二者的關系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。

如果回歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是線性關系,則稱為多元線性回歸分析。

一元線性回歸

1、可以用示例數據看一下,便於熟悉

dfSd = pd.read_csv(r'Salary_Data.csv')

2、看一下散點圖,從點的分布情況判斷大概具有線性關系

plt.scatter(x=dfSd['YearsExperience'], y=dfSd['Salary'])
plt.show()

3、求一下相關系數看一下是否具有線性關系,這里顯然具有明顯的線性關系

dfSd.corr()

多元線性回歸

1、看一下實例數據

一般來說,利潤是隨着各類成本或地區的改變而變化的。

所以這里,Profit是因變量,其它四個字段是自變量。

pt = pd.read_excel(r'Predict to Profit.xlsx')
pt.head()

 線性回歸過程

那么,如何通過數據推導出其線性關系(線性回歸的過程)???

  針對案例一(一元線性回歸)

  1、需要引入統計建模模塊

import statsmodels.api as sm

   2、構建模型

    調用statsmodels.api.formula.ols()方法,參數1是因變量與自變量以~拼接的字符串,參數2是數據

fit = sm.formula.ols('Salary~YearsExperience',data=dfSd).fit()
fit.params

   3、得出結論,該線性關系近似於 Salary = 25792+9450*YearExperience

    通過與相關數據進行比對,可知這個結果基本正確。

  針對案例二(多元線性回歸)

  1、需要導入機器學習框架

from sklearn import model_selection

  2、為了比對結果是否足夠正確,將數據隨機分為訓練集和測試集

train,test = model_selection.train_test_split(pt,test_size=0.2,random_state=1234)

  3、構建模型

    調用statsmodels.api.formula.ols()方法,參數1是因變量與自變量以~拼接的字符串,多個自變量由+分割,參數2是數據

pModel = sm.formula.ols('Profit~RD_Spend+Administration+Marketing_Spend+C(State)',data=train).fit()
pModel.params

  測試集與訓練集的概念

    1、訓練集用於模型的訓練創建,一般占總數據量80%左右,越大越精確。

    2、測試集用於模型的測試校驗,一般占總數據量20%。

  啞變量

    啞變量 (Dummy Variables) 又稱虛設變量、名義變量或虛擬變量,用以反映質的屬性的一個人工變量,是量化了的自變量,通常取值為0或1,一般用於表示離散變量。

    簡單來說,就是非數字,無法直接代入公式計算的變量。

      如:反映文化程度的啞變量

        本科學歷—1

        非本科學歷—0

    針對上述案例,State字段就被框架當做啞變量處理。

    默認會隨機刪除一項使剩下的項之間不存在確定的關系

    

  驗證線性回歸結果

    1、查看框架自動生成的啞變量

dummies = pd.get_dummies(pt.State)
dummies

    2、刪除test數據集中的Profit變量,⽤剩下的⾃變量進⾏理論推導

testP = test.drop(columns=['Profit'])
pred = pModel.predict(exog=testP)

    3、對比理論值與實際值

pd.DataFrame({"預測值":pred,'真實值':test.Profit})

  • 自定義啞變量

​經過測試我們發現,非數字、無法直接代入公式計算的變量會被框架轉換成啞變量帶入計算。

然后會在相關性強的選項中隨機刪除一個使剩下的選項無關,這個被刪除的選項可以自定義。

 1、生成由State變量衍生的啞變量

dummies = pd.get_dummies(pt.State)

 2、將啞變量與原始數據集水平合並

ptNew = pd.concat([pt,dummies], axis=1)

 3、刪除State與New York列

ptNew.drop(labels = ['State','New York'], axis = 1, inplace = True)

4、將數據集拆分成訓練集與測試集

train, test = model_selection.train_test_split(ptNew, test_size = 0.2, random_state=1234)

5、構建線性回歸模型,可以看到地區以外的偏回歸系數還是之前的值

pModel2 = sm.formula.ols('Profit~RD_Spend+Administration+Marketing_Spend+Florida+California', data = train).fit()
print('模型的偏回歸系數分別為:\n', pModel2.params)


免責聲明!

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



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