归一化

图像验证码识别(八)——字符归一化

蓝咒 提交于 2020-11-10 01:43:46
前面提到了将验证码上的字符分割成一个单独的字符图片并且保存,但是扣下来的字符串可能会有倾斜的现象,因为现在很多网页验证码为了防止破解都对字符进行了一定的扭曲和旋转,即使是同一个网站的验证码,每个相同的字符很有可能都是不一样的,所以为了提高识别的正确率,在这里最好能让每次进行训练的字符能够保持同一个角度。所以首先需要做的就是旋转倾斜。 一、旋转倾斜 旋转倾斜的目的就是要提高识别的正确率,如果字符‘A’的模板是标准的,让一个横着的‘A’去训练肯定得不到正确的结果。不过怎么旋转呢?想要将每个字符都旋转到印刷体的角度那是很难的,也是不必要的,在这里采用的思想就是每次都旋转成为“最瘦的”。每次分割出来一个字符不管是横着的还是竖着的,都可以回到“最瘦”的角度。具体做法就是利用OpenCV的旋转函数. [cpp] view plain copy cv::Mat M = cv::getRotationMatrix2D(center, angle, scale); getRotationMatrix2D这个函数所做的就是计算旋转矩阵,熟悉计算机图形学的都知道,图形在做各种变换的时候都是在原有的矩阵上乘以变换矩阵。这里center是CvPoint2D32f类型的结构体,其有两个float类型的变量分别表示要旋转的图像的宽和高,angle就是要旋转的角度,scale是旋转后的缩放系数

Abstractive Summarization

你离开我真会死。 提交于 2020-04-02 21:54:14
Sequence-to-sequence Framework A Neural Attention Model for Abstractive Sentence Summarization Alexander M. Rush et al., Facebook AI Research/Harvard EMNLP2015 sentence level seq2seq模型在2014年提出,这篇论文是将seq2seq模型应用在abstractive summarization任务上比较早期的论文。同组的人还发表了一篇NAACL2016(Sumit Chopra, Facebook AI Research_Abstractive sentence summarization with attentive recurrent neural networks)(作者都差不多),在这篇的基础上做了更多的改进,效果也更好。这两篇都是在abstractive summarization任务上使用seq2seq模型的经典baseline。 目标函数是negative log likelihood,使用mini-batch SGD优化 本文提出了3种encoder,重点在于Attention-based encoder bag-of-words encoder Conv encoder:

关于数据

a 夏天 提交于 2020-03-25 21:01:28
数据是一切的根本。 一.获取数据 1.可以使用爬虫scrapy获取数据,但是更一般的是自家数据库中的数据 2.可以获得公用数据集: http://www.kaggle.com/datasets 等网站 3.可以自己创建虚拟数据 4.注意:1)数据量尽可能多、利于训练,(2)数据内容尽可能有效,能对预测产生作用(有用的特征),(3)数据尽可能要均匀(分类),即全面 5.注意:无论是数据获取还是处理,都要注意多做备份,有能力每步都要备份,数据的价值难以想象。 二.原始数据 1.数据的本质是信息的具体化,原始数据有很多种:数字、文字、图片....我们可以从这些数据中看出里面所包含的信息。 2.计算机接收进行处理的是数字,根据经验,把原始数据转换为数字是比较容易的(比如把图片转化为矩阵的形式), 3.我们得到的原始数据可能有这样那样的问题,所以要进行下一步的数据清洗 ------原始数据是杂乱的,含有不完整、重复、错误的数据,因此要先进行数据清洗------- 三.数据清洗(Data cleaning) 1.数据清洗是为了对数据进行重新审查和校验,目的在于删除重复信息、纠正存在的错误,并提供数据一致性 2.不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类 (1)缺失数据(数据为空Null):如果缺失数据的记录占比较小,可以直接剔除(主要包括删除样本或删除特征两种

推荐系统实践读书笔记与思考

