2785-李同学-算法方向-自然语言处理-就业:是 扫二维码继续学习 二维码时效为半小时

(0评价)
价格: 免费

重要参数

criterion

为了要将表格转化为一棵树,决策树需要找出最佳节点和最佳的分枝方法,对分类树来说,衡量这个“最佳”的指标 叫做“不纯度”。通常来说,不纯度越低,决策树对训练集的拟合越好。

不纯度基于节点来计算,树中的每个节点都会有一个不纯度,并且子节点的不纯度一定是低于父节点的,也就是 说,在同一棵决策树上,叶子节点的不纯度一定是最低的。

Criterion这个参数正是用来决定不纯度的计算方法的。sklearn提供了两种选择:

1)输入”entropy“,使用信息熵(Entropy) 2)输入”gini“,使用基尼系数(Gini Impurity)

当使用信息熵 时,sklearn实际计算的是基于信息熵的信息增益(Information Gain),即父节点的信息熵和子节点的信息熵之差。

比起基尼系数,信息熵对不纯度更加敏感,对不纯度的惩罚最强。但是在实际使用中,信息熵和基尼系数的效果基 本相同。信息熵的计算比基尼系数缓慢一些,因为基尼系数的计算不涉及对数。另外,因为信息熵对不纯度更加敏 感,所以信息熵作为指标时,决策树的生长会更加“精细”,因此对于高维数据或者噪音很多的数据,信息熵很容易 过拟合,基尼系数在这种情况下效果往往比较好。当模型拟合程度不足的时候,即当模型在训练集和测试集上都表 现不太好的时候,使用信息熵。当然,这些不是绝对的

 

[展开全文]

决策树

1、概述

决策树是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,以解决分类和回归问题。

2、关键概念:节点

根节点:没有进边,有出边。包含最初的,针对特征的提问。

中间节点:既有进边也有出边,进边只有一条,出边可以有很多条。都是针对特征的提问。

叶子节点:有进边,没有出边,每个叶子节点都是一个类别标签。

子节点和父节点:在两个相连的节点中,更接近根节点的是父节点,另一个是子节点。/3、

3、决策树算法的核心是要解决两个问题:

1)如何从数据表中找出最佳节点和最佳分枝? 2)如何让决策树停止生长,防止过拟合?

4、模块sklearn.tree的使用

 

[展开全文]

什么是sklearn?

sklearn是一个开源的基于python语言的机器学习工具包,它通过numpy、scipy和matplotlib等python数值计算的库实现高效的算法应用,涵盖了几乎所有主流机器学习算法。

 

[展开全文]

数据预处理

深度学习需要的是标准的正方形图片

(1)image resize

(2)Data Argumentation

(3)Normalize

(4)to tensor

 

[展开全文]

自定义数据集实战

test数据量太小的话,测试结果波动较大,所以我们为了保证测试的效果,会把测试集的数据多分配一些

1、load data ——比较重要的模型;

继承一个通用的母类

inherit from torch.utils.data.Dataset

要定一个两个函数

_len_:数据量

_getitiem_:能够得到指定的样本

2、build model——在我们已经定义好的模型上做一些修改;

3、train and test

4、transfer learning

 

[展开全文]

情感分类实战

Google CoLab

(1)continuous 12 hours;

(2)free K80 for GPU;

(3)不需要爬墙

 

[展开全文]

LSTM使用方法

LSTMcell更为灵活的使用方法,可以自定义喂数据的方式

[展开全文]

2、输入门

it作为一个开度,将多少信息传入到下一个时间点,有算法决定这个开度;新信息同样也是由ht-1和当前点的xt共同决定的。it是对当前信息的过滤系数,当前信息与开度相乘之后就是经过过滤后输入下一个点的新信息。

输入门的值

ct是memory,ht是隐藏层的输出

3、输出值

同样是由开度和ct共同决定的,ot作为开度也是由算法决定的

