迭代模型

推荐系统

懵懂的女人 提交于 2019-12-01 19:16:26
<div id="cnblogs_post_body" class="blogpost-body "> <blockquote> <p>58同城作为中国最大的分类信息网站,向用户提供找房子、找工作、二手车和黄页等多种生活信息。在这样的场景下,推荐系统能够帮助用户发现对自己有价值的信息,提升用户体验,本文将介绍58同城智能推荐系统的技术演进和实践。</p> </blockquote> <p>58同城智能推荐系统大约诞生于2014年(C++实现),该套系统先后经历了招聘、房产、二手车、黄页和二手物品等产品线的推荐业务迭代,但该系统耦合性高,难以适应推荐策略的快速迭代。58同城APP猜你喜欢推荐和推送项目在2016年快速迭代,产出了一套基于微服务架构的推荐系统(Java实现),该系统稳定、高性能且耦合性低,支持推荐策略的快速迭代,大大提高了推荐业务的迭代效率。此后,我们对旧的推荐系统进行了重构,将所有业务接入至新的推荐系统,最终成功打造了统一的58同城智能推荐系统。下面我们将对58同城智能推荐系统展开介绍,首先会概览整体架构,然后从算法、系统和数据三方面做详细介绍。</p> <p>整体架构首先看一下58同城推荐系统整体架构,一共分数据层、策略层和应用层三层,基于58平台产生的各类业务数据和用户积累的丰富的行为数据,我们采用各类策略对数据进行挖掘分析,最终将结果应用于各类推荐场景。</p>

机器学习中梯度下降法原理及用其解决线性回归问题的C语言实现

元气小坏坏 提交于 2019-12-01 18:22:07
本文讲梯度下降(Gradient Descent)前先看看利用梯度下降法进行监督学习(例如分类、回归等)的一般步骤: 1, 定义损失函数(Loss Function) 2, 信息流forward propagation,直到输出端 3, 误差信号back propagation。采用“链式法则”,求损失函数关于参数Θ的梯度 4, 利用最优化方法(比如梯度下降法),进行参数更新 5, 重复步骤2、3、4,直到收敛为止 所谓损失函数,就是一个描述实际输出值和期望输出值之间落差的函数。有多种损失函数的定义方法,常见的有均方误差(error of mean square)、最大似然误差(maximum likelihood estimate)、最大后验概率(maximum posterior probability)、交叉熵损失函数(cross entropy loss)。本文就以均方误差作为损失函数讲讲梯度下降的算法原理以及用其解决线性回归问题。在监督学习下,对于一个样本,它的特征记为x(如果是多个特征,x表示特征向量),期望输出记为t(t为target的缩写),实际输出记为o(o为output的缩写)。两者之间的误差e可用下式表达(为了节省时间,各种算式就用手写的了): 前面的系数1/2主要是为了在求导时消掉差值的平方项2。如果在训练集中有n个样本,可用E来表示所有样本的误差总和

配送交付时间轻量级预估实践

感情迁移 提交于 2019-12-01 07:49:44
1. 背景 可能很多同学都不知道,从打开美团App点一份外卖开始,然后在半小时内就可以从骑手小哥手中拿到温热的饭菜,这中间涉及的环节有多么复杂。而美团配送技术团队的核心任务,就是将每天来自祖国各地的数千万份订单,迅速调度几十万骑手小哥按照最优路线,并以最快的速度送到大家手中。 在这种场景下,骑手的交付时间,即骑手到达用户附近下车后多久能送到用户手中,就是一个非常重要的环节。下图是一个订单在整个配送链路的时间构成,时间轴最右部分描述了交付环节在整个配送环节中的位置。交付时间衡量的是骑手送餐时的交付难度,包括从骑手到达用户楼宇附近,到将餐品交付到用户手中的整个时间。 交付时间的衡量是非常有挑战的一件事,因为骑手在送餐交付到用户手中时会碰到不同的问题,例如:骑手一次送餐给楼宇内多个用户,骑手对于特定楼宇寻址特别困难,骑手在交付楼宇附近只能步行,老旧小区没有电梯,写字楼无法上楼,或者难以等到电梯等等。交付时间预估需要具备刻画交付难度的能力,在定价、调度等多个场景中被广泛使用。例如根据交付难度来确定是否调节骑手邮资,根据交付难度来确定是否调节配送运单的顺序,从而避免超时等等。总的来说,交付时间预估是配送业务基础服务的重要一环。 但是,交付时间预估存在如下的困难: 输入信息较少,且多为非数值型数据,目前能够被用来预估的仅有如下维度特征:交付地址、交付点的经纬度、区域、城市

