白板推导系列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. nova6的4g版能支持鸿蒙,鸿蒙公测新增6款手机,都是nova系列,包括一款4G手机
  2. Hadoop YARN安装部署初探
  3. 思科、华为、华三、Juniper路由协议优先级汇总
  4. 飞猪基于 Serverless 的云+端实践与思考
  5. DevExpress的GridControl的使用以及怎样添加列和绑定数据源
  6. 源代码主干分支开发四大模式
  7. java中类与类之间的关系
  8. SAP Spartacus ComponentData的提前subscription
  9. UEditor 任意文件上传漏洞
  10. Ubuntu16.04安装Caffe(CPU Only)
  11. 面试题9:斐波那契数列
  12. Thunderspy: 7个硬件漏洞,影响9年来所有安装 Thunderbolt 的电脑
  13. 自由度(degree of freedom)
  14. (Trie树)leetcode208: Implement Trie,79:Word Search,DFS与BFS(python实现),212:Word Search2...
  15. 11.8 scrum report
  16. 2022年电子考研经验分享,本科双非,一志愿南航,调剂国科大上岸
  17. 素数----南阳OJ
  18. 重磅 | 谱尼测试圆满承办化妆品生产企业研学班
  19. 测试的发展前景怎么样?
  20. Ethercat 学习总结一:协议总结

热门文章

  1. (USB HID) Report Descriptor 理解
  2. vim修改tab默认4个空格
  3. Launch MySQL on my PC
  4. 顺序链表的C风格实现
  5. 【BZOJ 4007】[JLOI2015]战争调度 DP+搜索+状压
  6. 转:初学 Java Web 开发,请远离各种框架,从 Servlet 开发
  7. 微信公众平台开发(112) 微信卡券
  8. 类数据源Visual C++对ODBC数据库资源的访问
  9. 那些属于我自己的牢骚
  10. 人工智能与深度学习概念(2)——人工神经网络-ANN