稀疏表示

PCA,AE,VAE,RPCA,概率PCA之间的联系与区别

匿名 (未验证) 提交于 2019-12-02 23:43:01
AE 自编码器 代码:自编码器keras教程 是半监督的,自编码器是只有一层隐层节点,输入和输出具有相同节点数的神经网络 自动编码器输入的是X,我们的AE网络结构是X->H->X‘,我们的目的是让X’尽可能的等于X(X‘与X有相同维度),这样训练出来的H就可以用来表示或重构X。 用于压缩数据,但是没有泛化能力,因此不能作为生成模型 自动编码器与PCA的比较 自动编码器既能表征线性变换,也能表征非线性变换 ;而 PCA 只能执行线性变换 。 PCA可以直接得到最优的解析解,而AutoEncoders只能通过反向传播得到局部最优的数值解 。因为自动编码器的网络表征形式,所以可将其作为层用于构建深度学习网络。设置合适的维度和稀疏约束,自编码器可以学习到比PCA等技术更有意思的数据投影。 PCA PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征

稀疏数组(java实现)

家住魔仙堡 提交于 2019-12-01 02:05:29
1.稀疏数组 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: 1. 1记录数组一共有几行几列,有多少个不同的值 1.2把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 I 2.二维数组转稀疏数组的思路 2.1.遍历原始的二维数组,得到有效数据的个数sum 2.2.根据sum 就可以创建稀疏数组sparseArr int sum+1 2. 3.将二维数组的有效数据数据存入到稀疏数组 3.稀疏数组转原始的二维数组的思路 3.1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如 上面的chessAr2=int 11 3. 2.在读取稀疏数组后几行的数据,并赋给原始的二维数组即可. 4.应用实例 使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等)把稀疏数组存盘,并且可以从新恢复原来的二维数组数整体思路分析 public class SparseArray { public static void main(String[] args) { //创建二维数组 1表示黑色的 2表示蓝色的 0表示空 int chessarr1[][] = new int[11][11]; chessarr1[1][2] = 1; chessarr1[2][3] = 2; //遍历循环二维数组 System

CTR预估模型——FM、FFM、DeepFM

北战南征 提交于 2019-11-30 21:05:40
一、CTR(Click Through Rate,点击率)   点击率(click-through rate, CTR) 是点击特定链接的用户与查看页面,电子邮件或广告的总用户数量之比。它通常用于衡量某个网站的在线广告活动是否成功,以及电子邮件活动的有效性,是互联网公司进行流量分配的核心依据之一。   无论使用什么类型的模型,点击率这个命题可以被归纳到二元分类的问题,我们通过单个个体的特征,计算出对于某个内容,是否点击了,点击了就是1,没点击就是0。对于任何二元分类的问题,最后我们都可以归结到逻辑回归上面。 早期的人工特征工程 + LR(Logistic Regression):这个方式需要大量的人工处理,不仅需要对业务和行业有所了解,对于算法的经验要求也十分的高。 GBDT(Gradient Boosting Decision Tree) + LR:提升树短时这方面的第二个里程碑,虽然也需要大量的人工处理,但是由于其的可解释性和提升树对于假例的权重提升,使得计算准确度有了很大的提高。 FM-FFM:FM和FFM模型是最近几年提出的模型,并且在近年来表现突出,分别在由Criteo和Avazu举办的CTR预测竞赛中夺得冠军,使得到目前为止,还都是以此为主的主要模型占据主导位置。 Embedding模型可以理解为FFM的一个变体。   CTR预估技术从传统的Logistic回归

稀疏数组

≯℡__Kan透↙ 提交于 2019-11-30 15:10:51
什么是稀疏数组?   稀疏数组可以看作是普通数组的压缩,当普通数组只有少量有效数据时,可以使用稀疏数组的方式存储,从而达到节省空间的目的。 为什么要用稀疏数组?   因普通数组中只有少量有效数据,即会有大量无用数据占用空间,故使用稀疏数组以节省空间。 例如:int array[][] = new int[5][5];    array[1][1] = 1; array[1][2] = 2;     0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   如上定义5*5的二维数组array,只有两个有效数据1,2。其他均为默认值0,如果直接存储array,则会浪费5*5-2个空间。 这时候就可以使用稀疏数组的方式存储,先展示使用稀疏数组存储的数据结构 行 列 值 5 5 2 1 1 1 1 2 2   稀疏数组有(n+1)行3列,n=有效数据个数,其中第一行固定表示原二维数组有5行5列有效值有2个。后面n行依次表示原二维数组中的有效数据分别在第几行第几列及对应值 使用稀疏数组只保存有效数据,因此适用于原二维数组只有少量有效数据的情况,而如果原数组大部分数据为有效数据,再转为稀疏数组反而占用更多的空间(m行*n列*3) 如何实现稀疏数组?   1.将二维数组转为稀疏数组方法 1 public static int[][

从模型到应用,一文读懂因子分解机

拈花ヽ惹草 提交于 2019-11-29 07:49:19
作者丨gongyouliu 编辑丨Zandy 来源 | 大数据与人工智能(ID: ai-big-data) 作者在上篇文章中讲解了《 矩阵分解推荐算法 》,我们知道了矩阵分解是一类高效的嵌入算法,通过将用户和标的物嵌入低维空间,再利用用户和标的物嵌入向量的内积来预测用户对标的物的偏好得分。本篇文章我们会讲解一类新的算法: 因子分解机 ( Factorization Machine ,简称 FM ,为了后面书写简单起见,中文简称为 分解机 ),该算法的核心思路来源于矩阵分解算法,矩阵分解算法可以看成是分解机的特例 (我们在第三节1中会详细说明) 。分解机自从2010年被提出后,由于易于整合交叉特征、可以处理高度稀疏数据,并且效果不错,在推荐系统及广告CTR预估等领域得到了大规模使用,国内很多大厂(如美团、头条等)都用它来做推荐及CTR预估。 本篇文章我们会从 分解机简单介绍、分解机的参数估计与模型价值、分解机与其他模型的关系、分解机的工程实现、分解机的拓展、近实时分解机、分解机在推荐上的应用、分解机的优势 等8个方面来讲解分解机相关的知识点。期望本文的梳理可以让读者更好地了解分解机的原理和应用价值,并且尝试将分解机算法应用到自己的业务中。 一、分解机简单介绍 分解机 最早由Steffen Rendle于2010年在ICDM会议(Industrial Conference on

Python 的稀疏矩阵

六月ゝ 毕业季﹏ 提交于 2019-11-29 06:23:49
  什么是稀疏矩阵   简单的说,如果一个矩阵中大部分元素为0,就被称为稀疏矩阵。   对于稀疏矩阵而言,实际存储的数据项很少。如果在计算机中采用传统的二维数组(Python中用二维列表)来存储稀疏矩阵,就会浪费大量的内存空间来存储0。比如一个10000 X 10000的稀疏矩阵,只有一个元素非0,若采用传统的存储技术,将浪费太多的内存来存储无意义的0。   稀疏矩阵的存储   对于稀疏矩阵,我们只需要记住矩阵中非0元素的位置和值、以及系数矩阵的大小(行数和列数)这些有用信息即可。也就是说,我们可以用一个包含3列的二维数组存储稀疏矩阵中的非0项,记录非0项的所在行、所在列和值信息以及记录稀疏矩阵行数和列数信息。   例如对于下面的3X3稀疏矩阵:   0  0  0   0  0  0   3  0  7   我们用下面的压缩矩阵来存储稀疏矩阵:   3   3  2   2  0  3   2  2  7   上面的压缩矩阵中,第0行(也就是标黄的部分)存储稀疏矩阵的行数(3)、列数(3)和非0项数据的个数(2)。   从第1行开始,存储非0项所在的行数、所在的列数和值。每一行存储一个非0项的信息。   示例题目   题目描述   输入一个稀疏矩阵,打印稀疏矩阵和压缩后的结果。   输入/输出描述   输入描述:   输入矩阵的行数和列数,在输入每一个位置对应的值。  

多任务学习Multi-task-learning MTL

Deadly 提交于 2019-11-29 05:45:27
https://blog.csdn.net/chanbo8205/article/details/84170813 多任务学习(Multitask learning)是迁移学习算法的一种,迁移学习可理解为定义一个一个源领域source domain和一个目标领域(target domain),在source domain学习,并把学习到的知识迁移到target domain,提升target domain的学习效果(performance)。 多任务学习(Multi-task learning):由于我们的关注点集中在单个任务上,我们忽略了可能帮助优化度量指标的其它信息。具体来说,这些信息来自相关任务的训练信号。通过共享相关任务之间的表征,可以使我们的模型更好地概括原始任务。这种方法被称为多任务学习(MTL)。其也是一种归纳迁移机制,主要目标是利用隐含在多个相关任务的训练信号中的特定领域信息来提高泛化能力,多任务学习通过使用共享表示并行训练多个任务来完成这一目标。归纳迁移是一种专注于将解决一个问题的知识应用到相关的问题的方法,从而提高学习的效率。比如,学习行走时掌握的能力可以帮助学会跑,学习识别椅子的知识可以用到识别桌子的学习,我们可以在相关的学习任务之间迁移通用的知识。此外,由于使用共享表示,多个任务同时进行预测时,减少了数据来源的数量以及整体模型参数的规模,使预测更加高效。因此

图解Java数据结构之稀疏数组

浪尽此生 提交于 2019-11-28 15:03:39
在编程中,算法的重要性不言而喻,没有算法的程序是没有灵魂的。可见算法的重要性。 然而,在学习算法之前我们需要掌握数据结构,数据结构是算法的基础。 我在大学的时候,学校里的数据结构是用C语言教的,因为对C语言也不是很了解,所以掌握得不是特别好,在网上找的一些学习资料里也基本都是用C语言来进行数据结构的教学。 那么,从本篇文章开始,我将用Java语言来介绍数据结构,当然,数据结构过后就是算法。 线性结构和非线性结构 线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系; 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中存储的元素是连续的; 链式存储的线性表称为链表,链表中存储的元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息; 线性结构常见的有:数组、队列、链表和栈 非线性结构 非线性结构包括:二维数组、多维数组、广义表、树结构、图结构 稀疏数组 对数据结构有了一个初步的认识之后,我们开始对一些具体的数据结构进行详细的分析。 我们来看一个实际的需求: 这是一个五子棋的程序,有存盘退出和续上盘的功能,如下图,如何将下图的棋局进行保存呢? 那这个问题很简单,很多人可能会想到用二维数组来进行存储。 如上图,我们用0表示无子,1表示黑子,2表示蓝子,但是这个程序问题很大

K-SVD稀疏编码字典学习

≯℡__Kan透↙ 提交于 2019-11-27 23:22:53
1. 算法简介 K-SVD可以看做K-means的一种泛化形式,K-means算法总每个信号量只能用一个原子来近似表示,而K-SVD中每个信号是用多个原子的线性组合来表示的。 K-SVD通过构建字典来对数据进行稀疏表示,经常用于图像压缩、编码、分类等应用。 2. 主要问题 Y = DX Where Y∈R(n*N), D∈R(n*K), X∈R(k*N), X is a sparse matrix. N is number of samples; n is dimension of feature /dimension of every word in dictionary; K is the length of a coefficient/the number of atoms in the trained dictionary.. Y为要表示的信号,D为超完备矩阵(列数大于行数), X为系数矩阵,X与Y按列对应,表示D中元素按照Xi为系数线性组合为Y, 我们的目的是找到让X尽量稀疏的D 上面的式子本质上是相通的,只是表述形式不一样罢了。 寻找最优解(X最稀疏)是NP-Hard问题。 用追逐算法(Pursuit Algorithm)得到的次优解代替。 MatchingPursuit (MP) OrthogonalMatching Pursuit (OMP)

稀疏字典学习

偶尔善良 提交于 2019-11-27 16:13:15
typora-root-url: md_pic 字典学习(Dictionary Learning)和稀疏表示(Sparse Representation)在学术界的正式称谓应该是 稀疏字典学习 (Sparse Dictionary Learning)。该算法理论包含两个阶段:字典构建阶段(Dictionary Generate)和利用字典(稀疏的)表示样本阶段(Sparse coding with a precomputed dictionary)。这两个阶段(如下图)的每个阶段都有许多不同算法可供选择,每种算法的诞生时间都不一样,以至于稀疏字典学习的理论提出者已变得不可考。笔者尝试找了Wikipedia和Google Scolar都无法找到这一系列理论的最早发起人。 ​ 使用字典学习的目的:(1)是对于庞大数据集进行降维表示;(2)字典学习总是尝试学习蕴藏在样本背后最质朴的特征(假如样本最质朴的特征就是样本最好的特征),这两条原因同时也是这两年深度学习之风日盛的情况下字典学习也开始随之升温的原因。稀疏表示的本质:用尽可能少的资源表示尽可能多的知识,这种表示还能带来一个附加的好处,即计算速度快。 稀疏字典学习的Python实现 首先是各种工具包的导入和测试样例的导入 from time import time import matplotlib.pyplot as plt