一些数据预处理的方法

1. 数据的预处理 对于缺失值 缺失量少,均值,中位数等填充; 缺失量多,离散化; 拟合模型填充. 对于异常值 基于统计的方法:3 sigma 聚类方法 isolation forest 等算法. 2. 特征工程 连续特征, 离散特征 特征组合, 生成新的特征 特征的归一化 (Normalization) 对于在一定范围内的特征 eg: 身高 线性函数归一化 (Min-Max Scaling) $X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}}$ 零均值归一化 (Z-Score Normalization) = 标准化 (Standardization) $z=\frac{x-\mu}{\sigma}$ $\mu$: 均值. $\sigma$: 标准差 $\sigma = \sqrt{\frac{\sum (x_i-\mu)^2}{N}}$ 优点: 在变量更新速度不一致的情况下, 归一化能更好的实现梯度下降 线性变换不会改变原始数据的数值排序 类别型特征 (Categorical Feature) 对于只在有限选项内取值的特征 eg: 性别, 血型 特征的选择 Filter(过滤法) 按照发散性或相关性对各个特征进行评分, 设定阈值或者待选择特征的个数进行筛选 就是, 算特征与特征之间的关系 Pearson()皮尔森相关系数: 单个变量之间的线性相关性,结果的取值区间为[-1,1] from scipy.stats import pearsonr 优点: 速度快 缺点: 只对线性关系敏感 卡方验证 类别型变量对类别型变量的相关性 最大信息系数 maximal information coefficient (MIC) from minepy import MINE Wrapper(包装法) 根据目标函数(往往是预测效果评分), 每次选择若干特征, 或者排除若干特征 Embedded(嵌入法) 先使用某些机器学习的模型进行训练, 得到各个特征的权值系数, 根据系数从大到小选择特征(类似于Filter, 只不过系数是通过训练得来的) word2vec 特征的降维

2023年10月7日 · 2 分钟 · sun510001

行为识别模型简介

1. 行为识别 Human Action Recognition (HAR) 行为识别模型有两个方向: 第三人称动作识别和第一人称动作识别. 使用的各方向和对应的方法大致如下图, 本篇文章只介绍第三人称动作识别 RGB 模态. 详细可以参考调研论文. [1] ...

2023年9月8日 · 7 分钟 · sun510001

OCR文本识别和CRNN算法简介

1. CRNN算法介绍 CRNN 全称为 Convolutional Recurrent Neural Network 主要用于端到端地对不定长的文本序列进行识别, 不用先对单个文字进行切割, 而是将文本识别转化为时序依赖的序列学习问题, 就是基于图像的序列识别. 对于无字典和有字典的场景都有较好的表现. (不过无字典精度差有字典10%以上) 模型结构简单, 性能比Transformer等模型更好. 2. 传统的文字识别模型 有些模型基于DCNN 缺点: 这些模型需要一个很强的词语检测模型. 需要将图片中的词语准确检测出来. 需要做一个大范围的分类(英文单词有90K个, 中文1百万) 3. 模型结构 ...

2023年8月26日 · 7 分钟 · sun510001

插值算法介绍

Enzo_Mi的个人空间-Enzo_Mi个人主页-哔哩哔哩视频 1. 双线性插值 双线性插值, 将目标尺寸图像的每个像素点映射回原图, 各像素点的值由它周围4个原图像素点进行线性插值获得. 1.1. 角对齐和边对齐区别 角对齐使用像素的中心点进行对齐(分割左右距离最远的中心点). 边对齐使用像素的边缘进行对齐(分割左右距离最远像素边缘). 下图(红点是原像素中心点, $(0,0)$ 点是左上角第一个红点; 蓝点是目标对齐点): ...

2023年8月12日 · 3 分钟 · sun510001

OCR文本检测和DBNet

1. 文本检测难点 文本的多样性: 颜色, 大小, 字体, 形状, 方向, 语言, 文本长度… 复杂的背景干扰: 图像失真, 模糊, 低分辨率, 阴影, 亮度… 密集文本或重叠文本 文字存在局部一致性: 文本行的一部分也可以是为独立的文本 2. 场景文本检测方法分类 ...

2023年8月5日 · 8 分钟 · sun510001

目标检测问题常用的模型

