机器学习简单实验(LMS算法)

LMS为最小均方算法(least mean square),目标是使得均方误差(MSE)最小,即样本预测输出值与实际输出值之差平方的期望值最小。
下面实现LMS算法学习或运算:

# -*- coding utf-8 -*-
# LMS.py
import numpy as np
b = 1
a = 0.1
x = np.array([[1,1,1],[1,1,0],[1,0,1],[1,0,0]])
d = np.array([1,1,1,0])
w = np.array([b,0,0])
expect_e = 0.005
maxtrycount = 20
def sgn(v):
    if v>0:
        return 1
    else:
        return 0
def get_v(myw,myx):
    return sgn(np.dot(myw.T,myx))
def neww(oldw,myd,myx,a):
    mye  = get_e(oldw,myx,myd)
    return (oldw + a*mye*myx,mye)
def get_e(myw,myx,myd):
    return myd - get_v(myw,myx)
mycount = 0
while True:
    mye = 0
    i = 0
    for xn in x:
        w,e = neww(w,d[i],xn,a)
        i += 1
        mye += pow(e,2)
    mye /= float(i)
    mycount += 1
    print u"After %d times, w: " %mycount
    print w
    print "error: %f" %mye
    if mye<expect_e or mycount>maxtrycount:break
for xn in x:
    print "%d or %d => %d" %(xn[1],xn[2],get_v(w,xn))

结果:

.............
.............
After 11 times, w: 
[-0.1  0.   0. ]
error: 0.250000
After 12 times, w: 
[-0.1  0.1  0.1]
error: 0.500000
After 13 times, w: 
[-0.1  0.1  0.1]
error: 0.000000
1 or 1 => 1
1 or 0 => 1
0 or 1 => 1
0 or 0 => 0

13次迭代之后,error = 0,分类结果正确。
现在实现一个稍微复杂一点的任务,输入矩阵中,若X向量整除结果为6,则为1类,若整除结果为3,为第-1类,在LMS.py的基础上稍作改动:

# -*- coding utf-8 -*-
# LMS2.py
import numpy as np
b = 1
a = 0.1
x = np.array([[1,1,6],[1,2,12],[1,3,9],[1,8,24]])
d = np.array([1,1,-1,-1])
w = np.array([b,0,0])
expect_e = 0.005
maxtrycount = 20
def sgn(v):
    if v>0:
        return 1
    else:
        return -1
def get_v(myw,myx):
    return sgn(np.dot(myw.T,myx))
def neww(oldw,myd,myx,a):
    mye  = get_e(oldw,myx,myd)
    return (oldw + a*mye*myx,mye)
def get_e(myw,myx,myd):
    return myd - get_v(myw,myx)
mycount = 0
while True:
    mye = 0
    i = 0
    for xn in x:
        w,e = neww(w,d[i],xn,a)
        i += 1
        mye += pow(e,2)
    mye /= float(i)
    mycount += 1
    print u"After %d times, w: " %mycount
    print w
    print "error: %f" %mye
    if mye<expect_e or mycount>maxtrycount:break
for xn in x:
    print "%d    %d => %d" %(xn[1],xn[2],get_v(w,xn))
test = np.array([1,9,27])
print "%d     %d => %d" %(test[1],test[2],get_v(w,xn))
test = np.array([1,11,66])
print "%d     %d => %d" %(test[1],test[2],get_v(w,xn))

运行结果:

............
............
After 7 times, w: 
[ 1.2 -2.8 -1.2]
error: 1.000000
After 8 times, w: 
[ 1.4 -2.8  0.6]
error: 3.000000
After 9 times, w: 
[ 1.4 -2.8  0.6]
error: 0.000000
1    6 => 1
2    12 => 1
3    9 => -1
8    24 => -1
9     27 => -1
11     66 => -1

分类正确.
但是,如果加入几个不规则的和错的数据,分类器还能不能正确分类呢?
加入数据
x = np.array([[1,1,6],[1,3,12],[1,3,9],[1,3,21],[1,2,16],[1,3,15]])
d = np.array([1,1,-1,-1,1,-1])

After 200 times, w: 
[ 18.  -17.4  -0.8]
error: 2.666667
After 201 times, w: 
[ 18.4 -16.8   1.8]
error: 2.666667
1    6 => 1
3    12 => -1
3    9 => -1
3    21 => 1
2    16 => 1
3    15 => -1
9     27 => -1
11     66 => -1

