原理
相較于簡(jiǎn)單線性回歸,多元線性回歸僅僅是特征數(shù)從一變成了多,其他的基本上沒有變化
-
注意行為樣本,列為特征
X矩陣的排列示意 -
基于多元線性回歸,對(duì)某一個(gè)樣本X(i),如圖
多元線性回歸
相較于簡(jiǎn)單線性回歸,其橫坐標(biāo)仍然是X(i)但從單個(gè)數(shù)值變成了一行數(shù)值,也就是一個(gè)1*n(n為特征數(shù))的矩陣
-
我們注意到方程和簡(jiǎn)單線性回歸一樣,有一個(gè)常數(shù),所以我們不妨添加一行X(i=0)
1 -
改變之后,我們注意到,這時(shí)y_hat與x和seata的關(guān)系關(guān)系
-
目標(biāo)不變,仍為使預(yù)測(cè)值與數(shù)據(jù)值相差更小,這時(shí)我們使用矩陣的表示形式
目標(biāo)
這時(shí)我們可以推導(dǎo)出seata的表達(dá)式,推導(dǎo)過程這里省略
- seata的這個(gè)表達(dá)式被稱為正規(guī)方程解
- 注意,假設(shè)最初X數(shù)據(jù)為mn的矩陣,這時(shí)Xb為mn+1,seata為n+1*1的矩陣(其實(shí)一般而言是不區(qū)分Xb和X的)
利用正規(guī)方程進(jìn)行實(shí)現(xiàn)
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
boston=datasets.load_boston()
#波士頓房產(chǎn)數(shù)據(jù)
x=boston.data
y=boston.target
x=x[y<np.max(y)]
y=y[y<np.max(y)]
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=666)
#實(shí)際上這里size默認(rèn)是0.2
#下面開始訓(xùn)練線性回歸模型
X_b = np.hstack([np.ones((len(x_train), 1)), x_train])
theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)
intercept_ = theta[0]#返回截距
coef = theta[1:]#返回theta向量
xtest_b=np.hstack([np.ones((len(x_test), 1)), x_test])
y_predict=xtest_b.dot(theta)
mse_test=np.sum((y_predict-y_test)**2)/len(y_test)
rsquared=mse_test/np.var(y_test)
其中可也得到截距等參數(shù)如圖

結(jié)果
使用sklearn進(jìn)行多元線性回歸
同樣的例子,完全使用sklearn進(jìn)行編寫,這時(shí)候我們要注意到,它并沒有采用正規(guī)化方程的方法,但由于我們是不用知道其底層究竟是如何封裝的,所以目前盡管使用就是
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
boston=datasets.load_boston()
#波士頓房產(chǎn)數(shù)據(jù)
x=boston.data
y=boston.target
x=x[y<np.max(y)]
y=y[y<np.max(y)]
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=666)
#實(shí)際上這里size默認(rèn)是0.2
#下面開始訓(xùn)練線性回歸模型
from sklearn.linear_model import LinearRegression
Lin_reg=LinearRegression()
Lin_reg.fit(x_train,y_train)
Lin_reg.score(x_test,y_test)

得到結(jié)果
總結(jié)
其實(shí)在學(xué)習(xí)的課程里面,關(guān)于多元線性回歸還有一些對(duì)于可解釋性等的思考與介紹,有利于我們對(duì)于現(xiàn)實(shí)模型的理解,這里我不是很想贅述,因?yàn)榭赡芪覀儗W(xué)習(xí)ml,更多用到的可能是后面復(fù)雜一些的算法,另外可解釋性也是很容易理解的,在實(shí)際上手?jǐn)?shù)據(jù)之后,相必我們拿到預(yù)測(cè)結(jié)果自己也能有所分析?。。∷詢?nèi)容暫且寫到這里吧,以后還有想要增加的內(nèi)容,我也會(huì)自行增加!