1. 原始CNN 卷积结构的网络大致由 3 各网络层组成: 卷积层, 池化层和全连接层. 1.1. 卷积层 Convolution layer 使用不同的卷积核依次进行卷积提取特征 卷积操作涉及的参数如下: 滑动窗口步长: 步长不同会导致特征图尺寸不同 步长越小, 计算效率越低 卷积核尺寸 边缘填充 有些卷积核按照特定步长会导致漏掉一些原图的像素, 所以需要再边界补 $0$. $0$ 不会对卷积计算产生影响. 卷积核个数 卷积核的个数决定了特征图的厚度 (第三个维度) 卷积的尺寸计算, 卷积有两种方式: VALID 和 SAME. VALID 不进行补 $0$, 会漏掉一些原图的参数, SAME 补 $0$, 多加一圈 $0$ 来补齐. 下面的公式是 SAME, 去掉 $2P$ 就是 VALID. 长度: $$ H_2=\frac{H_1-F_H+2 P}{S}+1 $$ 宽度: $$ W_2=\frac{W_1-F_W+2 P}{S}+1 $$ $W_1,H_1$ 表示 input 的宽度和长度 $W_2,H_2$ 表示输入特征图的宽度和长度 $F$ 表示卷积核长和宽的大小 $S$ 表示滑动窗口的步长 $P$ 表示边界填充 (padding) 厚度 卷积参数共享: 如果图像是 $32*32*3$ 的图像, 卷积核有 $10$ 个, 尺寸都为 $5*5*3$ (就是对 RGB 三通道都做卷积). 这样的话, 每个卷积核需要 $5*5*3=75$ 个参数, 加上每个卷积核都有一个对应的偏置参数 $b$, 总共需要 $(75+1)*10$ 个参数. 所以卷积网络参数远少于全连接神经网络参数. 使用多个不同尺寸的卷积核之后全连接如何处理? (NLP 处理句子或 CV 处理图片时被使用到) 使用多个不同尺寸的卷积核卷积后的全连接处理_多个卷积核_空字符(公众号:月来客栈)的博客-CSDN博客 ...

2023年7月23日 · 28 分钟 · sun510001

深度学习训练用激活损失函数和技巧

1. 激活函数 深度学习常见激活函数介绍及代码实现 - UCloud云社区 1. ReLU 线性整流函数(Linear rectification function), 又称修正线性单元, 是一种人工神经网络中常用的激活函数(activation function), 通常指代以斜坡函数及其变种为代表的非线性函数. $$ f(x)=max(0,x) $$2. Sigmoid 缺点 sigmoid有一个梯度消失的问题, $|z|>4$(变量值很大或很小)的时候, 梯度就快消失了(趋近于0). ...

2023年7月21日 · 6 分钟 · sun510001

数据结构与算法

1. 汉诺塔问题 问题: 将汉诺塔从A移动到C, 小圆盘必须在大圆盘上面. 分析: 可以将最底下的一块圆盘作为独立个体, 上面的所有圆盘作为另一个个体. 则整个汉诺塔的移动步骤如下. ...

2023年7月17日 · 14 分钟 · sun510001

机器学习模型介绍