可以看到,现在分类结果出现了错误。是什么原因呢?对于错误的数据,分类器以同样的学习率进行学习,结果当然会出错,所以需要动态改变学习率的大小进行学习,所以需要采用模拟退火算法。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LMS(最小均方)算法是一种最优化算法,用于自适应滤波器的权值调整。在Simulink实验中,可以使用LMS算法来对信号进行滤波、降噪或信号估计。 首先,在Simulink中建立一个模型,包括输入信号,自适应滤波器和期望输出信号。输入信号可以是一个随机噪声信号或其他需要进行滤波处理的信号。自适应滤波器包括一个输入端和一个输出端,用于调整权值。期望输出信号可以是滤波后的理想信号。 然后,在Simulink中添加一个LMS自适应滤波器模块。这个模块将接收输入信号和期望输出信号,并根据LMS算法来更新滤波器的权值。LMS算法将通过比较期望输出信号和实际输出信号之间的误差来调整滤波器的权值,以最小化均方误差。 接下来,可以设置LMS算法的参数,如步长(learning rate)和滞后系数(leakage factor)。步长决定了每次权值更新的幅度,较小的步长可以提高算法的稳定性,但收敛速度较慢。滞后系数用于控制权值的更新速率,较小的滞后系数可以减小权值更新的速度。 最后,运行Simulink模型,并观察自适应滤波器的输出结果。通过比较期望输出信号和实际输出信号之间的误差,可以评估LMS算法的性能。如果误差逐渐减小并趋于稳定,说明LMS自适应滤波器成功地对输入信号进行了处理。 总结来说,在Simulink中进行LMS算法实验,需要建立一个包含输入信号、自适应滤波器和期望输出信号的模型,并添加LMS自适应滤波器模块来调整滤波器的权值。通过设置合适的参数并观察输出结果,可以评估LMS算法的性能。 ### 回答2: LMS(Least Mean Squares)算法是一种自适应滤波算法,常用于信号处理和系统鉴别方面。在Simulink中进行LMS算法实验可以通过以下步骤进行。 1. 确定实验目标:确定采用LMS算法的目的,例如降噪、滤波或系统参数估计。 2. 搭建Simulink模型:打开Simulink,选择合适的模板开始搭建模型。根据实验目标,选择输入信号源、LMS自适应滤波器和输出显示等组件,将它们连接起来。 3. 设置输入信号:选择合适的信号源组件,可以是正弦波、噪声等。根据实验目标,确定输入信号的特性,并为模型设置相应参数,如频率、幅度和噪声强度等。 4. 设置LMS自适应滤波器:选择LMS自适应滤波器组件,设置其滤波器阶数和步长参数。滤波器阶数决定了滤波器的复杂度,步长参数决定了算法的收敛速度和稳定性。 5. 连接输入信号和LMS滤波器:将输入信号源连接到LMS自适应滤波器的输入端口,确保信号流畅传输。 6. 设置输出显示:选择合适的显示组件,用于显示实验结果。可以选择波形显示器、频谱分析器等组件,根据实验需求设置相应参数。 7. 运行实验:单击模型界面的运行按钮,开始运行实验。观察输出结果,根据实验目标对结果进行分析和评估。 8. 优化实验:根据实际情况调整输入信号特性、滤波器参数或者其他相关参数,进行实验优化,以达到更好的实验效果。 通过以上步骤,可以在Simulink中进行LMS算法实验。这样做可以更好地理解和掌握LMS算法的实现原理,以及在信号处理和系统鉴别方面的应用。 ### 回答3: LMS算法,全称最小均方(Least Mean Square)算法,是一种自适应滤波算法。它通过迭代更新权重,自动调整滤波器的参数,从而实现对信号的适应性处理。 在Simulink中,可以通过搭建一个LMS自适应滤波器的模型来进行LMS算法实验。首先,在Simulink中建立一个输入信号的来源,例如正弦波信号或者随机噪声信号。然后,加入一个LMS滤波器模块,该模块包含了滤波器的权重参数和自适应算法。接下来,将输入信号和滤波器连接起来,形成闭环系统。 在实验中,需要设置LMS滤波器的参数,例如步长(Step Size)和滤波器阶数(Filter Order)。步长决定了滤波器权重的更新速度,一般选择一个合适的值,以保证收敛性和稳定性。滤波器阶数决定了滤波器的复杂性,一般根据实际需求和计算资源进行选择。 运行Simulink模型后,可以观察到LMS算法自适应滤波器的性能。通过观察输出信号与期望信号的差距,可以评估滤波器的性能。在实验过程中,可以尝试不同的输入信号、步长和滤波器阶数,来观察它们对滤波器性能的影响。 总之,利用Simulink可以方便地进行LMS算法实验。通过调节参数和观察输出结果,可以更好地理解LMS算法的原理和应用。这对于信号处理、自适应控制等领域的研究和应用具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值