白板推导系列Pytorch实现-感知机算法

下面的代码以二维输入为例,实现二分类的感知机算法

import matplotlib.pyplot as plt
import torch
import torch.utils.data as Data
import numpy as npclass Perceptron:# 注意,为了我们能看到训练的效果,特意将learning_rate设的很小def __init__(self, X, y, learn_rate=0.00001, batch_size=16, epoch=100):  # feature_num特征数,label_num标签数self.feature_num = X_train.shape[1]self.label_num = 1# 权重初始化为均值为1,方差为0.01的正态随机数self.weight = torch.normal(1, 0.01, size=(self.feature_num,), requires_grad=True)# 偏差初始化为均值为0,方差为0.01的正态随机数self.bias = torch.normal(0, 0.01, size=(1,), requires_grad=True)# 批数据生成器self.train_iter = Data.DataLoader(Data.TensorDataset(torch.tensor(X, dtype=torch.float32), torch.tensor(y, dtype=torch.float32)),batch_size=batch_size,shuffle=True)self.batch_size = batch_sizeself.learn_rate = learn_rateself.epoch = epochdef loss(self, X, y):l = - torch.mul(y, (torch.matmul(X, self.weight) + self.bias))# 损失函数只计算错误分类的样本,故l小于0时应当作做0处理,相当于使用ReLU做处理return torch.nn.ReLU()(l)def train(self):  # 训练函数log = []for j in range(self.epoch):all_l = 0for X, y in self.train_iter:l = self.loss(X, y).sum()if l > 0:# 如果不使用pytorch的自动求导,那么就使用下方注释代码# self.weight = self.weight + self.learn_rate * torch.matmul(y, X)# self.bias = self.bias + self.learn_rate * y.sum()# 反向传播,求导l.backward()# 必须加上.data,否则梯度会被修改self.weight.data = self.weight.data - self.learn_rate * self.weight.grad.dataself.bias.data = self.bias.data - self.learn_rate * self.bias.grad.data# 梯度清零self.weight.grad.data.zero_()self.bias.grad.data.zero_()all_l += l.data.item()log.append(all_l)# plot(X_test, y_test, self.weight, self.bias)return logdef predict(self, X, y=None):X = torch.tensor(X, dtype=torch.float32)pred_num = X.shape[0]ans = []for i in range(pred_num):ans.append(torch.sign(torch.dot(self.weight, X[i])))if y is not None:y = torch.tensor(y, dtype=torch.float32)print("识别正确率:%s"%((torch.tensor(ans) == y).sum()/y.shape[0]))plot(X, y, self.weight, self.bias)return ans# 产生样本数据
def generate():from sklearn.datasets import make_blobsX_data, y_data = make_blobs(n_samples=1000, n_features=2, centers=2)X_train, y_train = X_data[:800], y_data[:800]X_test, y_test = X_data[800:], y_data[800:]y_train = np.where(y_train == 0, -1, 1)y_test = np.where(y_test == 0, -1, 1)return X_train, y_train, X_test, y_test# 绘制样本和模型
def plot(X, y, w, b):with torch.no_grad():plt.scatter(X[:, 0], X[:, 1], c=y)x = torch.linspace(-10, 10, 500)  # 创建分类线上的点,以点构线。y = -w[0] / w[1] * x - b / w[1]plt.scatter(x, y, c=torch.zeros(size=(500,)))plt.show()# 绘制损失曲线
def plot_history(history):plt.plot(np.arange(len(history)), history)plt.show()X_train, y_train, X_test, y_test = generate()
model = Perceptron(X_train, y_train, epoch=100)
log = model.train()
plot_history(log)
model.predict(X_test, y_test)

epoch为100的情况下

损失曲线如下

测试集与模型可视化如图