集成学习个人学习总结

[亡魂溺海] 提交于 2019-12-01 05:49:18
说明 :本科普也是借助诸多集成学习文章学习总结而来。 集成学习 一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是CART决策树和神经网络。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法,第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法。 集成学习之boosting Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器。1. 根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器。2. 如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。 Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。 AdaBoost算法原理 Boosting需要解决如下几个问题:

Python连载38-协程、可迭代、迭代器、生产者消费者模型

末鹿安然 提交于 2019-11-30 02:21:30
一、生产者消费者模型 import multiprocessing from time import ctime def consumer(input_q): print("Into consumer:",ctime()) while True: #处理项 item = input_q.get() print("pull",item,"out of q")#此处替换为有用的工作 input_q.task_done()#发出信号通知任务完成 print("Out of consumer:",ctime()) #此句未执行,因为q.join()收集到四个task_done()信号后,主进程启动 def producer(sequence,output_q): print("Into producer:",ctime()) for item in sequence: output_q.put(item) print("put",item,"into_q") print("Out of producer:",ctime()) #建立进程 if __name__ == "__main__": q=multiprocessing.JoinableQueue() #运行消费者进程 cons_p = multiprocessing.Process(target=consumer,args=(q,)

Python:range 对象并不是迭代器

牧云@^-^@ 提交于 2019-11-29 23:41:35
简评: 迭代器(iterator)是惰性可迭代对象(lazy iterable),range 函数在 Python 3 中是一个惰性的可迭代对象,那么 range 是不是迭代器呢?为什么。 TLNR:Python 3 中的 range 对象(Python 2 中的 xrange 对象)是 lazy 的,但 range 对象却不是迭代器。 是的,这让人很困惑 当谈论 Python 中的迭代器(iterator)和可迭代对象(iterable)时,你很可能会听到有人重复 range 是迭代器的误解。我认为这是非常严重误解, 如果你认为 range 对象是迭代器,那么你关于「迭代器是如何运行」的心智模型还不够清楚。从某种意义上来说,range 和迭代器都是「惰性」的,但它们是以相当不同的方式实现「惰性」的 什么是迭代器(iterator) 在 Python 中,可迭代对象就是你可以迭代的任何东西,而迭代器就是实际迭代的东西。 Iter-ables are able to be iterated over. Iter-ators are the agents that perform the iteration. 可以使用 iter 函数从任何可迭代对象中获取迭代器: 一旦有了迭代器,可以用它做的唯一的事情就是获得它的下一个元素: 如果没有更多的元素了, 则会抛出一个 stop

浅谈并发与并行(二)

柔情痞子 提交于 2019-11-29 18:34:30
上文 讲解了.NET中的采用Task可以实现任务的并行。除了任务的并行之外,还有数据的并行。和任务的并行不同,数据的并行是指并行的源头不是算法的代码,而是算法操作的数据的本身,TPL ( Task Parallel Library )中提供了几个数据并行的API. 一 数据的并行 1.1 Parallel.For 和Parallel.ForEach for 和foreach语句也适合进行并行化。实际上,随着并行计算的流行,对这种循环遍历进行并行化也有过很多种尝试。这些方法包括对在编程语言进行扩充等,比如C++里面的 OpenMP 标准。C#并行类库(Task Parallel Library, TPL)通过提供一些API实现了数据并行化功能,这就是Parallel.For和Parallel.ForEach方法,分别对应平常用到的for和foreach。 回到 上文 中的遍历数组查找素数的方法中,当时我们是这样写的。 for (int number = start; number < end; ++number) { if (IsPrime(number)) { primes.Add(number); } } 将上面的代码转换成并行遍历如下: Parallel.For(start, end, number => { if (IsPrime(number)) { lock

动手学深度学习(MXNet)4:优化算法