天涯浪子 提交于 2020-03-24 06:24:43
推荐系统评测 一个网站3各参与方,用户、网站、内容提供方,好的推荐系统目标就在增加用户与网站互动,提高网站收入(这是公司最关注的),所以在推荐系统中需要综合考虑三方的利益。 在进行推荐时要注重用户体验并且也要考虑相关商家的利益,最终能使得网站收入提升。 在推荐系统早期,预测准确度是推荐系统的重要指标,这个指标的好处就是比较容易通过离线计算来得到,这样方便对不同推荐算法的研究。 准确预测并不代表好的推荐,比如用户已经打算买某个item ,无论系统是否给他推荐,他都准备买,对于用户来说他觉得推荐不够新颖,对于服务提供商来说没有增加潜在消费者中的销量,从实际效果来说这是一个比较失败的推荐。为了全面评测三方利益,从不同角度提出了很多评价指标。 推荐系统中实验方法 1. 离线实验 离线实验步骤比较简单,通过日志数据获取用户的行为数据,并按照一定格式来生成数据集;将数据集按照一定规则切分成训练集与测试集;在训练集上训练模型,在测试集上进行验证,通过指定的评价指标进行算法效果的评估。 这个方法的主要缺点就是:无法获取商业上关注的指标,如点击率,PV,VU,转化率等。但是优点也是非常明显的:不需要实际系统中控制权、不需要真实线上用户的参与、速度快可以进行大量算法的测试工作。 2. 用户调查 如果需要准确评价一个算法需要上线测试,但是如果对算法不是很有把握的时候,上线测试有比较大的风险

数据归一化/标准化

落爺英雄遲暮 提交于 2020-03-22 17:34:47
''' 【课程2.3】 数据归一化/标准化 数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。 在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权 最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上 0-1标准化 / Z-score标准化 ''' import numpy as np import pandas as pd import matplotlib.pyplot as plt % matplotlib inline # 数据标准化 # (1)0-1标准化 # 将数据的最大最小值记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据的归一化处理 # x = (x - Min) / (Max - Min) df = pd.DataFrame({"value1":np.random.rand(10)*20, 'value2':np.random.rand(10)*100}) print(df.head()) print('------') # 创建数据 def data_norm(df,*cols): df_n = df.copy() for col in cols: ma = df_n[col].max() mi = df_n

机器学习小组第二期第三周:简单的数据预处理和特征工程

寵の児 提交于 2020-03-17 06:13:17
目录 1.归一化 1.1.最值归一化(normalization) 1.2.均值方差归一化(standardization) 1.3.Sklearn中的归一化 2.缺失值处理 2.1.确定缺失值范围 2.2.填充缺失内容 2.2.1.平均值填充法 2.2.2.中位数填充法 2.2.3.条件平均值填充法 2.2.4.模型预测填充法 2.2.4.1.kNN 2.2.4.2.Regression 2.2.5.利用sklearn填补缺失值 3.处理分类型特征:编码与哑变量 4.处理连续型特征:二值化与分段 1.归一化 问题 :在量纲不同的情况下,不能反映样本中每一个特征的重要程度。 方案 :数据归一化,即标准化。把所有的数据都映射到同一个尺度(量纲)。 归一化可以提升模型精度,避免某一个取值范围特别大的特征对距离计算造成影响。(一个特例是决策树,对决策树不需要归一化,决策树可以把任意数据都处理得很好。) 数据的无量纲化可以是线性的,也可以是非线性的。线性的无量纲化包括 中心化 处理和 缩放 处理。中心化的本质是让所有记录减去一个固定值,即让数据样本数据平移到某个位置。缩放的本质是通过除以一个固定值,将数据固定在某个范围之中,取对数也算是一种缩放处理。 归一化之后的数据服从正态分布。 1.1.最值归一化(normalization) 把所有数据映射到0-1之间。使用范围

机器学习小组- 特征工程1

北慕城南 提交于 2020-03-17 02:22:47
归一化 把所有的数据都映射到同一个尺度(量纲)上。 最值归一化(normalization): 把所有数据映射到0-1之间。最值归一化的使用范围是特征的分布具有明显边界的(分数0~100分、灰度0~255),受outlier的影响比较大。 均值方差归一化(standardization): 把所有数据归一到均值为0方差为1的分布中。适用于数据中没有明显的边界,有可能存在极端数据值的情况。 特征工程 特征工程又包含了Data PreProcessing(数据预处理)、Feature Extraction(特征提取)、Feature Selection(特征选择)和Feature construction(特征构造)等子问题。 特征预处理 数值型特征无量纲化 无量纲化使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化和归一化。 1.某些算法要求样本具有零均值和单位方差; 2.需要消除样本不同属性具有不同量级时的影响。 3.归一化有可能提高精度; 4.数量级的差异将导致量级较大的属性占据主导地位,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要); 5.数量级的差异将导致迭代收敛速度减慢; 6.当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛; 7.依赖于样本距离的算法对于数据的数量级非常敏感。 数据标准化

