多變數線性回歸以及正規方程實現線性回歸

2021-10-24 18:26:05 字數 2554 閱讀 6556

在多變數線性回歸中假設函式依然是:

代價函式是以及它的向量表示:

y是乙個(n,1)維的列向量,xθt得到(n,1)維的向量,每一行資料是第 i 個元素,每乙個元素都有相同的特徵。

梯度下降的更新規則:

為了方便計算我們轉化為矩陣的乘法:

通過矩陣可以證明上述兩種形式的公式是等價的。我們通過同時更新

的θ來計算j(θ)。通過多步的梯度下降,計算j(θ)將結果儲存在乙個向量中,等迭代次數結束後,畫出j(θ)的圖形。

再多變數線性回歸中,由於我們涉及到多個特徵,有的特徵值差距很大,為了有效地減少迭代次數,我們需要將特徵歸一化到統一的範圍,稱為特徵的歸一化(特徵縮放)

在這裡我介紹特標準差歸一化:

標準差歸一化後可以將資料處理後符合正態分佈。

import matplotlib

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

plt.rcparams[

'font.sans-serif']=

['simhei'

]#用來顯示中文標籤

plt.rcparams[

'axes.unicode_minus']=

false

#用來正常顯示負號

#匯入資料,因為兩個特徵差距很大,所以需要做歸一化(採用標準化歸一化)

data = pd.read_csv(

'ex1data2.txt'

,names =

['size'

,'bedrooms'

,'price'])

###特徵歸一化

defnormalize_feature

(data)

: z =

(data - data.mean())

/data.std(

)#data.mean(),求均值函式:data.std(),求標準差

return z

data = normalize_feature(data)

#在這個資料集中我們有兩個特徵,單獨觀察size對**的影響

data.plot.scatter(

'size'

,'price'

,c='r'

,label=

'size data '

)plt.legend(loc=2)

plt.show(

)data.insert(0,

'ones',1

)#要新增一列

x = data.iloc[:,

0:3]

y = data.iloc[:,

3:4]

x = np.matrix(x.values)

y = np.matrix(y.values)

##代價函式,和單變數一致

defcostfunction

(theta,x,y)

: inner = np.power(x * theta.t - y ,2)

return np.

sum(inner)/(

2*len(x)

)##梯度下降和單變數一致

defgradintdescent

(x,y,theta,alpha,iters)

: costs =

for i in

range

(iters)

: theta -= alpha/

len(x)*(

(x * theta.t-y)

.t * x)

cost = costfunction(theta,x,y)

return theta,costs

##比較不同alpha下的代價函式圖

condinate_alpha =

[0.0003

,0.003

,0.03

,0.0001

,0.001

,0.01

]iters =

2000

plt.figure(figsize=(10

,8))

#修改圖的大小

for alpha in condinate_alpha:

theta = np.zeros((1

,3))

#有三個特徵,需要theta的也是(1,3)矩陣

theta,costs = gradintdescent(x,y,theta,alpha,iters)

plt.plot(np.arange(iters)

,costs,label=

'學習率{}'

.format

(alpha)

)plt.xlabel(

'iters'

)plt.ylabel(

'cost'

)plt.title(

'cost vs iters'

)plt.legend(loc=1)

plt.show(

)

正規方程解多變數線性回歸

梯度下降解法 正規方程方法 使用正規方程解法的時候注意矩陣不可逆的情況 用np.linalg.det 求解矩陣a的行列式 a 如果行列式為0,不可逆,否則可逆。import numpy as np import pandas as pd data pd.read csv ex1data2.txt n...

多變數線性回歸

import numpy as np import pandas as pd import matplotlib.pyplot as plt import cost function import gd function path ex1data2.txt data2 pd.read csv pat...

多變數線性回歸

固定隨機數 x1 numpy.random.random 50 x2 numpy.random.random 50 y 3 0.7 x1 2.3 x2 x numpy.c x1,x2 x numpy.c numpy.ones len x x y numpy.c y m,n x.shape alpha...