數(shù)學(xué)建模常用模型(五):多元回歸模型
由于客觀事物內(nèi)部規(guī)律的復(fù)雜性及人們認(rèn)識(shí)程度的限制,無法分析實(shí)際對(duì)象內(nèi)在的因果關(guān)系,建立合乎機(jī)理規(guī)律的數(shù)學(xué)模型。所以在遇到有些無法用機(jī)理分析建立數(shù)學(xué)模型的時(shí)候,通常采取搜集大量數(shù)據(jù)的辦法,基于對(duì)數(shù)據(jù)的統(tǒng)計(jì)分析去建立模型,其中用途最為廣泛的一類隨即模型就是統(tǒng)計(jì)回歸模型。
回歸模型確定的變量之間是相關(guān)關(guān)系,在大量的觀察下,會(huì)表現(xiàn)出一定的規(guī)律性,可以借助函數(shù)關(guān)系式來表達(dá),這種函數(shù)就稱為回歸函數(shù)或回歸方程。
這是我自己總結(jié)的一些代碼和資料(本文中的代碼以及參考書籍等),放在github上供大家參考:https://github.com/HuaandQi/Mathematical-modeling.git
1.用回歸模型解題的步驟
一:確定回歸模型屬于那種基本類型,然后通過計(jì)算得到回歸方程的表達(dá)式;
①根據(jù)試驗(yàn)數(shù)據(jù)畫出散點(diǎn)圖;
②確定經(jīng)驗(yàn)公式的函數(shù)類型;
③通過最小二乘法得到正規(guī)方程組;
④求解方程組,得到回歸方程的表達(dá)式。
二:是對(duì)回歸模型進(jìn)行顯著性檢驗(yàn)。yunx
①相關(guān)系數(shù)檢驗(yàn),檢驗(yàn)線性相關(guān)程度的大?。?br> ②F檢驗(yàn)法(這兩種檢驗(yàn)方法可以任意選);
③殘差分析;
④對(duì)于多元回歸分析還要進(jìn)行因素的主次排序;
如果檢驗(yàn)結(jié)果表示此模型的顯著性很差,那么應(yīng)當(dāng)另選回歸模型了。
2.模型的轉(zhuǎn)化
非線性的回歸模型可以通過線性變換轉(zhuǎn)變?yōu)榫€性的方程來進(jìn)行求解;
函數(shù)關(guān)系式:可以通過線性變換:轉(zhuǎn)化為一元線性方程組來求解,對(duì)于多元的也可以進(jìn)行類似的轉(zhuǎn)換。
3. 程序?qū)嵗?/h3>
3.1多元線性回歸模型
一元線性回歸是一個(gè)主要影響因素作為自變量來解釋因變量的變化,但是在現(xiàn)實(shí)問題研究中,因變量的變化往往受幾個(gè)重要因素的影響,此時(shí)就需要用兩個(gè)或兩個(gè)以上的影響因素作為自變量來解釋因變量的變化,這就是多元回歸亦稱多重回歸。當(dāng)多個(gè)自變量與因變量之間是線性關(guān)系時(shí),所進(jìn)行的回歸分析就是多元線性回歸。
import pandas as pd
import numpy as np
import statsmodels.api as sm# 實(shí)現(xiàn)了類似于二元中的統(tǒng)計(jì)模型,比如ols普通最小二乘法
import statsmodels.stats.api as sms#實(shí)現(xiàn)了統(tǒng)計(jì)工具,比如t檢驗(yàn)、F檢驗(yàn)...
import statsmodels.formula.api as smf
import scipy
np.random.seed(991)# 隨機(jī)數(shù)種子
# np.random.normal(loc=0.0, scale=1.0, size=None)
# loc:float 此概率分布的均值(對(duì)應(yīng)著整個(gè)分布的中心),loc=0說明這一個(gè)以Y軸為對(duì)稱軸的正態(tài)分布,
# scale:float 此概率分布的標(biāo)準(zhǔn)差(對(duì)應(yīng)于分布的寬度,scale越大越矮胖,scale越小,越瘦高)
# size:int or tuple of ints 輸出的shape,默認(rèn)為None,只輸出一個(gè)值
# 數(shù)據(jù)生成
x1 = np.random.normal(0,0.4,100)# 生成符合正態(tài)分布的隨機(jī)數(shù)(均值為0,標(biāo)準(zhǔn)差0.4,所生成隨機(jī)數(shù)的個(gè)數(shù)為100)
x2 = np.random.normal(0,0.6,100)
x3 = np.random.normal(0,0.2,100)
eps = np.random.normal(0,0.05,100)# 生成噪聲數(shù)據(jù),保證后面模擬所生成的因變量的數(shù)據(jù)比較接近實(shí)際的環(huán)境
X = np.c_[x1,x2,x3]# 調(diào)用c_函數(shù)來生成自變量的數(shù)據(jù)的矩陣,按照列進(jìn)行生成的;100×3的矩陣
beta = [0.1,0.2,0.7]# 生成模擬數(shù)據(jù)時(shí)候的系數(shù)的值
y = np.dot(X,beta) + eps# 點(diǎn)積+噪聲(dot是表示乘)
X_model = sm.add_constant(X)# add_constant給矩陣加上一列常量1,便于估計(jì)多元線性回歸模型的截距,也是便于后面進(jìn)行參數(shù)估計(jì)時(shí)的計(jì)算
model = sm.OLS(y,X_model)# 調(diào)用OLS普通最小二乘法來求解
# 下面是進(jìn)行參數(shù)估計(jì),參數(shù)估計(jì)的主要目的是估計(jì)出回歸系數(shù),根據(jù)參數(shù)估計(jì)結(jié)果來計(jì)算統(tǒng)計(jì)量,
# 這些統(tǒng)計(jì)量主要的目的就是對(duì)我們模型的有效性或是顯著性水平來進(jìn)行驗(yàn)證。
results = model.fit()# fit擬合
results.summary()# summary方法主要是為了顯示擬合的結(jié)果
3.2非線性回歸模型
非線性回歸是線性回歸的延伸,線性就是每個(gè)變量的指數(shù)都是 1,而非線性就是至少有一個(gè)變量的指數(shù)不是 1。生活中,很多現(xiàn)象之間的關(guān)系往往不是線性關(guān)系。選擇合適的曲線類型不是一件輕而易舉的工作,主要依靠專業(yè)知識(shí)和經(jīng)驗(yàn)。
import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
#建立隨機(jī)數(shù)作為數(shù)據(jù)集
x_data = np.linspace(-0.5,0.5,200) #從-0.5到0.5取均勻的200個(gè)數(shù)
noise = np.random.normal(0,0.02,x_data.shape)
y_data = np.square(x_data)+noise
#使用keras的Sequential函數(shù)建立一個(gè)順序模型
model = keras.Sequential()
#在模型中添加全連接層和激活函數(shù)
model.add(keras.layers.Dense(units=10,input_dim=1))
model.add(keras.layers.Activation('tanh'))
model.add(keras.layers.Dense(units=1))
model.add(keras.layers.Activation('tanh'))
#定義優(yōu)化算法
sgd = keras.optimizers.SGD(learning_rate=0.3)
#優(yōu)化方法:sgd(隨機(jī)梯度下降算法)
#損失函數(shù):mse(均方誤差)
model.compile(optimizer=sgd,loss='mse')
for step in range(3001):
#每次訓(xùn)練一個(gè)批次
cost = model.train_on_batch(x_data,y_data)
#每500個(gè)batch打印一次cost
if step % 500 == 0:
print('cost:',cost)
#x_data輸入到網(wǎng)絡(luò)中,得到預(yù)測(cè)值y_pred
y_pred = model.predict(x_data)
#顯示隨機(jī)點(diǎn)的結(jié)果
plt.scatter(x_data,y_data)
#顯示預(yù)測(cè)點(diǎn)的結(jié)果
plt.plot(x_data,y_pred,'r-',lw=3)
plt.show()
4.運(yùn)行結(jié)果
4.1多元線性回歸模型運(yùn)行結(jié)果
文章來源:http://www.zghlxwxcb.cn/news/detail-536549.html
4.2非線性回歸模型運(yùn)行結(jié)果
文章來源地址http://www.zghlxwxcb.cn/news/detail-536549.html
到了這里,關(guān)于數(shù)學(xué)建模常用模型(五):多元回歸模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!