描述问题

在写实现生成mini-batches的时候,发现不能很好理解X[:,n]及X[:,m:n]的原理。下面具体围绕数组介绍切片原理展开讲述如何在不打乱数据集X与对应标签Y的对应关系的条件下,随机生成mini-batches的原理及过程。

解决方案

讲在前面。在具体实现中,X[a,b],a表示第 1 维(行)的第 a-1 个(行),b表示第 2 维(列)的第 b-1 个(列)。

注:下标均从0开始。

# 1-0.得到第1行第0列的元素
X = np.array([[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [14, 15], [16, 17], [18, 19]])
print(X[1, 0])# 输出
# 2

1-1.数组切片 X[ :, n]原理

表示遍历所有行的第n-1列的元素。返回得到一个结构为(1,m)的数组

# 1-1.得到所有行的第0列
X = np.array([[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [14, 15], [16, 17], [18, 19]])
print(X[:, 0])
# 输出
# [ 0  2  4  6  8 10 12 14 16 18]# 1-2.得到所有行的第1列数据
X = np.array([[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [14, 15], [16, 17], [18, 19]])
print(X[:, 1])
# 输出
# [ 1  3  5  7  9 11 13 15 17 19]

1-2.数组切片 X[ :, [1,0,2] ]的原理

原理 - 表示利用该列表[1,0,2]的元素作为下标进行重排。 首先提取所有行的第1列元素作为第0列;再提取所有行的第0列元素作为第1列;最后提取所有行的第2列元素作为第2列 。

效果 - 利用这种方法对所有样本进行重排,不会破坏每个样本内部的特征。

再利用同一个随机列表重排标签Y,达到样本和标签的对应关系不被破坏。

# 1-3.type(n)=list,且len(n)=n的效果。重排列,保持每列的对应关系。
X = np.array([[0, 1, 1], [2, 3, 1], [4, 5, 1], [6, 7, 1], [8, 9, 1], [10, 11, 1], [12, 13, 1], [14, 15, 1], [16, 17, 1],[18, 19, 1]])
print(X[:, [1, 2, 0]])# 输出
# [[ 1  1  0]
# [ 3  1  2]
# [ 5  1  4]
# [ 7  1  6]
# [ 9  1  8]
# [11  1 10]
# [13  1 12]
# [15  1 14]
# [17  1 16]
# [19  1 18]]

1-3.数组切片 X[ :, m:n]原理

取所有数据的第m到n-1列数据,含左不含右。

# 1-4.得到第1-2列的数据。含1不含3.
X = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20]])
print(X[:, 1:3])# 输出
# [[ 1  2]
# [ 4  5]
# [ 7  8]
# [10 11]
# [13 14]
# [16 17]

2-1. 随机生成mini-batches的原理及过程

整个生成mini-batches 的过程分为2步:

第1步:随机化数据集X。利用数组切片 X[ :, [1,0,2] ]的原理打乱数组X的顺序。

具体实现:首先利用np.random.permutation(m)得到一个长度为m的元素取值为0-(m-1)的随机数组;此时不可直接使用permutation生成的数组,需要将数组转化为list列表待用;最后利用同一个随机列表对X、Y进行随机化。

permutation = list(np.random.permutation(m))  # 得到一个长度为m的随机列表,且里面的数是0-(m-1)
shuffled_X = X[:, permutation]  # 将m个样本按照permutation列表里的数据进行排序
shuffled_Y = Y[:, permutation].reshape((1, m))  # 1.由于是二分类问题,所以每个样本的标签是(1,1),所以m个样本的结构是(1,m);2.reshape是确保格式不出错设定

第2步:分割为num_complete_minibatche个完整的mini-batch + 多余的样本。先得到mini-batches的个数;再遍历分割每个mini-batch的具体元素;每次分割后依次将mini-batch传入mini-batches的list中去。

注:样本个数m不一定是mini-batch-size的整数倍

num_complete_minibatches = math.floor(m / mini_batch_size)  # 得到mini-batch的个数(向上取整)
for k in range(0, num_complete_minibatches):mini_batches_X = shuffled_X[:, k * mini_batch_size:(k + 1) * mini_batch_size]  # 分割数据集mini_batches_Y = shuffled_Y[:, k * mini_batch_size:(k + 1) * mini_batch_size]  # 分割标签mini_batch = (mini_batches_X, mini_batches_Y)mini_batches.append(mini_batch)  # 存入list

附:若样本个数不是mini-batch-size的整数倍

if m % mini_batch_size != 0:mini_batch_X = shuffled_X[:, mini_batch_size * num_complete_minibatches:]  # copy余下的元素mini_batch_Y = shuffled_Y[:, mini_batch_size * num_complete_minibatches:]mini_batch = (mini_batch_X, mini_batch_Y)mini_batches.append(mini_batch)

总结

1.X[:,n]及X[:,m:n]的原理

X[ :, n] - 表示遍历所有行的第n-1列的元素。返回得到一个结构为(1,m)的数组

X[ :, [1,0,2] ] - 原理 - 表示利用该列表[1,0,2]的元素作为下标进行重排。

效果 - 利用这种方法对所有样本进行重排,不会破坏每个样本内部的特征。

再利用同一个随机列表重排标签Y,达到样本和标签的对应关系不被破坏。

X[ :, m:n] - 取所有数据的第m到n-1列数据,含左不含右。

