学习排序算法(一):单文档方法 Pointwise 1. 基本思想 这样的方法主要是将搜索结果的文档变为特征向量,然后将排序问题转化成了机器学习中的常规的分类问题,并且是个多类分类问题。 2. 方法流程 Pointwise方法的主要流程例如以下: 我们能够看出。整个流程分为三部分:提取特征做训练;分 ...
分类:
编程语言 时间:
2017-08-15 12:40:05
阅读次数:
170
学习排序算法也有一段时间,一直没有好好整理下排序算法的相关知识,排序在算法中是最基础也是最重要的,所以有必要自己进行一番整理,在提高领悟算法本质的同时以备以后自己复习,顺便也将自己领悟到的一些思想进行记录。 下面简单整理下快排的算法感悟,当然,个人觉得领悟快排的核心思想分治才是学习这个算法的最重要目 ...
分类:
编程语言 时间:
2017-03-29 00:06:59
阅读次数:
233
1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架 ...
分类:
编程语言 时间:
2016-12-31 17:06:09
阅读次数:
255
学习编程语言时, 我们会接触到许多排序算法, 这里总结了一下常见的排序算法. 不定期更新. * 其实在Java中存在如Collections.sort()这样的方法来自动为我们排序, 不过学习排序算法能让我们更好的理解一门编程语言. 1. 冒泡排序: 该算法是最基本也是最有名的算法之一了. 说明: ...
分类:
编程语言 时间:
2016-05-26 08:40:31
阅读次数:
196
再理解RankNet算法
前面的一篇博文介绍了学习排序算法(Learning to Rank)中的RankNet算法。如下:
http://blog.csdn.net/puqutogether/article/details/42124491
那次的入门对其中的算法流程和基本原理没有深入了解,这次看自动摘要提取算法的时候,里面有一个排序单元,使用到的...
分类:
编程语言 时间:
2015-02-09 11:04:55
阅读次数:
334
学习排序算法(二):Pairwise方法之Ranking SVM
1. Pairwise方法的基本思想
Pairwise考虑了文档顺序的关系。它将同一个query的相关文档其中起来,把任意两个文档组成一个pair。我们研究就是以这个pair文档对来研究的。
2. Ranking SVM...
分类:
编程语言 时间:
2014-12-24 16:22:53
阅读次数:
269
学习排序算法(二):Pairwise方法之RankNet
前面一篇博文介绍的Ranking SVM是把LTR问题转化为二值分类问题,而RankNet算法是从另外一个角度来解决,那就是概率的角度。
1. RankNet的基本思想
RankNet方法就是使用交叉熵作为损失函数,学习出一些模型(例如神经网络、决策树等)来计算每个pair的排序得分,学习模型的过程可以使用梯度下降法。...
分类:
编程语言 时间:
2014-12-24 16:21:32
阅读次数:
1832
属于同一类的文档之间无法排序;
完全从单文档的分类角度计算,没有考虑文档之间的相对顺序。...
分类:
编程语言 时间:
2014-12-24 11:54:32
阅读次数:
386
学习排序算法简介
学习排序(Learning to Rank, LTR)是一类基于机器学习方法的排序算法。
传统经典的模型,例如基于TFIDF特征的VSM模型,很难融入多种特征,也就是除了TFIDF特征之外,就无法融入其他种类的特征了。
而机器学习的方法很容易融合多种特征,而且有成熟深厚的理论基础,参数也是通过迭代计算出来的,有一套成熟理论来解决稀疏、过拟合等问题。
LTR方法大致可以分成三类:
1) Pointwise 单文档方法
2) Pairwise 文档对方法...
分类:
编程语言 时间:
2014-12-24 10:01:56
阅读次数:
350
一直以来学习排序算法, 都没有在链表排序上下太多功夫,因为用得不多。最近看STL源码,才发现,原来即使是链表,也能有时间复杂度为O(nlogn)的算法,大大出乎我的意料之外,一般就能想到个插入排序。下面的代码就是按照源码写出的(去掉了模板增加可读性),注意forward_list是C++11新加的单...
分类:
编程语言 时间:
2014-11-20 21:48:34
阅读次数:
602