白板推导系列Pytorch实现-感知机算法相关推荐

  1. 机器学习-白板推导-系列(十)笔记:EM算法

    文章目录 0 笔记说明 1 算法收敛性证明 2 公式导出 2.1 ELBO+KL Divergence 2.2 ELBO+Jensen Inequlity 2.3 最后的工作 3 从狭义EM到广义EM ...

  2. 机器学习-白板推导-系列(九)笔记:概率图模型: 贝叶斯网络/马尔可夫随机场/推断/道德图/因子图

    文章目录 0 笔记说明 1 背景介绍 1.1 概率公式 1.2 概率图简介 1.2.1 表示 1.2.2 推断 1.2.3 学习 1.2.4 决策 1.3 图 2 贝叶斯网络 2.1 条件独立性 2. ...

  3. 机器学习-白板推导系列笔记(十三)-MCMC

    此文章主要是结合哔站shuhuai008大佬的白板推导视频:MCMC_218min 全部笔记的汇总贴:机器学习-白板推导系列笔记 一.蒙特卡洛方法 蒙特卡洛方法(Monte Carlo Method) ...

  4. 机器学习-白板推导系列笔记(十二)-变分推断(VI)

    此文章主要是结合哔站shuhuai008大佬的白板推导视频: VI变分推断_126min 全部笔记的汇总贴:机器学习-白板推导系列笔记 一.背景 对于概率模型 从频率派角度来看就会是一个优化问题 从贝 ...

  5. 机器学习-白板推导系列(三十)-生成模型(Generative Model)

    机器学习-白板推导系列(三十)-生成模型(Generative Model) 30.1 生成模型的定义 前面所详细描述的模型以浅层的机器学习为主.本章将承上启下引出后面深度机器学习的部分.本小节,主要 ...

  6. 机器学习-白板推导-系列(五)笔记:降维(PCA/SVD/PCoA/PPCA)

    文章目录 0 笔记说明 1 背景 1.1 样本均值 1.2 样本协方差矩阵 2 主成分分析PCA 2.1 最大投影方差 2.2 最小重构距离 2.3 总结 3 SVD分解HX 4 主坐标分析PCoA ...

  7. 机器学习-白板推导系列笔记(二十八)-BM

    此文章主要是结合哔站shuhuai008大佬的白板推导视频:玻尔兹曼机_147min 全部笔记的汇总贴:机器学习-白板推导系列笔记 参考花书20.1 一.介绍 玻尔兹曼机连接的每个节点都是离散的二值分 ...

  8. 机器学习-白板推导系列笔记(二十一)-RBM

    此文章主要是结合哔站shuhuai008大佬的白板推导视频:受限玻尔兹曼机_155min 全部笔记的汇总贴:机器学习-白板推导系列笔记 玻尔兹曼机介绍:白板推导系列笔记(二十八)-玻尔兹曼机 一.背景 ...

  9. 【白板推导系列笔记】降维-PCA-最大投影方差最小重构代价

    作者:shuhuai008 链接:[机器学习][白板推导系列][合集 1-33]_哔哩哔哩_bilibili PCA的核心就是对原始特征空间的重构(将一组可能线性相关的变量,通过正交变换变换成一组线性 ...

  10. 机器学习-白板推导系列笔记(三十四)-MDP

    此文章主要是结合哔站shuhuai008大佬的白板推导视频:马尔科夫决策过程_107min 全部笔记的汇总贴:机器学习-白板推导系列笔记 一.背景介绍 Random Variable:XYX⊥YX\; ...

最新文章

  1. 实验七:层叠样式表(二)
  2. leetcode 1143. 最长公共子序列
  3. 通过一个实际案例,彻底搞懂 HashMap!
  4. (转载)最黑的黑客米特尼克:多次耍FBI 终被高手擒
  5. 产品经理适合当项目经理吗?
  6. 下载elasticsearch的jdbc包
  7. Unity IOS设备陀螺仪控制相机旋转
  8. 双轨世界:现实之轨与智慧之轨
  9. Word文档分栏操作释疑
  10. html字体字号颜色怎么设置,html字体样式大全 html怎么改变字体大小和颜色
  11. 切比雪夫不等式的证明
  12. linux nas解决方案_Linux操作系统在NAS中的典型应用
  13. acwing 4269.校庆(map)
  14. Invalid default value for
  15. jmp指令(0903)
  16. UDDi注册中心的实现
  17. 阿里云盘 v2.4.127 最后一个无会员免更新版本
  18. 把汇编程序翻译成C语言,pic单片机汇编程序翻译成c语言解决办法
  19. asp毕业设计——基于asp+access的校园新闻发布管理系统设计与实现(毕业论文+程序源码)——新闻发布管理系统
  20. 搜索算法---深度优先搜索

热门文章

  1. 【vue】--路由解耦 传值的方式
  2. 爬虫实战—模拟登陆oschina
  3. select样式调整
  4. Ubuntu下同时安装caffe和tensorflow
  5. Web---HTTP请求、重定向、转发和数据压缩
  6. iOS 获取系统相机相册
  7. [C入门 - 游戏编程系列] 贪吃蛇篇(一) - 世界定义
  8. Android给力模拟器,秒杀原生模拟器到渣
  9. chromium中的性能优化工具syzyProf
  10. POJ1177(扫描线求周长并)