2.随机生成mini-batches的原理及过程

整个生成mini-batches 的过程分为2步:

第1步:利用同一个随机序列进行随机化数据集X和样本标签Y。

第2步:利用循环遍历分割为num_complete_minibatche个完整的mini-batch + 多余的样本。

【机器学习笔记】随机生成mini-batches的原理及过程相关推荐

  1. 机器学习笔记丨神经网络的反向传播原理及过程(图文并茂+浅显易懂)

    文章目录 一.前言 二.神经网络的前向传播原理 1. 单个神经元的计算 2. 神经元在神经网络中的计算 三.反向传播算法内容(请静下心,一步一步的看) Step1 计算误差 Step2 更新权重 四. ...

  2. 用机器学习识别随机生成的CC域名

    本文用识别由域名生成算法Domain Generation Algorithm: DGA生成的C&C域名作为例子,目的是给白帽安全专家们介绍一下机器学习在安全领域的应用,演示一下机器学习模型的 ...

  3. Python机器学习笔记——随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为&q ...

  4. 机器学习笔记之EM算法(二)EM算法公式推导过程

    机器学习笔记之EM算法--EM算法公式推导过程 引言 回顾:EM算法公式 推导过程 引言 上一节介绍了隐变量和EM算法,以及 以EM算法公式为条件,证明了随着EM算法迭代步骤的增加,每次迭代得到新的模 ...

  5. 机器学习笔记GBDT(一):原理

    目录 文章目录 目录 前言 1. GBDT概述 2. GBDT的负梯度拟合 3. GBDT回归算法 1) 初始化弱学习器 2) 对于迭代轮数t=1,2,...,T有: 3) 得到强学习器f(x)的表达 ...

  6. 李宏毅2023春季机器学习笔记 - 01生成AI(ChatGPT)

    一.引言 预设的知识储备要求:数学(微积分.线性代数.机率):编程能力(读写python) 这门课专注在 深度学习领域deep learning, 事实上深度学习在今天的整个机器学习(ML)的领域使用 ...

  7. 机器学习笔记——随机森林

    随机森林是典型的Bagging集成算法,它的所有基评估器都是决策树.分类树集成的森林叫随机森林分类器,回归树集成的森林叫随机森林回归器. 随机森林分类器 重要参数 控制基评估器的参数 Criterio ...

  8. FlyAI小课堂:python机器学习笔记:深入学习决策树算法原理

    分类技术(或分类法)是一种根据输入数据建立分类模型的系统方法,分类法的例子包括决策分类法,基于规则的分类法,神经网络,支持向量机和朴素贝叶斯分类法.这些技术都使用一种学习算法(learning alg ...

  9. 斯坦福CS229机器学习笔记-Lecture5 - 生成学习算法+高斯判别GDA+朴素贝叶斯+拉普拉斯平滑

    作者:teeyohuang 邮箱:teeyohuang@163.com 本文系原创,供交流学习使用,转载请注明出处,谢谢 声明:此系列博文根据斯坦福CS229课程,吴恩达主讲 所写,为本人自学笔记,写 ...

  10. 机器学习笔记(十九)——最大熵原理和模型定义

    一.最大熵原理 最大熵原理是概率模型学习的一个准则.最大熵原理认为,在学习概率模型时,在所有可能的概率分布中,熵最大的模型是最好的模型.通常用约束条件来确定概率模型的集合,所以,最大熵模型也可以表述为 ...

最新文章

  1. python基础语法手册format-python基础知识之格式化
  2. m40型工业机器人_工业机器人在汽车生产中有的应用范围
  3. 从零开始springboot 第二讲
  4. 1.3万亿条数据查询毫秒级响应,如何做到的?
  5. CentOS下Privoxy和Iptables 实现透明代理,修改http-header
  6. Linux启动分析——init进程与app启动(init进程源码分析)
  7. 浏览器UserAgent发展历史
  8. HTML 语法练习---常见标签
  9. matlab plotyy 坐标轴设置,[转载]Matlab plotyy画双纵坐标图实例
  10. linux怎么用命令上传本地文件,Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件...
  11. 2022年武汉市小微企业服务补贴券签约服务机构申报条件、材料及时间
  12. c语言中scanf()用法,C语言中scanf()的用法!
  13. 大桥数据,国外大桥排行榜数据清单,Python爬虫120例第32例
  14. 拷贝原站点有用文章(合并页)
  15. 60种数据可视化图表总结
  16. 32g的u盘速度测试软件,写入超100MB/s?32G神速U盘PK固态硬盘
  17. 中国集成电路发展探秘
  18. 小程序,公众号微信客服消息开发
  19. 作业2 分析TGA文件
  20. Web前端培训:appear初始渲染动画的方式

热门文章

  1. 基于STM32的声控洗衣机
  2. java 基本数据类型所占字节数及其范围
  3. Delphi复制HID、ID门禁卡源码
  4. [WARNING] The requested profile pom.xml could not be activated because it does not exist.
  5. Python实现DE差分进化算法优化支持向量机分类模型(SVC算法)项目实战
  6. scikit-learn与mllib
  7. 中国联通SP业务接入开发总结(SGIP1.2 协议)
  8. OpenCV系列之特征匹配 | 四十四
  9. x299服务器芯片,【有趣】第58期:X299大船值得入否?
  10. 《精力管理》阅读笔记