線性回歸模型


目錄

  •  一元線性回歸模型與多元線性回歸模型
  • 訓練集與測試集
  • 啞變量
  • 自定義啞變量

常用數學符號

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

 

因變量

函數關系式中,某些特定的數會隨另一個(或另幾個)會變動的數的變動而變動,就稱為因變量

 

 自變量

在數學等式中能夠影響其他變量的一個變量叫做自變量

 

線性回歸模型

線性回歸模型是一種確定變量之間的相關關系的一種數學回歸模型


分類:
1.一元線性回歸模型
2.多元線性回歸模型

如何判斷兩個變量之間是否存在線性關系與非線性關系

1.散點圖

import numpy
import pandas
import matplotlib.pyplot as plt
X = [52,19,7,33,2]
Y = [162,61,22,100,6]
plt.scatter(X,Y)
plt.show()

 2.公式計算

大於等於0.8表示高度相關
絕對值大於等於0.5小於等於0.8表示中度相關
絕對值大於等於0.3小於0.5表示弱相關
絕對值小於0.3表示幾乎沒有線性關系

公式代碼:

#均值
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))
r

 

3.numpy中的corrcoef方法

代碼:

t=numpy.corrcoef(X,Y)
t

 

4.pandas中的corr方法:

data = pandas.DataFrame({'X':X,'Y':Y})
t2=data.corr()
t2

 

一元線性回歸模型的應用

導入模塊

import statsmodels.api as sm
sm.ols(formula, data, subset=None, drop_cols=None)

重要參數

formula:以字符串的形式指定線性回歸模型的公式,如'y~x'就表示簡單線性回歸模型
data:指定建模的數據集
subset:通過bool類型的數組對象,獲取data的子集用於建模
drop_cols:指定需要從data中刪除的變量

一元線性回歸模型

# 主要用來解決影響某個事物變化的元素只有一種條件的情況
    y = a + bx + 誤差項
"""
y是因變量 a是截距項 b是斜率項 x是自變量 誤差項用於描述無法解釋的部分
"""
描點划線:盡可能多的讓點落在直線上 其他點到直線的距離的平方和一定要最小

 

 

案例准備

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.read_csv(r'Salary_Data.csv')
df1.head()

 1.先通過散點圖查看線性關系

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

 2.再通過numpy查看得知是正向線性關系

np.corrcoef(df1['YearsExperience'],df1['Salary'])

3.創建模型代碼

import statsmodels.api as sm

# 利用收入數據集,構建回歸模型
fit = sm.formula.ols('Salary~YearsExperience',data=df1).fit()

# 返回模型的參數值
fit.params

 4.測試模型的准確性

# 假設工作了2年,猜測薪資多少?

target_salary = 25792.20 + 9449.96 * 2
target_salary

 

多元線性回歸

# 主要用來解決影響某個事物變化的因素有多種條件的情況
    y = a + b1x2 + b2x2 + b3x3 + ... + 誤差項

 

 

案例准備

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

導入模塊

from sklearn import model_selection

1.將數據划分為訓練集和測試集

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

訓練集與測試集

# 訓練集
用於模型的訓練創建

# 測試集
用於模型的測試檢驗


"""一般情況下訓練集占總數據的80%、測試集占總數的20%"""

2.創建訓練集模型代碼:

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

model.params

 啞變量

數學模型的構建只能是數字類型的數據參與
非數字類型的數據如果要參與構建需要先轉換成數字類型(該過程稱之為構造啞變量)

啞變量構造完成后還需要確保多個啞變量之間不存在多種共線性
# 構造啞變量 >>> C(State)

查看由State變量衍生的啞變量

dummies = pd.get_dummies(profit.State)
dummies

3.刪除test數據集中的Profit變量,⽤剩下的⾃變量進⾏預測

test_x = test.drop(columns=['Profit'])
pred = model.predict(exog=test_x)

4.對⽐預測值和實際值的差異

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

自定義啞變量

# 生成由State變量衍生的啞變量
dummies = pd.get_dummies(Profit.State)
# 將啞變量與原始數據集水平合並
Profit_New = pd.concat([Profit,dummies], axis = 1)
# 刪除State變量和California變量(因為State變量已被分解為啞變量,New York變量需要作為參照組)
Profit_New.drop(labels = ['State','New York'], axis = 1, inplace = True)
# 拆分數據集Profit_New
train, test = model_selection.train_test_split(Profit_New, test_size = 0.2, random_state=1234)
# 建模
model2 = sm.formula.ols('Profit~RD_Spend+Administration+Marketing_Spend+Florida+California', data = train).fit()
print('模型的偏回歸系數分別為:\n', model2.params)

 


免責聲明!

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



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