场感知分解机(Field-aware Factorization Machine ,简称FFM)在FM的基础上进一步改进,在模型中引入类别的概念,即field.将同一个field的特征单独进行one-hot,因此在FFM中,每一维特征都会针对其他特征的每个field,分别学习一个隐变量,该隐变量不仅与特征相关,也与field相关.假设样本的n个特征属于f个field,那么FFM的二次项有nf个隐向量.而在FM模型中,每一维特征的隐向量只有一个.FM可以看做FFM的特例,把所有特征都归属到一个fi…
LFM算法核心思想是通过隐含特征(latent factor)联系用户兴趣和物品,找出潜在的主题和分类.LFM(latent factor model)通过如下公式计算用户u对物品i的兴趣: \[ Preference(u,i) = r_{ui} = {p_u}^T q_i = \sum_{f=1}^F p_{u,k} q_{i,k} \] 定义\(P\)矩阵是user-class矩阵,矩阵值\(P_{ij}\)表示的是user \(i\)对class \(j\)的兴趣度:\(Q\)矩阵式cla…
wide&deep在个性化排序算法中是影响力比较大的工作了.wide部分是手动特征交叉(负责memorization),deep部分利用mlp来实现高阶特征交叉(负责generalization),wide部分和deep部分joint train. Deep&Cross Network模型我们下面将简称DCN模型,对比Wide & Deep ,不需要特征工程来获得高阶的交叉特征.对比 FM 系列的模型,DCN 拥有更高的计算效率并且能够提取到更高阶的交叉特征. 一个DCN模型从嵌入…
FM通过对于每一位特征的隐变量内积来提取特征组合,最后的结果也不错,虽然理论上FM可以对高阶特征组合进行建模,但实际上因为计算复杂度原因,一般都只用到了二阶特征组合.对于高阶特征组合来说,我们很自然想到多层神经网络DNN. DeepFM目的是同时学习低阶和高阶的特征交叉,主要由FM和DNN两部分组成,底部共享同样的输入.模型可以表示为: \[ \hat{y} = sigmoid(y_{FM}+y_{DNN}) \]…
Dijkstra算法 Dijkstra算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 注意该算法要求图中不存在负权边. 首先我们来定义一个二维数组Edge[MAXN][MAXN]来存储图的信息. 这个图的Edge数组初始化以后为 我们还需要用一个一维数组dis来存储1号顶点到其余各个顶点的初始路程,如下. 这个dis数组中存的是最短路的估计值. 通过Dijkstra算法来松弛后,dis存的为从初始点到各点的精确值(最短路径)了. Dijkstra算法实现如下(以HDU1548为例…
因子分解机(Factorization Machine,简称FM)算法用于解决大规模稀疏数据下的特征组合问题.FM可以看做带特征交叉的LR. 理论部分可参考FM系列,通过将FM的二次项化简,其复杂度可优化到\(O(kn)\).即: \[ \hat y(x) = w_0+\sum_{i=1}^n w_i x_i +\sum_{i=1}^n \sum_{j=i+1}^n ⟨vi,vj⟩ x_i x_j \\ =w_0+\sum_{i=1}^n w_i x_i + \frac{1}{2} \sum_{…
协同过滤推荐(Collaborative Filtering Recommendation)主要包括基于用户的协同过滤算法与基于物品的协同过滤算法. 下面,以movielens数据集为例,分别实践这两种算法. movielens数据集包含四列,[用户ID|电影ID|打分|时间戳],根据用户的历史评分向用户召回电影候选集. UserCF 基于用户的协同过滤算法主要包括两个步骤. (1) 找到和目标用户兴趣相似的用户集合. (2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户…
将用户行为表示为二分图模型.假设给用户\(u\)进行个性化推荐,要计算所有节点相对于用户\(u\)的相关度,则PersonalRank从用户\(u\)对应的节点开始游走,每到一个节点都以\(1-d\)的概率停止游走并从\(u\)重新开始,或者以\(d\)的概率继续游走,从当前节点指向的节点中按照均匀分布随机选择一个节点往下游走.这样经过很多轮游走之后,每个顶点被访问到的概率也会收敛趋于稳定,这个时候我们就可以用概率来进行排名了. 在执行算法之前,我们需要初始化每个节点的初始概率值.如果我们对用户…
ContentBased算法的思想非常简单:根据用户过去喜欢的物品(本文统称为 item),为用户推荐和他过去喜欢的物品相似的物品.而关键就在于这里的物品相似性的度量,这才是算法运用过程中的核心. CB的过程一般包括以下三步: 物品表示(Item Representation):为每个item抽取出一些特征(也就是item的content了)来表示此item: 特征学习(Profile Learning):利用一个用户过去喜欢(及不喜欢)的item的特征数据,来学习出此用户的喜好特征(profi…
什么是最小生成树(Minimum Spanning Tree) 每两个端点之间的边都有一个权重值,最小生成树是这些边的一个子集.这些边可以将所有端点连到一起,且总的权重最小 下图所示的例子,最小生成树是{cf, fa, ab} 3条边 Kruskal算法 用到上一篇中介绍的不相交集合(并查集) 首先,定义V是端点的集合,E是边的集合,A为要求的最小生成树集合 初始A为空集合,每个端点都作为单独的不相交集合 将所有边根据其权重进行排序 对每条边(v1, v2),如果其两个端点数据不同的不相交集,则…
Recursive division method        Mazes can be created with recursive division, an algorithm which works as follows: Begin with the maze's space with no walls. Call this a chamber. Divide the chamber with a randomly positioned wall (or multiple walls)…
1. 什么是FFM? 通过引入field的概念,FFM把相同性质的特征归于同一个field,相当于把FM中已经细分的feature再次进行拆分从而进行特征组合的二分类模型. 2. 为什么需要FFM? 在传统的线性模型中,每个特征都是独立的,如果需要考虑特征与特征之间的相互作用,可能需要人工对特征进行交叉组合.非线性SVM可以对特征进行核变换,但是在特征高度稀疏的情况下,并不能很好的进行学习.由于推荐系统是一个高度系数的数据场景,由此产生了FM系列算法,包括FM,FFM,DeepFM等算法. 3.…
在矩阵分解在协同过滤推荐算法中的应用中,我们讨论过像funkSVD之类的矩阵分解方法如何用于推荐.今天我们讲另一种在实际产品中用的比较多的推荐算法:贝叶斯个性化排序(Bayesian Personalized Ranking, 以下简称BPR),它也用到了矩阵分解,但是和funkSVD家族却有很多不同之处.下面我们来详细讨论. 1.  BPR算法使用背景 在很多推荐场景中,我们都是基于现有的用户和商品之间的一些数据,得到用户对所有商品的评分,选择高分的商品推荐给用户,这是funkSVD之类算法的…
java排序算法(二) 直接选择排序 直接选择排序排序的基本操作就是每一趟从待排序的数据元素中选出最小的(或最大的)一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,它需要经过n-1趟比较,算法不稳定,o(1)的额外的空间,比较的时间复杂度是o(n^2),交换的时间复杂度是o(n),并不是自适应的..在大多数情况下不推荐使用.只有在希望减少交换次数的情况下可以用. 基本思想 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果 1.初始状态:无序区为R[1,n]…
姊妹篇: 深入浅出KNN算法(一) 原理介绍 上次介绍了KNN的基本原理,以及KNN的几个窍门,这次就来用sklearn实践一下KNN算法. 一.Skelarn KNN参数概述 要使用sklearnKNN算法进行分类,我们需要先了解sklearnKNN算法的一些基本参数,那么这节就先介绍这些内容吧. def KNeighborsClassifier(n_neighbors = 5, weights='uniform', algorithm = '', leaf_size = '30', p =…
https://blog.csdn.net/john_xyz/article/details/78933253 目录目录CTR预估综述Factorization Machines(FM)算法原理代码实现Field-aware Factorization Machines(FFM)算法原理代码实现Deep FM算法原理代码实现参考文献CTR预估综述点击率(Click through rate)是点击特定链接的用户与查看页面,电子邮件或广告的总用户数量之比. 它通常用于衡量某个网站的在线广告活动是否…
java讲讲几种常见的排序算法(二) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 堆排序 思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点(大顶堆反之). 构建完一个小顶堆后,开始排序. 将最后一个节点和第一个节点交换位置(根节点是最小的,最小的顶点放到了后面),交换后进行调整,保持小顶堆(次小的顶点到了根节点). 依次执行下去,这样每一次交换将最小的顶点的放到了最后,所以最后数组会从大到小排列. public static void…
java排序算法(二) 二.改进排序算法 2.1希尔排序 定义:希尔排序(ShellSort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. 常用的h序列(增量)由Knuth提出,该序列从1开始,通过如下公式产生:h = 3 * h +1 反过来程序需要反向计算h序列,应该使…
机器学习K近邻算法的实现主要是参考<机器学习实战>这本书. 一.K近邻(KNN)算法 K最近邻(k-Nearest Neighbour,KNN)分类算法,理解的思路是:如果一个样本在特征空间中的K个最相似(即特征空间最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. 我们采用一个图来进行说明(如下): 图中的蓝色小正方形和红色的小正方形属于两类不同的样本数据,图正中间的绿色的圆代表的是待分类的数据.现在我们可以根据K最近邻算法来判断绿色的圆属于哪一类数据? 如果K=3,绿色圆点的…
在上一篇博客中,我们一起学习了随机迷宫算法,在本篇博客中,我们将一起了解一下寻路算法中常用的A*算法. 通常情况下,迷宫寻路算法可以使用深度优先或者广度优先算法,但是由于效率的原因,不会直接使用这些算法,在路径搜索算法中最常见的就是A*寻路算法.使用A*算法的魅力之处在于它不仅能找到地图中从A到B的一条路径,还能保证找到的是一条最短路径,它是一种常见的启发式搜索算法,类似于Dijkstra算法一样的最短路径查找算法,很多游戏应用中的路径搜索基本都是采用这种算法或者是A*算法的变种. 下面我们来了…
一.问题描述 凸集(Convex Set): 任意两点的连线都在这个集合内的集合就是一个凸集.             ⒈对于一个集合D,D中任意有限个点的线性组合的全体称为D的凸包.             ⒉对于一个集合D,所有包含D的凸集之交称为D的凸包(由此定义可以想到分治算法).         可以证明,上述两种定义是等价的.点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内.下图中由红色线段表示的多边形就是点集Q={p0,p1,...…
机器学习算法实践:Platt SMO 和遗传算法优化 SVM 之前实现了简单的SMO算法来优化SVM的对偶问题,其中在选取α的时候使用的是两重循环通过完全随机的方式选取,具体的实现参考<机器学习算法实践-SVM中的SMO算法>.(http://pytlab.github.io/2017/09/01/机器学习算法实践-SVM中的SMO算法/) 本文在之前简化版SMO算法的基础上实现了使用启发式选取α对的方式的Platt SMO算法来优化SVM.另外由于最近自己也实现了一个遗传算法框架GAFT,便…
决策树是既可以作为分类算法,又可以作为回归算法,而且在经常被用作为集成算法中的基学习器.决策树是一种很古老的算法,也是很好理解的一种算法,构建决策树的过程本质上是一个递归的过程,采用if-then的规则进行递归(可以理解为嵌套的 if - else 的条件判断过程),关于递归的终止条件有三种情形: 1)当前节点包含的样本属于同一类,则无需划分,该节点作为叶子节点,该节点输出的类别为样本的类别 2)该节点包含的样本集合为空,不能划分 3)当前属性集为空,则无法划分,该节点作为叶子节点,该节点的输出…
在“跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题”一文中介绍了舞蹈链(Dancing Links)算法求解精确覆盖问题. 本文介绍该算法的实际运用,利用舞蹈链(Dancing Links)算法求解数独 在前文中可知,舞蹈链(Dancing Links)算法在求解精确覆盖问题时效率惊人. 那利用舞蹈链(Dancing Links)算法求解数独问题,实际上就是下面一个流程 1.把数独问题转换为精确覆盖问题 2.设计出数据矩阵 3.用舞蹈链(Dancing Links)算法…
支持向量机SVM算法实践 利用Python构建一个完整的SVM分类器,包含SVM分类器的训练和利用SVM分类器对未知数据的分类, 一.训练SVM模型 首先构建SVM模型相关的类 class SVM: def __init__(self, dataSet, labels, C, toler, kernel_option): self.train_x = dataSet # 训练特征 self.train_y = labels # 训练标签 self.C = C # 惩罚参数 self.toler…
出处:http://www.cnblogs.com/grenet/p/3163550.html 在“跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题”一文中介绍了舞蹈链(Dancing Links)算法求解精确覆盖问题. 本文介绍该算法的实际运用,利用舞蹈链(Dancing Links)算法求解数独 在前文中可知,舞蹈链(Dancing Links)算法在求解精确覆盖问题时效率惊人. 那利用舞蹈链(Dancing Links)算法求解数独问题,实际上就是下面一个流程 1.…
系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.背景 1.1 命名 Paxos,最早是Leslie Lamport 用Paxos岛的故事模型进行描述,而得以命名.这位大神原来是学数学的,最终变成了计算机科学家,在2013年获得图灵奖...附上美照: 1.2 Paxos问题 Paxos问题是指分布式的系统中存在故障(crash fault),但不存在恶意(corrupt)节点的场景(即可能…
ref : https://dsqiu.iteye.com/blog/1707383   本文内容框架: §1 鸽巢排序(Pigeonhole) §2 桶排序(Bucket Sort)   §3 基数排序(Radix Sort) §4 计数排序(Counting Sort) §5 Proxmap Sort §6 珠排序(Bead Sort) §7 小结 本文介绍的排序算法是基于分配.收集的排序算法,分配排序的基本思想:排序过程无须比较关键字,而是通过"分配"和"收集"…
作者:个推高级数据工程师 晓骏 众所周知,金融是数据化程度最高的行业之一,也是人工智能和大数据技术重要的应用领域.随着大数据收集.存储.分析和模型技术日益成熟,大数据技术逐渐应用到金融风控的各个环节.个推作为专业的数据智能服务商,拥有海量数据资源,在智慧金融领域也推出了相应的数据解决方案-个真,为金融客户提供智能反欺诈.多维信贷风险评估和高意愿用户智能筛选等全流程的数据服务,助力各金融机构全面提升风控能力.本文将围绕大数据风控,结合个推实践,介绍金融风控机器学习的基本流程.算法实践和产品化建设等…
写在前面:上一篇当时是非常简单的了解一下A*,昨天还有一些问题没解决,就暂时把自己查阅的文坛摘抄了过来(毕竟人家写的比我要好的多 :> ) 今天终于解决了,就又写了这一篇,正好我自己再梳理一遍,把Unity的实现也记录一下(Unity版本:2019.3.7.f1) ============================================================================================================== 一.Unit…