你。 提交于 2019-11-29 06:30:16
优化算法通常只考虑最小化目标函数。其实,任何最大化问题都可以很容易地转化为最小化问题,只需令目标函数的相反数为新的目标函数即可。 由于优化算法的目标函数通常是一个基于训练数据集的损失函数,优化的目标在于降低训练误差。而深度学习的目标在于降低泛化误差。为了降低泛化误差,除了使用优化算法降低训练误差以外,还需要注意应对过拟合。 深度学习中绝大多数目标函数都很复杂。因此,很多优化问题并不存在解析解,而需要使用基于数值方法的优化算法找到近似解,即数值解。本书中讨论的优化算法都是这类基于数值方法的算法。为了求得最小化目标函数的数值解,我们将通过优化算法有限次迭代模型参数来尽可能降低损失函数的值。 两个挑战 ,即局部最小值和鞍点。 梯度下降和随机梯度下降 def train_2d(trainer): # 本函数将保存在d2lzh包中方便以后使用 x1, x2, s1, s2 = -5, -2, 0, 0 # s1和s2是自变量状态,本章后续几节会使用 results = [(x1, x2)] for i in range(20): x1, x2, s1, s2 = trainer(x1, x2, s1, s2) results.append((x1, x2)) print('epoch %d, x1 %f, x2 %f' % (i + 1, x1, x2)) return results

敏捷软件开发与传统软件开发的对比

点点圈 提交于 2019-11-29 05:07:44
敏捷软件开发与传统软件开发的对比 最早了解敏捷开发是通过大二的一次博雅课堂,一位在百度工作的北航学长跟我们分享了他近年来从事敏捷开发的经历。印象最深的一句话是一个延迟3个月交付100%功能的软件和一个按时交付75%核心功能的软件,敏捷软件开发者更愿意选择后者。本学期的软件工程基础课又向我们讲授了传统软件开发,经过课上和课后的学习,对于敏捷软件开发和传统软件开发有了浅显的认识和理解。由于课上学习的重点是传统软件开发,所以课下对敏捷软件开发进行了更多的涉猎,本文以敏捷软件开发为主体,来分析其与传统软件开发的对比。 敏捷软件开发与传统开发方法相比具有很大的不同,其特点是适应性而不是预测性,强调沟通和反馈,开发团队不仅包括开发人员,还包括管理人员和客户。它鼓励团队成员的相互交流通过反馈机制尽早纠正软件中的错误,提高开发效率,同时为需求的调整提供更多机会,保证软件向正确的方向发展。 传统软件开发如瀑布模型强调预见性,严格遵循计划、分析、设计、编码、测试和维护等几个阶段。瀑布模型开发各阶段间具有严格的顺序性和依赖性,必须等到前一阶段的工作结束后才能开始下一阶段的工作,前一阶段的输出文档是后一阶段的输入文档,只有前一阶段的输出文档完全正确,后一阶段才能获得正确的结果。 对敏捷联盟宣言的理解 1.个体和交互胜过过程和工具,强调软件开发必须发挥人的积极性和创造性,更看重人的沟通和团队的力量; 2

机器学习之SVM支持向量机笔记

有些话、适合烂在心里 提交于 2019-11-29 02:08:13
数学理论部分 1.svm支持向量机是什么? 如下图所示,SVM的目标就是寻找一条图中的黑线,使得这条线到两个分类的距离最大,即寻找最大间隔 2.超平面:我们定义那条黑线为超平面,函数公式为 ƒ(x)= w T x + b ,当ƒ(x)= w T x + b=0时为黑线处,大于或者小于分别表示一个类别。 3.分类:根据超平面我们可以进行如下定义,完成分类 【注】我们将类别 y i 定义为正负一是为了方便计算边界条件 ,就拿1分类举例,因为y i 为1,所以 yi(w T x + b )>=1仍然成立,这个分类的边界为 yi(w T x + b)=1,我们顺利的将标签y与特征x均放入了一个公式当中。 4.距离计算: 样本点到超平面距离为 ,样本之间的间隔为 4.1推导样本点到平面距离: 方法一: , ,两个公式联立可得 ,||w||为范数,是所有元素平方和再开方,w是一个方向向量 方法二:利用中学的距离公式,点到直线的距离公式 ,现在已知直线是ƒ(x)= w T x + b,所以 4.2推导:从3中可以知道分类的边界是 yi(w T x + b)=1,而 yi=1,所以w T x + b=1,于是单边间距为 ,总间距为 5.拉格朗日乘数法:对于多元函数 ƒ(x,y)在约束条件φ(x,y)情况下求极值可以使用拉格朗日乘数法,首先加入一个拉格朗日乘数λ,构造出拉格朗日函数 ,对 x、y