什么是LMS算法(Least mean square)
时间:2019-02-18
本文章向大家介绍什么是LMS算法(Least mean square),主要包括什么是LMS算法(Least mean square)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
LMS算法可认为是机器学习里面最基本也比较有用的算法,神经网络中对参数的学习使用的就是LMS的思想,在通信信号处理领域LMS也非常常见,比如自适应滤波器。
其它就是利用梯度下降的算法来实现的,具体推导如下:
最后这条公式,就是LMS算法的实现基础,可以使用python代码实现如下:
import numpy as npimport randomfrom matplotlib import pyplot as plt# m是点的数量def gradientDescent(x, y, theta, alpha, m, numIterations): #矩阵转置 xTrans = x.transpose() cost = None for i in range(0, numIterations): #点积 hypothesis = np.dot(x, theta) #计算最小平方数 loss = hypothesis - y cost = np.sum(loss ** 2) / (2 * m) #print("Iteration %d | Cost: %f" % (i, cost)) # 计算梯度 gradient = np.dot(xTrans, loss) / m # 更新值 theta = theta - alpha * gradient print("Iteration %d | Cost: %f" % (numIterations, cost)) return thetadef genData(numPoints, bias, variance): x = np.zeros(shape=(numPoints, 2)) y = np.zeros(shape=numPoints) # 构造一条直线左右的点 for i in range(0, numPoints): # 偏移 x[i][0] = 1 x[i][1] = i # 目标值 y[i] = bias + i * variance + random.uniform(0, 1) * 15 return x, ydef plotModel(x, y, w): plt.plot(x[:,1], y, "x") plt.plot(x[:,1], [i+j for i, j in x * w], "r-") plt.show() # 生成 100个点,截距为6, 斜率为0.8x, y = genData(50, 6, 0.8)#获取x矩阵的行列m, n = np.shape(x)#迭代次数numIterations = 100000#学习步伐alpha = 0.00005#计算回归参数theta = np.ones(n)print(theta)theta = gradientDescent(x, y, theta, alpha, m, numIterations)print(theta)plotModel(x, y, theta)
输出结果如下:
从这个代码里,可以理解前面学习梯度的作用,以及梯度求解,就是最优化的方法。通过这个例子,也明白了什么叫做LMS算法,以及它的实现方法,同时也可以理解TensorFlow梯度优化器的原理,为什么需要不断对它进行迭代运行,以及更新梯度和应用梯度的过程。
1. C++标准模板库从入门到精通
- Zabbix实现QQ报警配置
- 限制用户使用su切换身份
- 微信小程序优秀开发资源汇总
- 编译安装openresty
- hdu 3367(Pseudoforest ) (最大生成树)
- chattr命令
- hdu 1561 The more, The Better (树上背包)
- hdu 1829 A Bug's Life(分组并查集(偏移量))
- 前端游戏编程基础-如何实现Canvas图像的拖拽、点击等操作
- hdu 4081 Qin Shi Huang's National Road System (次小生成树)
- python读取系统信息
- hdu 3948 Portal (kusral+离线)
- linuxmint下pycharm创建桌面快捷方式
- hdu 1811 Rank of Tetris (并查集+拓扑排序)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- httprunner学习28-yaml文件 参数化读取 csv 文件字符串转 int
- 30个编程小技巧,提高代码性能
- httprunner学习27-参数关联时在 yaml 文件 int 和 str 数据类型转换
- python笔记47-面试题:如何判断字典a在字典b
- Go操作腾讯云COS对象存储的简单使用案例
- Go channel 实现原理分析
- Web压测工具之Webbench和http_load
- 这 6 个 Spring Boot 项目够经典
- 自动化测试框架
- Go 并发控制
- Rsync服务简介部署使用及原理详解
- Go之context包的分析
- Repulsion Loss 遮挡场景下的目标检测
- Selenium4 IDE新特性:弹性测试、循环和逻辑判断
- Go 字符串处理