采用硬限幅函数时单个神经元的分类功能

该博客探讨了线性可分问题中采用硬限幅函数的学习算法。通过实例展示了算法的迭代过程,指出当步幅α适当时,算法能够收敛。同时,也提到了步幅选取的重要性,太大会导致过度调整,太小则会减慢学习速度。解决方案是采用变步幅策略来平衡收敛速度和精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码

import numpy as np
from matplotlib import pyplot as plt
import random
plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签
plt.rcParams['axes.unicode_minus'] = False

def yxf(x):
    if x >= 0:
        return 1
    else:
        return 0


def juzheng(a,b):
    sum = 0
    for i in range(len(a)):
        sum = sum + a[i]*b[i]
    return sum


w = [0.0, 0.0, 1.0]
x0_r = []
x1_r = []
label = []
for i in range(200):
    x0 = random.randint(-10, 10)
    x1 = random.randint(-10, 10)
    if 0.5*x0 + x1 - 1 < 0:
        x0_r.append(x0)
        label.append(0)
        x1_r.append(x1)
    elif 0.5*x0 + x1 - 1 > 0:
        x0_r.append(x0)
        label.append(1)
        x1_r.append(x1)
plt.figure()
xx = np.linspace(-10, 10, 100)
err = 1
k = 0
while err > 0:
    tj = []
    for i in range(len(label)):
        X1 = [x0_r[i], x1_r[i], 1]
        I1 = juzheng(X1, w)
        y = yxf(I1)
        dui = label[i] - y
        w[0] = w[0] + 0.01 * dui * X1[0]
        w[1] = w[1] + 0.01 * dui * X1[1]
        w[2] = w[2] + 0.01 * dui * X1[2]
        tj.append(abs(dui))
    plt.clf()
    plt.ylim([-15, 15])
    for j in range(len(label)):
        if label[j] == 1:
            plt.plot(x0_r[j], x1_r[j], 'g*')
        elif label[j] == 0:
            plt.plot(x0_r[j], x1_r[j], 'ks')
    # plt.plot(X1[0], X1[1], '1', markersize=10)
    if w[1] != 0:
        yy = -w[2] / w[1] - w[0] / w[1] * xx
        plt.plot(xx, yy, label='当前曲线')
        yy1 = 1 - 0.5 * xx
        plt.plot(xx, yy1, label='理想曲线')
        # plt.pause(0.001)
        plt.legend()
    k = k + 1
    err = sum(tj)
    sss = '第'+str(k)+'次迭代.jpg'
    sss1 = '有'+str(err)+'个点不满足条件'
    plt.title(sss1)
    plt.savefig(sss)
    print('第{}次迭代不满足条件的点有{}个'.format(k, err))

求解结果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

结论

对于线性可分的问题,采用硬限幅函数的学习算法是收敛的。若l(k)已经很接近最佳分界线 ,那么步幅α必须选得非常小,否则可能矫枉过正,使W(k+1)转过了头,但如果步幅选得很小,学习速度将变得很慢,为了解决这个矛盾,可以采取变步幅的方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leetteel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值