数值优化——牛顿法

来源:互联网 发布:武汉淘宝天猫培训机构 编辑:程序博客网 时间:2024/06/01 08:33

机器学习之牛顿法

原理

泰勒公式

f(x)=n=0f(n)(x0)×1n!(xx0)n

假设函数f(x)二次可微,则二次泰勒展开:

f(x)g(x)=f(xk)+f(xk)(xxk)+12f′′(xk)(xxk)2

求函数f(x)极值可转化为求导函数为0,对g(x)求导并令其为0

f(xk)+f′′(xk)(xxk)=0

xk+1=xkf(xk)f′′(xk)

由此得到迭代公式,xk+1不断逼近极值,直到某一次导数小于某误差

步骤

  1. 确定初始点x0,确定误差大小e
  2. 计算f(xk),若它的绝对值小于e则停止迭代,xk即为极值点
  3. 计算f′′(xk),并根据迭代公式求得xk+1
  4. 跳转至步骤2

代码实现

这里使用的函数:x3+2x2+3x+4

#!/usr/bin/env python3# -*- coding: utf-8 -*-def h(x):    return x * x * x + 2 * x * x + 3 * x + 4def h1(x):    return 3 * x * x + 4 * x + 3def h2(x):    return 6 * x + 4if __name__ == "__main__":    # x的初始值    x_k = 0    # 误差大小    e = 0.0001    k = 1    y = 0    # 迭代次数    times = 10000    while k < times:        y = h(x_k)        # 计算f'        y1 = h1(x_k)        if abs(y1) <= e:            break        # 计算f''        y2 = h2(x_k)        x_k -= y1 / y2        k += 1    print("k = ", k)    print("x = ", x_k)    print("y = ", y)