python3.7安装numpy库和matplotlib库_大师兄的Python机器学习笔记:Numpy库、Scipy库和Matplotlib库(二)...

1)fmin_bfgs(,)

标量函数极值求解。

是求值的函数,是梯度下降的初始值。

返回函数最小值的x值,如果有局部最小值,会返回局部最小值。

>>>from scipy.optimize import fmin_bfgs

>>>import numpy as np

>>>import matplotlib.pyplot as plt

'''

求函数: f(x) = x^2 + 2x + 1的极小值

'''

>>># 函数

>>>def f(x):

>>> return (x**2 + 2*x + 1)

>>>x = np.arange(-5,5,0.1)

>>># 画出曲线

>>>plt.plot(x,f(x))

>>># 返回极小值

>>>x_cord = fmin_bfgs(f,0)

>>>x_min = x_cord[0]

>>>y_min = f(x_min)

>>># 画出点

>>>plt.scatter(x_min,y_min,s=20,c='b')

>>>plt.show()

Optimization terminated successfully.

Current function value: 0.000000

Iterations: 2

Function evaluations: 9

Gradient evaluations: 3

9dde06a02f22

2)basinhopping(,)

标量函数极值求解。

返回函数全局最小值的x值。

比fmin_bfgs()消耗更多资源,但不会返回局部最小值。

>>>from scipy.optimize import basinhopping

>>>import numpy as np

>>>import matplotlib.pyplot as plt

'''

求函数: f(x) = x**2 + 10*cos(x)的极小值

'''

>>># 函数

>>>def f(x):

>>> return (x**2 + 10*np.cos(x))

>>>x = np.arange(-5,5,0.1)

>>># 画出曲线

>>>plt.plot(x,f(x))

>>># 返回极小值

>>>x_cord = basinhopping(f,0)

>>>print(x_cord)

>>>x_min = x_cord.x[0]

>>>y_min = f(x_min)

>>># 画出点

>>>plt.scatter(x_min,y_min,s=20,c='b')

>>>plt.show()

fun: -1.8089833418214676

lowest_optimization_result: fun: -1.8089833418214676

hess_inv: array([[0.09479589]])

jac: array([1.78813934e-07])

message: 'Optimization terminated successfully.'

nfev: 18

nit: 4

njev: 6

status: 0

success: True

x: array([2.59573908])

message: ['requested number of basinhopping iterations completed successfully']

minimization_failures: 0

nfev: 1650

nit: 100

njev: 550

x: array([2.59573908])

9dde06a02f22

3)brute(,)

函数蛮力法,与basinhopping()类似,但效率极低。

>>>from scipy.optimize import brute

>>>import numpy as np

>>>import matplotlib.pyplot as plt

'''

求函数: f(x) = x**2 + 10*cos(x)的极小值

'''

>>># 函数

>>>def f(x):

>>> return (x**2 + 10*np.cos(x))

>>>x = np.arange(-5,5,0.1)

>>># 画出曲线

>>>plt.plot(x,f(x))

>>># 返回极小值

>>>r = slice(-np.pi/2, np.pi/2, np.pi/200)

>>>x_cord = brute(f,(r,))

>>>print(x_cord)

>>>x_min = x_cord[0]

>>>y_min = f(x_min)

>>># 画出点

>>>plt.scatter(x_min,y_min,s=20,c='b')

>>>plt.show()

[-2.59572559]

9dde06a02f22

4)fminbound(,,)

取一定范围内的函数最小值。

和是范围边界。

>>>from scipy.optimize import fminbound

>>>import numpy as np

>>>import matplotlib.pyplot as plt

'''

求函数: f(x) = x**2 + 10*cos(x)在π/2和3π/4之间的极小值

'''

>>># 函数

>>>def f(x):

>>> return (x**2 + 10*np.cos(x))

>>>x = np.arange(-5,5,0.1)

>>># 画出曲线

>>>plt.plot(x,f(x))

>>># 返回极小值

>>>x_min = fminbound(f,np.pi/2,3/4*np.pi)

>>>y_min = f(x_min)

>>># 画出点

>>>plt.scatter(x_min,y_min,s=20,c='b')

>>>plt.show()

9dde06a02f22

5)fsolve(,)

函数求解,返回函数的根值。

>>>from scipy.optimize import fsolve

>>>import numpy as np

'''

求一元函数函数: f(x) = x**2 + 10*cos(x)的解

'''

>>># 函数

>>>def f(x):

>>> return (x**2 + 10*np.cos(x))

>>>res = fsolve(f,1)

>>>print(res)

[1.96887294]

'''

求解方程组:

f1(x+2y) = 0

f2(y-4)= 0

'''

>>>def f(x):

>>> return [

>>> x[0]+2*x[1],

>>> x[1]-4

>>> ]

>>>res = fsolve(f,[1,1])

>>>print(res)

[-8. 4.]

6)curve_fit(,,)

为函数创建拟合曲线。

,为样本数组

返回曲线的系数和协方差。

>>>from scipy.optimize import curve_fit

>>>import numpy as np

>>>import matplotlib.pyplot as plt

'''

根据函数生成数据: f(x) = x**2 + 10*cos(x)

'''

>>># 函数

>>>def f(x, a, b):

>>> return a*np.sin(x) + b

>>># 制作样本数据

>>>x_data = np.linspace(-10,10,10)

>>>y_data = f(x_data, 10, 1) + np.random.randn(x_data.size)# 加入噪声

>>># 生成曲线

>>>variables,variables_covariance = curve_fit(f,x_data,y_data)

>>>print("系数:{}".format(variables))

>>>print("协方差:{}".format(variables_covariance))

系数:[10.48927209 0.77088139]

协方差:[[ 8.79371473e-02 -9.99394876e-11]

[-9.99394876e-11 4.52348670e-02]]

7)leastsq(,,)

用最小二乘拟合法获得最符合函数的曲线。

表示初始参数值。

表示函数的其他参数。

>>>from scipy.optimize import leastsq

>>>import numpy as np

>>>import matplotlib.pyplot as plt

>>># 创建数据

>>>a = np.arange(0,100,5)

>>>b = np.array([0,5,14,24,34,36,41,43,47,53,56,61,63,65,71,75,76.80,85,95,100])

>>># 创建函数

>>>def f(x):

>>> x1,x2 = x

>>> return b-(x1*a+x2)

>>>res = leastsq(f,[1,10])

>>>k,p = res[0]

>>>print(k,p)

>>># 画图

>>>plt.figure(figsize=(8,6))

>>>plt.scatter(a,b,color="green",label="Samples",linewidth=2)

>>>x = np.linspace(0,100,100)

>>>y = k*x +p

>>>plt.plot(x,y,color="red",label="fit",linewidth=2)

>>>plt.legend()

>>>plt.show()

0.9414135338344587 7.522857142851741

9dde06a02f22

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值