感知机的原始形式Python代码实现

感知机原始形式的题目:

输入数据为正例点x1=(3,3)T,x2=(4,3)T,负例点x3=(1,1)T,用感知机学习算法的原始形式求感知机模型 f(x)=sign(wx+b),其中w=(w1,w2)T,x=(x1,x2)T

代码实现如下:

# 统计学习方法(李航)第二版——第2章 感知机 课本例题2.1 实现代码
# data:2022/10/14

import numpy as np
# 定义数据集 x_data 按列输入 y_data中按行做输出
x_data = np.array([[3, 4, 1],
                   [3, 3, 1]])
y_data = np.array([[1], [1], [-1]])

# 初始化超平面
# 一定要注意w和b的维度问题
w = np.array([[0], [0]])  # 维度是2,因为一个x数据为维的
b = 0  # 维度为1,因为输出y是一维的
lr = 1 # 步长

# 梯度下降法极小化目标函数
total_spisode = 50
episode = 0
while episode < total_spisode:
    loss = 0
    episode += 1
    for i in range(3):
        x = x_data[:, i] # 这样之后x是(2,)
        x = np.expand_dims(x, axis=1)  # x变为(1,2)
        y = y_data[i, :]
        if y * (np.sum(x * w) + b) > 0:
            continue
        else:
            loss += - y * (np.sum(x * w) + b)
            # 这里也得注意向量乘积的维度问题
            w = w + lr * x * y
            b = b + lr * y
        print("x{}:  w: {}, b: {}".format(i, w, b))
    print("Episode: {}, loss: {}".format(episode, loss))
    if loss == 0:
        break
print("End: w = {}, b={}".format(w, b))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值