1. Logistic Regression 模型介绍 逻辑回归 (Logistic regression) 是分类模型, 常用于二分类. 逻辑回归的本质是: 假设数据服从分布, 然后使用极大似然估计做参数的估计 Logistic 分布是一种连续概率分布 分布函数: $$ F(x)=P(X \leq x)=\frac{1}{1+e^{-(x-\mu) / \gamma}} $$ 密度函数: $$ f(x)=F^{\prime}(X \leq x)=\frac{e^{-(x-\mu) / \gamma}}{\gamma\left(1+e^{-(x-\mu) / \gamma}\right)^{2}} $$ $\mu$: 未知参数; $\gamma$: 形状参数. logistic 分布的形状与正态分布的形状相似, 但是Logistic 分布的尾部更长, 所以我们可以使用Logistic 分布来建模比正态分布具有更长尾部和更高波峰的数据分布. Sigmoid 函数就是Logistic 的分布函数在$\mu=0, \gamma=1$的特殊形式. Logistic 回归 Logistic 回归主要用于分类问题, 如二分类, 对于所给的数据假设存在一条直线可以将数据完成线性可分. 先看决策边界 (decision boundary) 问题 有线性决策边界(linear decision boundaries) 可以表示为 $w_1x_1+w_2x_2+b=0$, 假设某个样本点 $h_w(x)=w_1x_1+w_2x_2+b>0$ 那么可以判断其类别为1, 这个过程就是感知机. 非线性决策边界(non-linear decision boundaries) Logistic 回归还需要找到分类概率$P(Y=1)$与输入向量$x$ 的直接关系, 然后通过比较概率值来判断类别. 考虑二分类问题, 给定数据集: $D=\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right), x_{i} \subseteq R^{n}, y_{i} \in 0,1, i=1,2, \cdots, N$ 由于多元线性回归模型(单调可导函数) $w^Tx+b$ 的取值是连续的, 所以不能拟合离散变量, 但可以用它来拟合条件概率$P(Y=1|x)$, 因为概率的取值也是连续的. 而概率的取值范围是[0, 1], 所以使用广义线性模型. 最理想的模型是单位阶跃函数: $p(y_i=1 \mid x_i)=\left\{\begin{array}{ll}0, & z<0 \\0.5, & z=0 \\1, & z>0\end{array}, \quad z=w^{T} x_i+b\right.$ 但是这个模型不单调, 所以不可导(不连续不平滑), 所以不是广义线性模型 常用的函数是sigmoid函数, 将 $f(x) = \frac{1}{1+e^{-x}}\in(0,1)$, $h(y_i) = w^Tx_i+b\in(-\infty, \infty)$ $y_i = f(x_i) = \frac{1}{1+e^{-(w^Tx_i+b)}}$ 此时$y$是一个概率(0到1之间), 设y为x的正例概率, 1-y为x的反例概率, 两者的比值为几率 (odds). $ln(odds)=ln(\frac{y}{1-y})=w^Tx+b$ $w^Tx+b=ln\frac{P(Y=1|x)}{1-P(Y=1|x)}$ $P(y=1|x)=\pi_w(x)=\frac{1}{1-e^{-(w^Tx+b)}}$ $P(y=-1|x)=1-\pi_w(x)$ 这里$y\in(-1,1)$ 所以输出$y=1$的对数几率是由输入$x$的线性函数表示的模型, 这就是逻辑回归模型. ...

2023年6月16日 · 6 分钟 · sun510001

一些 NLP 常见深度学习的网络结构介绍

1. CNN 卷积核介绍 CNN中常用的四种卷积详解 1.1. 一般卷积 一个卷积核在图像上滑动,并求取对应元素相乘求和的过程. 使用参数: 卷积核大小 (Kernel Size) 步长 (Stride) 填充 (Padding) 输入和输出通道数 (Input & Output Channels) 普通卷积公式: ...

2023年5月27日 · 17 分钟 · sun510001

神经网络介绍

1. 梯度问题 梯度 梯度是一个向量, 表示某一函数在该点处的方向导数沿着该方向取得最大值. 即函数在该点处沿着该方向(此梯度的方向)变化最快, 变化率最大(为该梯度的模). 梯度下降 目的: 减小真实值(gt)和预测值的距离 批量梯度下降法(Batch Gradient Descent) batch_size=样本总数 小批量梯度下降法(Mini-Batch Gradient Descent) batch_size=x(16, 32, 64 …) 随机梯度下降(Stochastic Gradient Descent) batch_size=1 改进方法 Momentum (动量) $v_t=\gamma v_{t-1}+\eta g_t$ $\theta_{t+1}=\theta_t-v_t$ $\gamma$: 阻力(衰减系数); $g_t$: 梯度; $v$: 前进步伐; $\eta$: 学习速率 Adam 惯性保持: 记录梯度的一阶矩 $m_t=\beta_1m_{t-1}+(1-\beta_1)g_t$ 环境感知: 记录梯度的二阶矩 $v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2$ 更新函数 $\theta_{t+1}=\theta_t-\frac{\eta\cdot \hat{m_t}}{\sqrt{\hat{v_t}+\epsilon}}$ $\hat{m_t}=\frac{m_t}{1-\beta_1^t}$; $\hat{v_t}=\frac{v_t}{1-\beta_2^t}$ AdaDelta和RMSProp 对AdaGrad的改进 AdaGrad使用所有历史梯度的平方和的平方根做分母, 所以分母随时间单调递增. 这两个采用指数衰退计算平均值的方法, 用历史梯度的均值代替求和. ...

2023年5月5日 · 8 分钟 · sun510001

Python的高级用法

简介 *args 和 **kwargs *是必要的, 后面的变量可以变换 *args 是用来发送一个非键值对的可变数量的参数列表给一个函数. def test_var_args(f_arg, *argv): print("first normal arg:", f_arg) for arg in argv: print("another arg through *argv:", arg) test_var_args('yasoob', 'python', 'eggs', 'test') **kwargs允许你将不定长度的键值对, 作为参数传递给一个函数. def greet_me(**kwargs): for key, value in kwargs.items(): print("{0} == {1}".format(key, value)) >>> greet_me(name="yasoob") name == yasoob 如果你想在函数里同时使用所有这三种参数 some_func(fargs, *args, **kwargs) ...

2023年4月28日 · 7 分钟 · sun510001