机器学习之初识KNN算法——针对泰坦尼克号生存记录建模的两种方法

我只是一个虾纸丫 提交于 2020-03-16 09:46:41
KNN算法原理 本篇博客基于《机器学习实战》实现 算法原理简要概括,重在代码实现 k-近邻算法(kNN)的工作原理是:存在一个样本数据集合,称训练样本集,并且样本集中每个数据都存在标签,即样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似的数据(距离最近)的分类标签。 如图,图中绿点的标签是未知的,但已知它属于蓝方块和红三角二者其一,怎么判断出它属于哪一方呢? kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。 在上图实线圆圈内,红三角有两个,而蓝方块只有一个,所以它是红三角的可能性大;但在虚线圈内,红三角有两个,蓝方块却有三个,那么它是蓝方块的可能性就越大;所以对于kNN算法, k的取值不同 ,得出的结果可能也会不同,k的取值很大程度上决定了这个模型的准确率。 KNN算法步骤 收集数据:爬虫、公开数据源 数据清洗:处理缺失值、无关特征 导入数据,转化为结构化的数据格式 数据归一化、标准化 计算距离(欧氏距离最通用) 对距离升序排列,取前K个 判断测试数据属于哪个类别 计算模型准确率 KNN算法实现 其中 Pclass,Sex,Age,SibSp,Parch

条件随机场CRF HMM,MEMM的区别

孤街醉人 提交于 2020-03-14 03:45:47
http://blog.sina.com.cn/s/blog_605f5b4f010109z3.html 首先,CRF,HMM(隐马模型),MEMM(最大熵隐马模型)都常用来做序列标注的建模,像词性标注,True casing。但 隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择, 而最大熵隐马模型则解决了这一问题,可以任意的选择特征, 但由于其在每一节点都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见的问题(label bias),即凡是训练语料中未出现的情况全都忽略掉 ,而条件随机场则很好的解决了这一问题,他并不在每一个节点进行归一化,而是 所有特征进行全局归一化,因此可以求得全局的最优值。 目前,条件随机场的训练和解码的开源工具还只支持链式的序列,复杂的尚不支持,而且训练时间很长,但效果还可以。 这三个模型都可以用来做序列标注模型。但是其各自有自身的特点,HMM模型是对转移概率和表现概率直接建模,统计共现概率。而MEMM模型是对转移 概率和表现概率建立联合概率,统计时统计的是条件概率。MEMM容易陷入局部最优,是因为MEMM只在局部做归一化,而CRF模型中,统计了全局概率,在 做归一化时,考虑了数据在全局的分布,而不是仅仅在局部归一化,这样就解决了MEMM中的标记偏置的问题。 举个例子,对于一个标注任务,

Tensorflow BatchNormalization详解:1_原理及细节

久未见 提交于 2020-03-12 04:59:07
Batch Normalization: 原理及细节 觉得有用的话,欢迎一起讨论相互学习~ Follow Me 参考文献 吴恩达deeplearningai课程 课程笔记 Udacity课程 为了标准化这些值,我们首先需要计算出批数据中的平均值,如果你仔细看这些代码,你会发现这不是对输入的批数据计算平均值,而是对任意一个特定层的在传入非线性函数之前的输出求平均值。然后将其通过非线性函数后传递给下一层作为输入。 我们将平均值表示为 \(\mu_B\) ,是所有 \(x_i\) 值得和然后除以 \(x_i\) 的个数 \(m\) 。 \[ \mu_B \leftarrow \frac{1}{m}\sum_{i=1}^m x_i \] 然后我们需要计算方差或者均方差,用 \(\sigma_{B}^{2}\) 表示。如果你不熟悉数理统计,简单来说就是将每个 \(x_i\) 的值将其减去这个批次的平均值(先前我们计算过这个值并且用 \(\mu_B\) 表示)。这就是我们所说的对该值的偏差。我们将结果平方以得到平方偏差。将批次中所有数据的平方偏差求和再除以数值的个数即 \(m\) ,所得的这个平均值叫做平方偏差。 \[ \sigma_{B}^{2} \leftarrow \frac{1}{m}\sum_{i=1}^m (x_i - \mu_B)^2 \] 一旦我们有了均值和方差