跳至主要内容

博文

目前显示的是 六月, 2016的博文

SimRank 算法开发

#### 输入数据 * 带权二分图 * 节点总数:500w * 边数:7000w * 分布:          * 二分图分为A、B两组数据(原始数据并没有区分)      * A组节点的出度符合长尾效应,类似于20%节点用于全部出度的80% * 数据格式:((u, v), value)      * u: Int,节点ID      * v: Int, 节点ID      * value: Double, 边权 #### 输出数据 * A组节点相互间的相似度,B组节点相互间的相似度 #### 算法 * SimRank      #### 计算过程 * 根据公式,可以使用矩阵运算迭代计算相似矩阵 * L:带权邻接矩阵 * S:相似矩阵 * 伪代码                     NL <= L列规范化           S <= 初始化为单位矩阵           迭代计算 {                S(k) <= NL * S(k-1) * L^T           }        ...

基于Spark的机器学习算法开发和调优

SimRank 1. 算法介绍和原理 1.1 简介 simrank算法是计算相似度的算法,它的作用和协同过滤相似,我们可以使用这个算法来挖掘商品之间的相似度。 图1 1.2 算法原理 simrank是一个迭代算法,算法迭代过程使用如下公式: 公式1 S(a, b)——表示(a, b)的相似度 C——表示衰减参数 I(a)——表示结点a的入度数 从公式可以看出,两个结点之间的相似度是从与它们相邻点的相似度累加而获得的。现在设n为结点数,e为一个结点的邻接边数,则每一轮迭代的时间复杂度都为O(n^2 * e^2)。当结点数目达到100万个,边数满足幂律分布的时候,计算量将会相当巨大,因此我们需要一些并发计算工具来实现这个算法。这里我们使用了Spark,原因是Spark十分适合做迭代算法的计算,另外编写Spark作业的代码量相当少。 2. 矩阵相乘 从simrank的公式可以看出,simrank的计算可以拆分成两个矩阵相乘的过程。 公式2 S——相似矩阵 L——邻接矩阵 N(L)——对矩阵L进行列规范化 根据上面的公式变形,我们就可以使用并发的矩阵相乘计算方法对simrank的计算并发化。 2.1 k行(列)作为一个分块 图2 第一次矩阵相乘的时间复杂度为O(e),空间复杂度为O(n + e),shuffle空间O(n^2 * e) 第二次矩阵相乘的时间复杂度为O(e),空间复杂度为O(n + e),shuffle空间O(n^2 * e) 在Spark计算中,每个分块会串行计算若干组切分,Spark的分块数不能太大,这样会导致Shuffle产生的文件数变多,后面拉取shuffle数据的过程也比较慢。因此这里的单机时间和空间复杂度都要乘上一个k(表示每个分块的大小),变成O(k*e)和O(k*(n+e)),而shuffle的空间复杂度不变。由于分块不能过大,那么k的数值就会变大,从而导致计算过程中,很多机器都会因内存不足而挂掉。 2.2 子矩阵切分 由于这样的拆分方法会导致单机的空间复杂度上升,于是有了这个子矩阵拆分的方法。我们把一个n*n矩阵切分成多个m*m的子矩阵。这样拆分之后,我们的程序又变成单机版的矩阵相乘了,在这样的矩阵相乘中,里面每个元素就的相乘和相加都变成...

app store发布检测项

一、发布包打包流程: http://soulwithmobiletechnology.blogspot.com/2011/03/how-to-create-distribution-build-with.html 我们的应用需要做的是: (1)程序使用发布时的bundle identifier (2)增加一个 Distribution 的配置项 (3)Xcode->build Setting->code signing选择"iphone distribution:Taobao(China) Software CO.,LTD (4)product name 选项是app store显示的名字 (5)打包edit scheme -> 选iOS Device, 选Distribute, 选Archive -> 菜单Product -> Archive (6)看到的.app,用于测试(ipa),直接压缩为zip后可用于发布。 验证和发布,都使用iTunes Connect进行,初次发布会进行应用信息填写。 后面附上的文档有详细介绍iTunes Connect的使用 二、注意事项 (1)代码: git版本是不是与发布的相同,是不是 App Store 的branch,branch有没有合并master中的代码 如果需要网络连接,在没有网络的情况下要告知用户 活动指示图标不能转个没完没了 应用里不能存在已经作废的和未来版本发布有关的按钮和功能 图标尺寸:57,72(ipad),114,512 提供各种尺寸的图标:29(search),58,57,114(iphone),72 (iPad),144(Retina),50,100(ipad search),1024,在App Store中显示的应用图标,1024X1024的高质量的JPEG,TIFF或PNG图像格式。不支持ZIP压缩的TIFF格式。 不同尺寸的图标都包含同样的内容 是否只分享新浪微博 切换到线上状态 服务器url配置,是够全部为线上 服务器是否已经上线 TTID TOP_APPKEY TOP_APPSECRET 关闭所有日志入口 (2)配置: info...

