jupyter使用使用Python编程编程—-使用梯度下降法求多元函数的极值使用梯度下降法求多元函数的极值
和系数并与最小二乘法进行比较和系数并与最小二乘法进行比较
使用梯度下降法求多元函数的系数并与最小二乘法进行比较使用梯度下降法求多元函数的系数并与最小二乘法进行比较梯度下降法的原理和概念梯度下降法求解多元函数的极值梯度下降
法求解多元函数的系数最小二乘法求解多元函数的系数比较和总结
梯度下降法的原理和概念梯度下降法的原理和概念
偏导数:就是对函数的两个未知数求微分
然后得到的函数
例如一个函数为y=x12+x22+2x1x2
d(y)/d(x1)=2×1+2×2
d(y)/d(x2)=2×2+2×1
学习率:
也称为迭代的步长,优化函数的梯度是不断变化的,有时候变化很大,有时候变化很小,所以需要将每次的梯度变化控制在一
个合适的范围内。
梯度:
梯度其实就是函数的变化率,在多元函数中,梯度变为了向量,有了变化的方向。
梯度的方向表示的是函数增加最快的方向。
梯度下降法求解,首先就要求得所给定函数的偏导数,即y对x1和x2的微分函数,规定学习率,给定一组初始值,然后计算梯
度函数,使用迭代公式更新迭代一次后的函数未知数的值,然后计算出迭代后的梯度函数,将原梯度函数的值与迭代后的梯度
函数的值的差值进行判断,判断差值是否收敛,若收敛,就停止算法,否则,就重复之前的迭代。
梯度下降法求解多元函数的极值梯度下降法求解多元函数的极值
1、首先导入需要的库并设置字符集
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 设置字符集,防止中文乱码
mpl.rcParams['font.sans-serif'] = [u'simHei'] mpl.rcParams['axes.unicode_minus'] = False
2、对函数用MATLAB进行显示
#定义要求极值的函数表达式
def f2(x1,x2):
return x1**2+2*x2**2-4*x1-2*x1*x2
X1 = np.arange(0,5,0.1)
X2 = np.arange(0,5,0.1)
X1, X2 = np.meshgrid(X1, X2) # 生成xv、yv,将X1、X2变成n*m的矩阵,方便后面绘图
Y = np.array(list(map(lambda t : f2(t[0],t[1]),zip(X1.flatten(),X2.flatten()))))
Y.shape = X1.shape
%matplotlib inline
#作图
fig = plt.figure(facecolor='w')
ax = Axes3D(fig)
ax.plot_surface(X1,X2,Y,rstride=1,cstride=1,cmap=plt.cm.jet)
ax.set_title(u'$ y = x1^2 +2x2^2-4x1-2x1x2 $')
plt.show()
显示为: