一維牛頓法與多維牛頓法

2021-10-04 04:10:04 字數 3067 閱讀 5417

julia中文文件:

鼎鼎有名的泰勒展開式

收斂速度快

增加了乙個步長,步長用劃界法或其他方法來確定,保證每步都下降(修正目的)

為非線性回歸的目標函式是使殘差最小,本質上還是乙個求最小值的問題

o矩陣的元素一般為0,可以省略

可見高斯牛頓法只需要用到一階偏導即可

using linearalgebra
function gaosinewton(

f, # 要擬合成的函式

g, # 梯度,是針對偏回歸係數

data, # 資料,每一行代表的是乙個點,前面是自變數,最後一列是響應變數

start; # 牛頓法的起始點

α0 = 1, # 步長

acc = 0.001,

maxi = 128,

debug = false,

plot = false # 是否輸出迭代點

)end

(放在主函式內)

function getr(para)

return mapslices(row ->f(row[1:end-1]...,para...)-row[end], data, dims = [2])

end# 定義計算j函式

function getj()

return mapslices(row->g(row[1:end-1]...,x0...), data, dims = [2])

end

x0 = start

i = diagonal(ones(length(start)))

r0 = getr(x0)

s0 = sum(r0 .^ 2)

# 取得維度

n,m = size(data)

if m < length(start)

return false

end

for i in 1:maxi

j0 = getj()

g0 = j0' * r0

h0 = j0' * j0

# 求出的em是最小的特徵值

# 修正黑塞矩陣

em = eigmin(h0)

if em < 0

h0 = h0-1.1*em * i

end# newton

if det(h0) ==0

println("i:",i,"黑塞矩陣不可逆")

return nothing

endd = -inv(h0) * g0

# 計算步長

#α0 = searcha(f,g,x0,g(,))

# upload data

δ = α0 .* d

x = x0 .+ δ

r = getr(x)

# 目標函式值

s = sum(r .^ 2)

if plot

println(x')

endif debug

println("i:",i,",x:",x)

println("s:",s)

println("r0",r0)

println("j0",j0)

end# 剪測是否達到要求的精度

if abs(s - s0)/max(1,s0) < acc

println("高斯牛頓法完成")

return x,s

endx0 = x

r0 = r

s0 = s

endprintln("達到最大迭代次數,結束高斯牛頓法")

return x0,s0

end

#test

x,s = gaosinewton(

(x,a,b) -> a + b*x^2,

(x,a,b) -> [1,x^2],

#(x,a,b) -> a + exp(b*x^2) ,

#(x,a,b) -> [1,exp(b+x^2)*x^2],

[0 1;1 0;3 2;5 4;6 4;7 5],

[100,100],

debug = false,

plot = true

)#println(x)

#println(s)

牛頓法與擬牛頓法

看了幾篇關於牛頓法的相關介紹,感覺非常好,尤其是擬牛頓條件的推導以及dfp等演算法的推導過程十分詳細明了。這裡記錄一下,方便之後查閱 牛頓法 擬牛頓條件 dfp演算法 bfgs演算法 f bfgs演算法 1 牛頓法 newton s method 牛頓法是一種在實數域和複數域上近似求解方程的方法。方...

牛頓法與擬牛頓法學習筆記(一)牛頓法

好文!先轉在看!機器學習演算法中經常碰到非線性優化問題,如 sparse filtering 演算法,其主要工作在於求解乙個非線性極小化問題。在具體實現中,大多呼叫的是成熟的軟體包做支撐,其中最常用的乙個演算法是 l bfgs。為了解這個演算法的數學機理,這幾天做了一些調研,現把學習過程中理解的一些...

牛頓法和擬牛頓法

正在學習牛頓法,找到一篇非常詳細的部落格,特將目錄整理下來,方便今後回想和查詢。一 牛頓法 主要內容 1 泰勒展開式。比較基礎。2 牛頓法。從其應用的兩個方面來介紹 2.1 求方程的根 一階泰勒展開。2.2 解決最優化問題 二階泰勒展開。此部分又分為兩種情況 二維情況和高維情況。其中,二維情況比較常...