python + ML + DL 杂货铺

前言

本篇博客是记录学习 python,ML,DL过程中遇到的各种知识,有的是较难的,有的是简单但很实用怕以后找起来麻烦,按照本人惯例,以每个问题作为一个标题进行排版。

文章目录

  • 前言
  • 1. numpy.argmax()用法
  • 2. 二分类算法如何完成多分类任务(标签向量化)
  • 3. classification_report函数评价报告及ROC曲线
  • 4. 标签向量化的简便方法(OneHotEncoder模块)
  • 5. pandas随机抽样
  • 6. np.argsort() 用法
  • 7. 逻辑回归函数求导
  • 8. 神经网络随机初始化
  • 9. 梯度下降时为什么要进行学习率衰减
  • 10. np.max & np.maximun & ReLU
  • 11. np.meshgrid() 、 np.c_ 、 np.r_ 用法
  • 12. sklearn 中自带的练习数据集简介
  • 13. numpy.random 模块下的常用随机函数简介
  • 14. 关于 Momentum 优化的理解

1. numpy.argmax()用法

简洁明了,手画一张图搞定:
python + ML + DL 杂货铺_第1张图片

2. 二分类算法如何完成多分类任务(标签向量化)

还是画一张图搞定,简洁明了:
python + ML + DL 杂货铺_第2张图片

3. classification_report函数评价报告及ROC曲线

个人惯例,还是画一张图(好像我特别喜欢画图):
python + ML + DL 杂货铺_第3张图片
根据实际需要,高精确度和高召回率用途不同。
比如对于疾病监测,高召回率更加的重要,因为将一个健康的人预测为病人远没有将一个病人预测为健康的人后果不堪设想。

4. 标签向量化的简便方法(OneHotEncoder模块)

问题2中的图及代码揭示的是多分类任务的处理标签的原理,但实际工作中我们不可能每次都去手写这个过程,因为有的多分类标签比较麻烦,所以在此介绍一个sklearn中的OneHotEncoder:
python + ML + DL 杂货铺_第4张图片
What? 这么简洁又强大的模块还不够满意???
好吧,其实你也可以用一行代码这样实现:
python + ML + DL 杂货铺_第5张图片
从OneHot便签变回普通的标签:

							label = np.argmax(Y, axis=0)
							# 即可得到原来的标签 array([2, 0, 1, 3, 4, 0, 1])

好了,这个够简单了吧,我也经常使用这个轻巧便捷。但是有些能通过 OneHot 模块向量化的标签用这个简单的函数是无法完成的,观察这两种方法的实现过程可知。

5. pandas随机抽样

  1. 需要在一系列样本中随机抽取几个样本,可以用下面的方法:
    DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
  2. 参数说明:
参数 说明 释义
n 抽样个数(整型) 例如:n=3,代表抽取三个样本
frac 抽样百分比 (浮点型) 例如:frac=0.3,代表抽取30%的样本
replace 是否放回抽样 True:有放回抽样
Flase:不放回抽样
random_state 随机数种子(整型) 定制随机的结果
axis 抽样还是按抽样 0:抽取行
1:抽取列
  1. 返回值仍为为DaraFrame对象。

6. np.argsort() 用法

说明:该方法会返回数组从小到大排序对应的下标,不改变原数组。
类似:np.sort()方法也会对数组排序,但返回排序后的数组而不是下标,也不改变原数组。
举例:
python + ML + DL 杂货铺_第6张图片

7. 逻辑回归函数求导

python + ML + DL 杂货铺_第7张图片
python + ML + DL 杂货铺_第8张图片

8. 神经网络随机初始化

Z = W T X + B Z=W^{T}X+B Z=WTX+B
A = σ ( Z ) A=\sigma(Z) A=σ(Z)
随机初始化时,若 W W W 矩阵全为 0, B B B 矩阵也全为 0,则第二层的所有单元的输入值 Z Z Z 都会一样,输出值 A A A 也会全部一样,神经网络的就会失去多样性,和用一个单元没什么区别。后续的每一层的各个单元也会相等。反向传播计算梯度时,同一层的各个单元的梯度也会相等。
所以我们一般用 W=np.random.randn((m, n))*0.01 命令将 W W W 矩阵初始化成符合高斯分布的随机值。乘 0.01 是因为我们不想 Z Z Z 变得太大或太小,因为对于 sigmoidtanh 这样的激活函数,如果 Z 的值太大或太小,则梯度会处于比较缓慢的部位,这样梯度下降算法会运行的很缓慢。 B B B矩阵不会产生上述的对称性问题,所以 B B B 可以初始化成全 0 矩阵。

9. 梯度下降时为什么要进行学习率衰减

在超大数据进行大规模深度学习时,我们喜欢用 mini-batch 代替传统的梯度下降,因为它的效率会高很多。

  • 但 mini-batch 梯度下降存在一个问题:mini-batch 永远不会精确地收敛至全局最小值,而是在其附近摆动。
  • 原因在于:
    • 假设总共有 1 万个样本, mini-batch 的样本数为 512 个。则每次执行 mini-batch 梯度下降,梯度会朝着这512个样本的最优解处下降,而不是朝着 1 万个样本的全局最优解处下降(圆心)。
    • 而使用传统的梯度下降,因为每次都是在全部的 1 万个样本上下降,所以梯度直接会朝着全局最优解处下降(圆心)。
  • 所以我们要给学习率进行衰减,让它随着迭代的进行而逐渐减小,以减小摆动的幅度。
    python + ML + DL 杂货铺_第9张图片