objective-c 备忘

GCD (1)后台长时间执行应该用什么队列: dispatch_async ( dispatch_get_global_queue ( DISPATCH_QUEUE_PRIORITY_DEFAULT ,   0 ),^{…}); (2)执行完后台任务需要用什么队列渲染界面 dispatch_get_main_queue () 推送通知入口 - ( BOOL )application:( UIApplication   *)application didFinishLaunchingWithOptions:( NSDictionary   *)launchOptions - ( void )application:( UIApplication   *)application didReceiveRemoteNotification:( NSDictionary   *)userInfo 有什么区别? (1)第一次启动应用,没有出现过的界面还没有执行过viewDidLoad等方法 (2)已经启动应用 界面生命周期: 单例写法 +( NSObject  *)sharedInstance {       static  NSObject  *sharedInstance = nil;     static dispatch_once_t oncePredicate;     dispatch_once(&oncePredicate, ^{         sharedInstance = [[ NSObject alloc ] init];         //其它的初始化...     });     return sharedInstance; } 这个方法是利用GCD的官方写法,注意多线程访问而造成的产生多个对...

ios开发需要回答的问题

1)如何处理异步网络事件  2)用过多线程的Core Data吗,使用的哪种方法 3)用过Core Animation哪种动画  4)用过Core Graphics吗?(如果是Mac 开发者,答案应该是响亮的YES) 5)你曾经给Apple的framework提过issue么 6)NSNotification和KVO的用法和区别,它们的使用场景 7)如何使用NSOperationQueue 8)讲讲自己使用CoreText的经验 9)后台线程如何使用NSURLConnection 10)使用block应该注意的地方 11)曾经创建过framework或者library么

拉格朗日乘数 - 维基百科,自由的百科全书

2013年维基媒体国际会议 正式会议于8月11日在香港闭幕。 [ 关闭 ] 拉格朗日乘数 [ 编辑 ] 维基百科,自由的百科全书 微积分学 函数  ·  导数  ·  微分  ·  积分 显示▼ 基础概念 显示▼ 一元 微分 显示▼ 一元积分 显示▼ 多元微积分 显示▼ 微分方程 显示▼ 数学家 查  · 论  · 编 图1:绿线标出的是约束 g ( x , y ) =  c 的点的轨迹。蓝线是 f 的等高线。箭头表示斜率,和等高线的法线平行。 在 数学 最优化 问题中, 拉格朗日乘数法 (以数学家 约瑟夫·拉格朗日 命名)是一种寻找 变量 受一个或多个条件所限制的多元 函数 的 极值 的方法。这种方法将一个有 n  个变量与 k  个约束条件的最优化问题转换为一个有 n  +  k 个变量的 方程 组的极值问题,其变量不受任何约束。这种方法引入了一种新的标量 未知数 ,即 拉格朗日乘数 :约束方程的 梯度 (gradient)的 线性组合 里每个向量的系数。 简单举例: 最大化  受限于  引入新变量拉格朗日乘数 ,即可求解下列拉格朗日方程 此方法的证明牵涉到 偏微分 , 全微分 或 链法 ,从而找到能让设出的隐函数的微分为零的未知数的值。 目录  [ 隐藏 ]  1   介绍 2   拉格朗日乘数的运用方法 3   例子 3.1   很简单的例子 3.2   另一个例子 4   经济学 5   参考 6   对外链接 介绍 [ 编辑 ] 微积分中最常见的问题之一是求一个函数的极大极小值(极值)。但是很多时候找到极值函数的显式表达是很困难的,特别是当函数有先决条件或约束时。拉格朗日乘数则提供了一个非常便利方法来解决这类问题,而避开显式地引入约束和求解外部变量。 先看一个二维的例子:假设有函数: ,要求其极值(最大值/最小值)...