HNU_多传感器(专选)_作业4(构建单层感知器实现分类)

前言

        由于“初始化权值w0,w1,w2取-1到1的随机数;”,在代码中体现为

W = np.random.uniform(-1, 1, 3)  # 权值初始化

        所以,答案并不唯一;建议自己运行一下程序,避免结果雷同。

1. (论述题)(共1题,100分)

假设平面坐标系上有四个点,要求构建单层感知器实现分类。

(3,3),(4,3) 两个点的标签为1;

(1,1),(0,2) 两个点的标签为-1。  

思路:要分类的数据是2维数据,需要2个输入节点,把神经元的偏置值也设置成一个节点(偏置也是一个输入,恒等于1),总共有3个输入节点。

输入数据有4组:

(1,3,3),(1,4,3),(1,1,1),(1,0,2)

对应的标签为(1,1,-1,-1) 

初始化权值w0,w1,w2取-1到1的随机数;

学习率设为0.11;

激活函数为sign函数。

我的答案:

1. 初始化:

  • (1)输入数据:X=[[1,3,3],[1,4,3],[1,1,1],[1,0,2]];
  • (2)标签:Y=[1,1,-1,-1]
  • (3)权值向量:W=[w0,w1,w2],随机在[-1,1]中;
  • (4)学习率:η= 0.11

2.激活函数:

  • sign(x) = 1 if x > 0 else -1

3.训练过程

  • (1)前向传播:神经元输出:

  • (2)计算误差:

  • (3)更新权值:

  • (4)若未达到“所有样本均正确分类/达到最大迭代次数”,则重复(1)~(3)

4.迭代过程:

可通过程序代码,进行迭代:(其中一次迭代如下):


初始权值: [ 0.58717924 -0.64675996  0.79238846]

=== 第 1 轮迭代 ===

样本: [1 1 1], 标签: -1, 预测: 1

权值更新量(eta * (Y[i] - y_pred) * X[i]): [-0.22 -0.22 -0.22]

更新后的权值: [ 0.36717924 -0.86675996  0.57238846]

样本: [1 0 2], 标签: -1, 预测: 1

权值更新量(eta * (Y[i] - y_pred) * X[i]): [-0.22 -0.   -0.44]

更新后的权值: [ 0.14717924 -0.86675996  0.13238846]

=== 第 2 轮迭代 ===

样本: [1 3 3], 标签: 1, 预测: -1

权值更新量(eta * (Y[i] - y_pred) * X[i]): [0.22 0.66 0.66]

更新后的权值: [ 0.36717924 -0.20675996  0.79238846]

样本: [1 1 1], 标签: -1, 预测: 1

权值更新量(eta * (Y[i] - y_pred) * X[i]): [-0.22 -0.22 -0.22]

更新后的权值: [ 0.14717924 -0.42675996  0.57238846]

样本: [1 0 2], 标签: -1, 预测: 1

权值更新量(eta * (Y[i] - y_pred) * X[i]): [-0.22 -0.   -0.44]

更新后的权值: [-0.07282076 -0.42675996  0.13238846]

=== 第 3 轮迭代 ===

样本: [1 3 3], 标签: 1, 预测: -1

权值更新量(eta * (Y[i] - y_pred) * X[i]): [0.22 0.66 0.66]

更新后的权值: [0.14717924 0.23324004 0.79238846]

样本: [1 1 1], 标签: -1, 预测: 1

权值更新量(eta * (Y[i] - y_pred) * X[i]): [-0.22 -0.22 -0.22]

更新后的权值: [-0.07282076  0.01324004  0.57238846]

样本: [1 0 2], 标签: -1, 预测: 1

权值更新量(eta * (Y[i] - y_pred) * X[i]): [-0.22 -0.   -0.44]

更新后的权值: [-0.29282076  0.01324004  0.13238846]

=== 第 4 轮迭代 ===

训练在第 4 轮收敛

训练后的权值: [-0.29282076  0.01324004  0.13238846]

程序:


import numpy as np

# 数据
X = np.array([
    [1, 3, 3],
    [1, 4, 3],
    [1, 1, 1],
    [1, 0, 2]
])
Y = np.array([1, 1, -1, -1])

# 初始化权值和参数
W = np.random.uniform(-1, 1, 3)  # 权值初始化
eta = 0.11  # 学习率
max_epochs = 100  # 最大迭代次数


# 激活函数
def sign(x):
    return 1 if x > 0 else -1


# 训练
print("初始权值:", W)
for epoch in range(max_epochs):
    print(f"\n=== 第 {epoch + 1} 轮迭代 ===")
    errors = 0
    for i in range(len(X)):
        # 前向传播
        y_pred = sign(np.dot(X[i], W))
        # 检查预测是否正确
        if y_pred != Y[i]:
            errors += 1
            delta_W = eta * (Y[i] - y_pred) * X[i]  # 计算权值更新量
            W += delta_W  # 更新权值

            # 打印更新信息
            print(f"样本: {X[i]}, 标签: {Y[i]}, 预测: {y_pred}")
            print(f"权值更新量(eta * (Y[i] - y_pred) * X[i]): {delta_W}")
            print(f"更新后的权值: {W}")
    if errors == 0:  # 如果没有错误分类
        print(f"训练在第 {epoch + 1} 轮收敛")
        break
else:
    print("未在最大迭代次数内收敛")

print("\n训练后的权值:", W)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值