10. np.max & np.maximun & ReLU

np.max():返回数组中的最大值,传入一个数组。
np.maximum():返回两个数组中对应位置的较大元素组成的数组,至少传入两个数组。
在这里插入图片描述
所以可以用 np.maximum() 实现 ReLU 函数。
函数:np.maximum(0, x)
图像:
python + ML + DL 杂货铺_第10张图片
导数:在 x > 0 的区间上,ReLU的导数恒为 1。在 x < 0 的区间上,ReLU的导数恒为 0。
代码:所以只需要进行 x > 0 断言语句,返回的布尔值数组即是 ReLU 的导数,将 True/False 型的布尔值转为 1/0 型即可。
python + ML + DL 杂货铺_第11张图片

11. np.meshgrid() 、 np.c_ 、 np.r_ 用法

函数 功能
np.meshgrid() 生成网格点坐标矩阵
np.c_[ ] 按行合并两个数组
np.r_[ ] 按列合并两个数组
  1. np.meshgrid()
    python + ML + DL 杂货铺_第12张图片
  2. np.c_[ ]
    python + ML + DL 杂货铺_第13张图片
  3. np.r_[ ]
    python + ML + DL 杂货铺_第14张图片

12. sklearn 中自带的练习数据集简介

sklearn.datasets 模块下提供了很多数据集供练习:

调用方式 数据性质
sklearn.datasets.load_ 自带的小数据集
sklearn.datasets.fetch_ 在线下载数据集
sklearn.datasets.make_ 计算机生成数据集
sklearn.datasets.load_svmlight_file(…) svmlight/libsvm格式的数据集
sklearn.datasets.fetch_mldata(…) 从买了data.org在线下载获取的数据集
  1. 自带的小数据集
调用代码 数据集介绍
load_iris() 莺尾花数据集
load_breast_cancer() 乳腺癌数据集
load_digits() 手写数字数据集
load_diabetes() 糖尿病数据集
load_boston() 波士顿房价数据集
load_linnerud() 体能训练数据集
  1. 生成数据集

可以生成分类任务数据集,也可生成回归任务数据集,也有用于聚类任务的数据集。

调用代码 数据集介绍
make_blobs() 多类单标签数据集,为每个类分配一个或多个正太分布的点集
make_classification() 多类单标签数据集,为每个类分配一个或多个正太分布的点集,提供了为数据添加噪声的方式
make_gaussian-quantiles() 将一个单高斯分布的点集划分为两个数量均等的点集,作为两类
make_hastie-10-2() 产生一个相似的二元分类数据集,有10个维度
make_circle() 和 make_moon() 产生二维二元分类数据集,环形或月亮形,可以添加噪声

示例1:make_blobs() 生成聚类数据集
python + ML + DL 杂货铺_第15张图片
示例2:make_circle() 和 make_moon() 生成环形和月亮形分类数据
python + ML + DL 杂货铺_第16张图片

13. numpy.random 模块下的常用随机函数简介

python + ML + DL 杂货铺_第17张图片

14. 关于 Momentum 优化的理解

为了加快学习速度,我们习惯用 mini-batch 梯度下降,但是 mini-batch 永远不会收敛至全局最小值,而是在它的附近摆动。在问题 9 中我们介绍了 学习率衰减,本问题下,我们介绍根据“加权移动平均线”而推导出的 Momentum 动量梯度下降。
python + ML + DL 杂货铺_第18张图片
先定义一下我们的符号:

符号 含义
v l v_l vl l l l层梯度下降的动量
W l W_l Wl l l l层的参数 W W W
d W l dW_l dWl l l l层的梯度

为了防止每次梯度下降方向摆幅过大,我们取当前层的梯度下降动量为:
v l : = β v l + ( 1 − β ) d W l v_l:=\beta v_l+(1-\beta)dW_{l} vl:=βvl+(1β)dWl
β \beta β一般取0.9,即:前面所有层动量的加权和的 90 % 90\% 90% + + + 当前层的梯度的 10 % 10\% 10%
然后用得到的动量 v l v_l vl 代替 d W l dW_l dWl 更新参数 W l W_l Wl
W l : = W l − α v l W_l:=W_l-\alpha v_l Wl:=Wlαvl
但是这样仍然存在两个问题:

  1. 由于加权移动平均线初始化 v 0 = 0 v_0=0 v0=0,所以在初始阶段比真实情况偏低,所以用偏差修正:
    v l : = β v l + ( 1 − β ) d W l 1 − β t v_l:=\frac{\beta v_l+(1-\beta)dW_{l}}{1-\beta^t} vl:=1βtβvl+(1β)dWl

你可能感兴趣的:(IT,机器学习,python)