- 博客(32)
- 收藏
- 关注
原创 学习排序算法(二):Pairwise方法之RankNet
学习排序算法(二):Pairwise方法之RankNet 前面一篇博文介绍的Ranking SVM是把LTR问题转化为二值分类问题,而RankNet算法是从另外一个角度来解决,那就是概率的角度。1. RankNet的基本思想 RankNet方法就是使用交叉熵作为损失函数,学习出一些模型(例如神经网络、决策树等)来计算每个pair的排序得分,学习模型的过程可以使用梯度下降法。
2014-12-24 15:30:45 25619 4
原创 学习排序算法(二):Pairwise方法之Ranking SVM
学习排序算法(二):Pairwise方法之Ranking SVM 1. Pairwise方法的基本思想 Pairwise考虑了文档顺序的关系。它将同一个query的相关文档其中起来,把任意两个文档组成一个pair。我们研究就是以这个pair文档对来研究的。2. Ranking SVM
2014-12-24 15:08:15 13318
原创 学习排序算法简介
学习排序算法简介 学习排序(Learning to Rank, LTR)是一类基于机器学习方法的排序算法。 传统经典的模型,例如基于TFIDF特征的VSM模型,很难融入多种特征,也就是除了TFIDF特征之外,就无法融入其他种类的特征了。 而机器学习的方法很容易融合多种特征,而且有成熟深厚的理论基础,参数也是通过迭代计算出来的,有一套成熟理论来解决稀疏、过拟合等问题。LTR方法大致可以分成三类:1) Pointwise 单文档方法2) Pairwise 文档对方法
2014-12-24 09:35:27 4093
原创 象棋中的将帅互斥问题(二)——单个变量实现多层循环
象棋中的将帅互斥问题(二)——单个变量实现多层循环 《编程之美》上面对这个问题还提供了一种巧妙的方法,它没有使用bit存储的思想来减少空间的使用。而是使用了另外一项技术:运用单个变量实现多层循环。这篇博客就来详细说一下这个技术~ 这道题目需要用一个byte的大小,来实现9*9两层循环。我们知道假如令value=9*9,那么value%9就会得到1~9的变化范围,value/9又是另外一个1~9的变化范围,这样我们就可以巧妙实现两层循环。 但是,我们想实现多层循环呢?比如
2014-12-23 14:26:07 900
原创 象棋中的将帅互斥问题(一)——使用bit存储
象棋中的将帅互斥问题——使用bit存储 1. 问题描述和分析 这道题目是编程之美放上面的一个游戏,其中用到了下面几个问题:如何使用bit存储数值,要知道一个byte可以放256的数;如何使用位域的思想实现储存
2014-12-23 10:39:46 764
原创 判断一个数是否为平方数
判断一个数是否为平方数 1. 题目描述 师兄面试的题目:给定一个数N,如何判断N时候为另一个数的平方,即是否为平方数。
2014-12-23 09:47:32 15642 3
原创 理解GBDT算法(一)——理论
这篇讲到的GBDT的基本思想是“积跬步以至千里”!也就是说我每次都只学习一点,然后一步步的接近最终要预测的值(完全是gradient的思想~)。换句话来说,我们先用一个初始值来学习一棵决策树,叶子处可以得到预测的值,以及预测之后的残差,然后后面的决策树就要基于前面决策树的残差来学习,直到预测值和真实值的残差为零。最后对于测试样本的预测值,就是前面许多棵决策树预测值的累加。整个过程都是每次学习一点(真实值的一部分),最后累加,所以叫做“积跬步以至千里”!
2014-12-16 10:32:18 29994 8
原创 STL容器(四)——hash_map
STL容器(四)——hash_map 1. hash_map简介 hash_map和前面介绍的map既有很多的联系,也要必须要了解的区别~ hash_map的用法和map是一样的,提供了insert,size,count等操作,并且里面的元素也是以pair类型来存贮的。虽然对外部提供的函数和数据类型是一致的,但是其底层实现是完全不同的,map底层的数据结构是红黑树rb_tree;而hash_map却是哈希表hash_table来实现的。 我们可以通过一段小程序来了解h
2014-12-16 09:13:07 1371
原创 HDFS中的命令行
HDFS中的命令行 本文介绍了HDFS以命令行运行的时候,几个常用的命令行的作用和如何使用~1. fsfs是启动命令行动作,该命令用于提供一系列子命令。使用形式为hadoop fs –cmd <args>其中,cmd是子命令,args是具体的命令操作。例如hadoop fs –help或者说fs是其余子命令的父亲,其余都是在“-cmd”的模式下的!
2014-12-15 10:00:24 1574
原创 再理解HDFS的存储机制
再理解HDFS的存储机制 1. HDFS开创性地设计出一套文件存储方式,即对文件分割后分别存放;2. HDFS将要存储的大文件进行分割,分割后存放在既定的存储块(Block)中,并通过预先设定的优化处理,模式对存储的数据进行预处理,从而解决了大文件储存与计算的需求;3. 一个HDFS集群包括两大部分,即NameNode与DataNode。一般来说,一个集群中会有一个NameNode和多个DataNode共同工作;4. NameNode是集群的主服务器,主要是用于对HDFS中所有的文件及
2014-12-15 09:03:55 3169
原创 两个有序数组合并成一个有序数组
两个有序数组合并成一个有序数组 1. 题目描述 数组a是有序的,数组b也是有序的,如何高效地合并它们成一个数组,并且新数组也是有序的?2. 从后往前合并 这道题目是师兄电面阿里的时候,问到的一道题目。现在我们来说一下解法~ 假设数组a足够长,可以在数组a上合并二者。我们的解法基本思想就是从后往前合并数组。 每次合并的时候,都要比较a和b当前数组的大小,取较大的值后移,注意一定要是后移! 为什么从后往前呢?其实就是为了方便后移,因为较大的
2014-12-12 16:34:56 3455
原创 STL容器(三)——对map排序
STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序;根据value排序。下面我们就分别说一下~1. 根据key进行排序 map默认按照key进行升序排序,和输入的顺序无关。如果是int/double等数值型为key,那么就按照大小排列;如果是string类型,那么就按照字符串的字典序进行排列~(还记得之前说过的字典序吗?当时我们用到了next_permutation这个库函数!)下面我们展示一个例子,说明map中默认按照key升序排列的情
2014-12-12 09:18:53 12932 1
原创 理解随机森林
理解随机森林 随机森林利用随机的方式将许多决策树组合成一个森林,每个决策树在分类的时候投票决定测试样本的最终类别。下面我们再详细说一下随机森林是如何构建的。随机森林主要包括4个部分:随机选择样本;随机选择特征;构建决策树;随机森林投票分类。
2014-12-11 11:23:59 2829 1
原创 动态规划题目(三)——最大连续乘积子串
动态规划题目(三)——最大连续乘积子串 1. 题目描述 给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8。也就是说,上述数组中,3 0.5 8这3个数的乘积30.58=12是最大的,而且是连续的。2. 动态规划求解 动态规划求解题目的时候最重要的是要找到状态转移方程!
2014-12-11 09:04:27 3996
原创 Jieba分词包(三)——基于词频最大切分组合
Jieba分词包(三)——基于词频最大切分组合 在前面,我们已经知道dict中所有的单词和词频信息已经存在了一个trie树中,并且需要分词的句子已经构建成了一个DAG图,构建的过程也运用了dict。那么这次我们来说如何基于每句话的DAG图,找到一个组合路径,使得该组合最合理(即打分最高)? 我们直接针对Jieba分词的源代码来解释,其中已经有了很多注释:
2014-12-10 16:10:02 4065
原创 关于水王的题目——找到出现次数大于/等于数组长度一半的数
关于水王的题目——找到出现次数大于/等于数组长度一半的数 1. 题目描述 一个长度为n的数组,里面有一些数出现的次数比较多。请找到出现次数大于数组长度一半的数。(水王1) 一个长度为n的数组,里面有一些数出现的次数比较多。请找到出现次数等于数组长度一半的数。(水王2)
2014-12-10 15:04:34 1811
原创 准确实现二分查找方法
准确写出二分查找法很重要,因为其中有许多地方容易出错。 主要有下面几点:right初始值为num-1;每次更新right=middle-1; 每次更新middle为left+((right-left)>>1); 注意使用移位,以及移位运算符加括号!
2014-12-10 11:29:20 1162
原创 基于快排思想的题目(一)——荷兰旗问题
快排的实现大家估计都知道,主要就是一个partition和交换的过程。这个思想其实是很巧妙的,基于此,很多题目都可以用它来很好地解决。这篇我们讲到了注明的荷兰旗问题,就是可以用到快排的思想~后续还有一系列的题目,应该都是可以用到快排思想的,后面慢慢整理ing~1. 题目描述 这个题目是由荷兰科学家Dijkstra提出来的,首先输入乱序排列的三色小球(红,白,蓝),如果通过两两交换,使得所有红色小球排在前面,白色小球排在中间,蓝色小球排在最后~
2014-12-08 17:07:43 2270
原创 动态规划题目(一)——换零钱
想兑换100元钱,有1,2,5,10四种钱,问总共有多少兑换方法。下面提供两种实现方式,其中代码注释的很清楚。关于动态规划的基本原理,参考:http://www.cnblogs.com/sdjl/articles/1274312.html
2014-12-08 15:35:11 7498
原创 最大连续子数组和
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值,要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。
2014-12-08 10:19:12 767
原创 理解谱聚类
前面介绍过K-means聚类方法,这个方法简单易懂,主要在于如何定义距离计算公式(一般使用欧氏距离),如何选择K值,这两个问题。这次我们介绍谱聚类,它是K-means的升级版。我们计划从这样几个方面介绍谱聚类:K-measn聚类有什么缺点?谱聚类的基本思想,以及谱聚类的算法步骤。
2014-12-04 13:37:54 2534 1
原创 Probability Latent Semantic Analysis (PLSA) 模型 学习笔记
PLSA是前面LSA的兄弟版,相比于LSA而言,PLSA定义了概率模型,而且每个变量以及相应的概率分布和条件概率分布都有明确的物理解释了。这篇博文我们分三部分来说PLSA:基本思想,EM算法推导,以及优缺点分析。
2014-12-04 10:00:09 9908
原创 Latent Semantic Analysis (LSA) 模型 学习笔记
Latent Semantic Analysis 模型,隐性语义分析,也就是我们常说的LSA模型。后面还有他的兄弟PLSA和LDA模型,这个我们后面再说。这几个都是NLP中比较经典的模型!学习这个模型,主要总结到了三个方面:LSA模型可以应用在哪儿?LSA的理论部分,以及LSA的优缺点分析。
2014-12-03 13:57:34 6427
原创 字符串组合——位运算
输入一个字符串,输入所有组合。例如:abc, 输出a, b, c, ab, ac, bc, abc。 位运算求解: 一个长度为n的字符串,它的组合有2^n-1中情况,我们用1 ~ 2^n-1的二进制来表示,每种情况下输出当前位等于1的字符。
2014-12-03 10:59:24 3464
原创 字符串全排列——重复和非重复
字符串全排列1. 题目 输入一个字符串,打印出该字符串中字符的所有排列。例如:输入abc, 我们就可以得到abc, acb, bac, bca, cab, cba。这个题目主要有两种思路:递归和非递归。下面我们逐一解释。2. 递归方法 基本原理我们用下图来展示:首先,让每个字符都当一次head,把第一个字符和后面的字符一一交换;
2014-12-03 08:45:29 4753
原创 理解SVM(三)——扩展到多类
前面两个系列分别讲诉了SVM的基本原理和代码实现,如何解决线性不可分情况。这一次我们讲解一下SVM的最后一篇:SVM解决多类分类问题。
2014-12-02 15:44:46 4887
原创 Hadoop中HDFS的存储机制
HDFS(Hadoop Distributed File System)是Hadoop分布式计算中的数据存储系统,是基于流数据模式访问和处理超大文件的需求而开发的。下面我们首先介绍HDFS中的一些基础概念,然后介绍HDFS中读写操作的过程,最后分析了HDFS的优缺点。
2014-12-02 13:40:59 4090
原创 程序员编程技术学习笔记——最长回文子串
程序员编程技术学习笔记——最长回文子串1. 题目描述 给定一个字符串,求它的最长回文子串的长度。例如:abaaaabaaa的最长回文子串就是以b为中心,长度为7的回文子串aaabaaa.2. 解法1:中间扩展法 我们可以以字符串中每一个字符为中心,往左右两边扩展,在满足回文字符串条件下,能够扩展的最大长度就是回文子串的长度。注意:这种方法需要考虑子串长度奇数/偶数的
2014-12-01 07:54:21 770
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人