博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python实现批量梯度下降算法
阅读量:7213 次
发布时间:2019-06-29

本文共 1360 字,大约阅读时间需要 4 分钟。

# -*- coding: UTF-8 -*- import numpy as np import math # 定义基础变量 learning_rate = 0.1 n_iterations = 10000 m = 100 x = 2 * np.random.rand(m, 1)  # 生成一组服从0~1均匀分布的随机样本,此处表示生成100行一列的二维数组,下同 y = 4 + 3 * x + np.random.randn(m, 1)  # 正态分布 x_b = np.c_[np.ones((m, 1)), x]  # np.((100, 1)):表示生成100行1列的矩阵,内部填充为1 # 设置阈值 threshold = 0.15 # 1,初始化theta,w0...wn theta = np.random.randn(2, 1) count = 0 before_value = 1 # 4,设置阈值,之间设置超参数,迭代次数,迭代次数到了或者满足阈值,我们就认为收敛了 for iteration in range(n_iterations):     count += 1     # 2,接着求梯度gradient gradients = 1/m * x_b.T.dot(x_b.dot(theta)-y)  # 求平均梯度     # 3,应用公式调整theta值,theta_t + 1 = theta_t - grad * learning_rate     theta = theta - learning_rate * gradients     # 判断是否满足阈值  mid = math.sqrt(math.pow((theta[0][0] - 4), 2) + math.pow((theta[1][0] - 3), 2))     if mid <= threshold:         print('总共执行{}次迭代,可知迭代次数设置过大,建议适当减小!'.format(count))         break     # 若与上一次的中间结果比较差值过小也同样结束循环     err = math.fabs(mid - before_value)     if err < 0.001:         if before_value > threshold:             print('多次迭代都不能满足阈值,请修改阈值或重新处理数据!')             break         else:             print('总共执行{}次迭代,可知迭代次数设置过大,建议适当减小!'.format(count))             break     # 暂时保存上一次的中间结果     before_value = mid print('结果:\n x is : {}\n y is : {}\n 误差 : {}'.format(theta[0][0], theta[1][0], before_value)) 结果:

 

 

转载于:https://www.cnblogs.com/yszd/p/9255495.html

你可能感兴趣的文章
魔兽世界客户端数据研究(四):M2文件头分析
查看>>
jQuery中getJSON跨域原理详解
查看>>
【MySql】MySql存储,游标,循环的简单使用
查看>>
一些服务器客户端的c例子
查看>>
众推架构的进一步讨论
查看>>
OEA 2.11 支持单机版数据库 - SQLite与SQLCE对比
查看>>
【系统架构】如何解决热点数据更新问题
查看>>
Cacti设置流量阀值实现邮件报警
查看>>
[转载]了解Linux的进程与线程
查看>>
算法——贝叶斯
查看>>
JS 实现3D立体效果的首页轮播图(瞬间让你的网站高大上,逼格满满)
查看>>
Stooge排序与Bogo排序算法
查看>>
Swift面向对象基础(中)——Swift中的存储属性和计算属性
查看>>
“是男人就下100层”
查看>>
如何手动实现C语言中的字符串操作
查看>>
Object-C---&gt;Swift之(一)元组(tuple)类型
查看>>
无锁有序链表的实现
查看>>
很实用的东西, linux下 write/wall 给其它用户/终端 发送即时文本消息
查看>>
Android仿美团加载数据、小人奔跑进度动画对话框(附顺丰快递员奔跑效果)
查看>>
Android学习笔记(27):日历视图Calendar
查看>>