LSTM如何解决梯度离散的问题呢?

由于存在忘记门、输入门和输出门三个门

当前隐藏层对前一个隐藏层求导时,出现三个值相加的情况,不容易出现都是大或都是小的情况,数值相对可靠,所以效果相对来说更好一些。

[展开全文]

LSTM将短期记忆变长,RNN只能记住比较短的时间序列,LSTM就是为了解决短期记忆的问题。

1、忘记门

[展开全文]

梯度爆炸

why?


梯度是有WR的k次方乘以其他的一些东西得到的

当WR大于1的时候,k次方会非常大

当WR小于1的时候,k次方会接近于0

我们的loss本来是逐渐变小的,发生梯度爆炸的loss会突然增大,为了解决这个问题,我们可以检查当前位置的梯度值,如果大于我们设定的阈值,我们将用梯度本身来除以她此刻的模,再乘以阈值,这样使得梯度在设定范围内,且方向不发生变化

Gradient Clipping

查看一下梯度的模,利用clip_grad_norm把梯度的裁剪到10左右

梯度离散:后面隐藏层梯度变化比较大,前面的隐藏层梯度变化很小,长时间得不到更新

 

 

[展开全文]

out是所有的时间戳上面最后一个memory状态

h是左右一个时间的所有memory状态

 

[展开全文]

memory的更新方式

How to train?

求导过程略

[展开全文]

RNN循环神经网络

RNN跟CNN最大的区别是会根据语境信息更新

 

[展开全文]

时间序列表示方法

pytorch里面并没有支持字符串的功能

one_hot是比较稀疏的、维度高

sequence序列能接受的input shape有两种

[word num, b, word vec]

[b, word num, word vec]

[展开全文]

CIFAR—10数据集包括了常见的十类事物的图片

每一类有6000张图片,一共有6万张,其中5万张用来训练,1万张用来测试

 

[展开全文]

数据增强

神经网络对数据的要求非常饥渴,需要贴有标签的大量数据

当数据量有限的时候:1、要减少神经网络的隐藏层;2、Regularization,迫使一部分权值接近于0,让网络的表现更加稳定;3、数据增强,目前的数据量较少,想办法对数据进行变换——旋转、裁剪加噪声等

Flip——翻转

可以从水平方向和竖直方向进行翻转,这里增加了random属性,代表翻转是具有随机性的,有可能进行水平翻转,也有可能不翻转,有可能垂直翻转,也有可能不翻转

Rotate——旋转

Scale——缩放

以中心点为标准进行缩放Resize,传入的是list

Crop Part

随机得进行裁剪

transform是torchvision里面自带的包, transform.Compose()可以把一系列翻转、旋转、裁剪和缩放操作组合在一起

Noise——加噪声,用的不多

即使得到了无穷多的数据,由于进行变换后的数据和原本的数据非常接近,所以训练的结果仅仅能得到一个很小的提升

[展开全文]

4、save和load

5、train和test状态切换很方便

6、implement own layer

由于实际需要定义一个flatten类,我们通过nn.Sequential()来把函数有序排列起来组成我们主要的神经网络结构

7、通过nn.Parameter( )实现自己的参数定义

[展开全文]

nn.Module的好处

提供了很多现成的网络层

1、container——nn.Sequential()

将神经网络内部的结构按照顺序进行编码

net = nn.Sequential()可以直接实现网络前向传播

2、其次,通过net.parameters( )可以返回想要的参数;也可以通过net.parameters( )把参数丢到优化器里

3、modules里面包括了所有的节点;里面包括很多子节点——直系亲属

整个net有5个节点

[展开全文]

DenseNet跟ResNet一样都有shortcut短接,以使得及时是很深的网络其性能也不必浅层的网络差,不一样的是后面的每一层网络都有可能与前面任意一层网络形成短接

最上面的没有短接的神经网络

第二个是Resnet

最后一个是DenseNet

从图片上可以看出来区别

 

[展开全文]