网站制作百度,安卓网站建站系统,开发公司网签的流程,wordpress小工具放入用户中心在学习逻辑回归时#xff0c;对梯度上升算法进行了应用#xff0c;看到其他的博客讲解#xff0c;梯度上升算法适合求最大值#xff0c;梯度下降算法适合求最小值#xff0c;这里有一个分析#xff1a;梯度上升算法公式是学习率#xff0c;是一个常数。这个是根据逻辑回… 在学习逻辑回归时对梯度上升算法进行了应用看到其他的博客讲解梯度上升算法适合求最大值梯度下降算法适合求最小值这里有一个分析梯度上升算法公式是学习率是一个常数。这个是根据逻辑回归的损失函数进行推导的。
梯度下降公式这个是根据线性回归的损失函数推导的。
我在思考这个跟线性回归里边的平方误差一样都是求导为什么计算的结果不一样后来才明白线性回归用的是最小二乘法梯度下降用的是损失函数也不知道这样理解对不对。
随机梯度算法
def stochastic_gradient_descent(x,y,theta,alpha,m,max_iter): # 自变量因变量待求的权值学习速度样本总数最大迭代次数#随机梯度下降法每一次梯度下降只使用一个样本iter0flag0while True:for i in range(m):#遍历样本deviation0htheta[0]*x[i][0] theta[1]*x[i][1]theta[0] theta[0] alpha*(y[i]-h)*x[i][0]theta[1] theta[1] alpha*(y[i]-h)*x[i][1]iter iter1#计算误差for i in range(m):deviation deviation (y[i]-(theta[0]*x[i][0]theta[1]*x[i][1]))**2if deviation EPS or itermax_iter:flag1breakif flag1:.breakreturn theta,iter,deviation
matrix_x [[2.1,1.5],[2.5,2.3],[3.3,3.9],[3.9,5.1],[2.7,2.7]]
matrix_y [2.5,3.9,6.7,8.8,4.6]
MAX_ITER 5000
EPS 0.0001
theta[2,-1]
ALPHA 0.05
resultTheta,iters,deviationstochastic_gradient_descent(matrix_x,matrix_y,theta,ALPHA,5,MAX_ITER)
print (theta,resultTheta)
print (iters,iters)
print (deviation,deviation)批量梯度下降算法
def batch_gradient_descent(x,y,theta,alpha,m,max_iter):#批量梯度下降法每一次梯度下降使用训练集中的所有样本来计算误差。deviation 1iter 0while deviation EPS and iter max_iter:deviation 0sigma1 0sigma2 0for i in range(m): #对训练集中的所有数据求和迭代h theta[0] * x[i][0] theta[1] * x[i][1]sigma1 sigma1 (y[i] - h)*x[i][0] sigma2 sigma2 (y[i] - h)*x[i][1] theta[0] theta[0] alpha * sigma1 /mtheta[1] theta[1] alpha * sigma2 /m#计算误差for i in range(m):deviation deviation (y[i] - (theta[0] * x[i][0] theta[1] * x[i][1])) ** 2iter iter 1return theta, iter
matrix_x [[2.1,1.5],[2.5,2.3],[3.3,3.9],[3.9,5.1],[2.7,2.7]]
matrix_y [2.5,3.9,6.7,8.8,4.6]
MAX_ITER 5000
EPS 0.0001 #批量梯度
theta [2,-1]
ALPHA 0.05resultTheta,iters batch_gradient_descent(matrix_x, matrix_y, theta, ALPHA, 5, MAX_ITER)
print (theta,resultTheta)
print (iters,iters)随机梯度是在运行中选中一个样本适合样本多的例子但是结果可能准确性不高。
批量梯度是选择m个样本就是比较找到最小值该算法适合样本少的例子运行的效果也是比较好的。