梯度下降法
给定 m条训练数据,假定方法
,.那么损失函数
先说明向量问题,一个向量就代表一条特征值
。梯度下降法就是从向量0(代表所有的特征值都是0)开始,向最陡峭的方向下降,直到收敛,那么此值就是最小值。
梯度下降公式:
重复公式直到 收敛。公式中意思是
1、第i个
减去第i个
在
=0中的步长乘以
的偏导数,然后赋值给第i个
。
2、重复计算1。直到
收敛。
为:
Repeat util convergence {
}
Python代码:
def gradient(x,y,bu,number):
m, n = x.shape
weight = np.ones(n)
for index in range(n):
for k in range(number):
weight[index]=weight[index]-bu*np.sum(np.sum(x*weight,axis=1)-y)*np.sum(x,axis=0)[index]/m;
return weight
x 是训练数组,y训练结果数组。bu是步长,number是循环次数。MATLAB
function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
m = length(y);
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
h=(sum(X*theta,2)-y).*X
kao=alpha*sum(h,1)
theta= theta-transpose(kao)/m
J_history(iter) = computeCostMulti(X, y, theta);
end
end
其中:梯度下降回归是局部回归,有可能不是全局最优解。还有步长的选择,步长过大,会出错,太小,程序执行次数太多。那么只有通过执行多次,来选择合适步长。