导航:首页 > 源码编译 > topn算法

topn算法

发布时间:2023-05-17 07:17:40

❶ 目标检测算法(R-CNN,fast R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3)

深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理。  目标检测可以理解为是物体识别和物体定位的综合 ,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置。

2014年R-CNN算法被提出,基本奠定了two-stage方式在目标检测领域的应用。它的算法结构如下图

算法步骤如下:

R-CNN较传统的目标检测算法获得了50%的性能提升,在使用VGG-16模型作为物体识别模型情况下,在voc2007数据集上可以取得66%的准确率,已经算还不错的一个成绩了。其最大的问题是速度很慢,内存占用量很大,主要原因有两个

针对R-CNN的部分问题,2015年微软提出了Fast R-CNN算法,它主要优化了两个问题。

R-CNN和fast R-CNN均存在一个问题,那就是 由选择性搜索来生成候选框,这个算法很慢 。而且R-CNN中生成的2000个左右的候选框全部需要经过一次卷积神经网络,也就是需要经过2000次左右的CNN网络,这个是十分耗时的(fast R-CNN已经做了改进,只需要对整图经过一次CNN网络)。这也是导致这两个算法检测速度较慢的最主要原因。

faster R-CNN 针对这个问题, 提出了RPN网络来进行候选框的获取,从而摆脱了选择性搜索算法,也只需要一次卷积层操作,从而大大提高了识别速度 。这个算法十分复杂,我们会详细分析。它的基本结构如下图

主要分为四个步骤:

使用VGG-16卷积模型的网络结构:

卷积层采用的VGG-16模型,先将PxQ的原始图片,缩放裁剪为MxN的图片,然后经过13个conv-relu层,其中会穿插4个max-pooling层。所有的卷积的kernel都是3x3的,padding为1,stride为1。pooling层kernel为2x2, padding为0,stride为2。

MxN的图片,经过卷积层后,变为了(M/16) x (N/16)的feature map了。

faster R-CNN抛弃了R-CNN中的选择性搜索(selective search)方法,使用RPN层来生成候选框,能极大的提升候选框的生成速度。RPN层先经过3x3的卷积运算,然后分为两路。一路用来判断候选框是前景还是背景,它先reshape成一维向量,然后softmax来判断是前景还是背景,然后reshape恢复为二维feature map。另一路用来确定候选框的位置,通过bounding box regression实现,后面再详细讲。两路计算结束后,挑选出前景候选框(因为物体在前景中),并利用计算得到的候选框位置,得到我们感兴趣的特征子图proposal。

卷积层提取原始图像信息,得到了256个feature map,经过RPN层的3x3卷积后,仍然为256个feature map。但是每个点融合了周围3x3的空间信息。对每个feature map上的一个点,生成k个anchor(k默认为9)。anchor分为前景和背景两类(我们先不去管它具体是飞机还是汽车,只用区分它是前景还是背景即可)。anchor有[x,y,w,h]四个坐标偏移量,x,y表示中心点坐标,w和h表示宽度和高度。这样,对于feature map上的每个点,就得到了k个大小形状各不相同的选区region。

对于生成的anchors,我们首先要判断它是前景还是背景。由于感兴趣的物体位于前景中,故经过这一步之后,我们就可以舍弃背景anchors了。大部分的anchors都是属于背景,故这一步可以筛选掉很多无用的anchor,从而减少全连接层的计算量。

对于经过了3x3的卷积后得到的256个feature map,先经过1x1的卷积,变换为18个feature map。然后reshape为一维向量,经过softmax判断是前景还是背景。此处reshape的唯一作用就是让数据可以进行softmax计算。然后输出识别得到的前景anchors。

另一路用来确定候选框的位置,也就是anchors的[x,y,w,h]坐标值。如下图所示,红色代表我们当前的选区,绿色代表真实的选区。虽然我们当前的选取能够大概框选出飞机,但离绿色的真实位置和形状还是有很大差别,故需要对生成的anchors进行调整。这个过程我们称为bounding box regression。

假设红色框的坐标为[x,y,w,h], 绿色框,也就是目标框的坐标为[Gx, Gy,Gw,Gh], 我们要建立一个变换,使得[x,y,w,h]能够变为[Gx, Gy,Gw,Gh]。最简单的思路是,先做平移,使得中心点接近,然后进行缩放,使得w和h接近。如下:

我们要学习的就是dx dy dw dh这四个变换。由于是线性变换,我们可以用线性回归来建模。设定loss和优化方法后,就可以利用深度学习进行训练,并得到模型了。对于空间位置loss,我们一般采用均方差算法,而不是交叉熵(交叉熵使用在分类预测中)。优化方法可以采用自适应梯度下降算法Adam。

得到了前景anchors,并确定了他们的位置和形状后,我们就可以输出前景的特征子图proposal了。步骤如下:

1,得到前景anchors和他们的[x y w h]坐标。

2,按照anchors为前景的不同概率,从大到小排序,选取前pre_nms_topN个anchors,比如前6000个

3,剔除非常小的anchors。

4,通过NMS非极大值抑制,从anchors中找出置信度较高的。这个主要是为了解决选取交叠问题。首先计算每一个选区面积,然后根据他们在softmax中的score(也就是是否为前景的概率)进行排序,将score最大的选区放入队列中。接下来,计算其余选区与当前最大score选区的IOU(IOU为两box交集面积除以两box并集面积,它衡量了两个box之间重叠程度)。去除IOU大于设定阈值的选区。这样就解决了选区重叠问题。

5,选取前post_nms_topN个结果作为最终选区proposal进行输出,比如300个。

经过这一步之后,物体定位应该就基本结束了,剩下的就是物体识别了。

和fast R-CNN中类似,这一层主要解决之前得到的proposal大小形状各不相同,导致没法做全连接。全连接计算只能对确定的shape进行运算,故必须使proposal大小形状变为相同。通过裁剪和缩放的手段,可以解决这个问题,但会带来信息丢失和图片形变问题。我们使用ROI pooling可以有效的解决这个问题。

ROI pooling中,如果目标输出为MxN,则在水平和竖直方向上,将输入proposal划分为MxN份,每一份取最大值,从而得到MxN的输出特征图。

ROI Pooling层后的特征图,通过全连接层与softmax,就可以计算属于哪个具体类别,比如人,狗,飞机,并可以得到cls_prob概率向量。同时再次利用bounding box regression精细调整proposal位置,得到bbox_pred,用于回归更加精确的目标检测框。

这样就完成了faster R-CNN的整个过程了。算法还是相当复杂的,对于每个细节需要反复理解。faster R-CNN使用resNet101模型作为卷积层,在voc2012数据集上可以达到83.8%的准确率,超过yolo ssd和yoloV2。其最大的问题是速度偏慢,每秒只能处理5帧,达不到实时性要求。

针对于two-stage目标检测算法普遍存在的运算速度慢的缺点, yolo创造性的提出了one-stage。也就是将物体分类和物体定位在一个步骤中完成。 yolo直接在输出层回归bounding box的位置和bounding box所属类别,从而实现one-stage。通过这种方式, yolo可实现45帧每秒的运算速度,完全能满足实时性要求 (达到24帧每秒,人眼就认为是连续的)。它的网络结构如下图:

主要分为三个部分:卷积层,目标检测层,NMS筛选层。

采用Google inceptionV1网络,对应到上图中的第一个阶段,共20层。这一层主要是进行特征提取,从而提高模型泛化能力。但作者对inceptionV1进行了改造,他没有使用inception mole结构,而是用一个1x1的卷积,并联一个3x3的卷积来替代。(可以认为只使用了inception mole中的一个分支,应该是为了简化网络结构)

先经过4个卷积层和2个全连接层,最后生成7x7x30的输出。先经过4个卷积层的目的是为了提高模型泛化能力。yolo将一副448x448的原图分割成了7x7个网格,每个网格要预测两个bounding box的坐标(x,y,w,h)和box内包含物体的置信度confidence,以及物体属于20类别中每一类的概率(yolo的训练数据为voc2012,它是一个20分类的数据集)。所以一个网格对应的参数为(4x2+2+20) = 30。如下图

其中前一项表示有无人工标记的物体落入了网格内,如果有则为1,否则为0。第二项代表bounding box和真实标记的box之间的重合度。它等于两个box面积交集,除以面积并集。值越大则box越接近真实位置。

分类信息: yolo的目标训练集为voc2012,它是一个20分类的目标检测数据集 。常用目标检测数据集如下表:

| Name | # Images (trainval) | # Classes | Last updated |

| --------------- | ------------------- | --------- | ------------ |

| ImageNet | 450k | 200 | 2015 |

| COCO | 120K | 90 | 2014 |

| Pascal VOC | 12k | 20 | 2012 |

| Oxford-IIIT Pet | 7K | 37 | 2012 |

| KITTI Vision | 7K | 3 | |

每个网格还需要预测它属于20分类中每一个类别的概率。分类信息是针对每个网格的,而不是bounding box。故只需要20个,而不是40个。而confidence则是针对bounding box的,它只表示box内是否有物体,而不需要预测物体是20分类中的哪一个,故只需要2个参数。虽然分类信息和confidence都是概率,但表达含义完全不同。

筛选层是为了在多个结果中(多个bounding box)筛选出最合适的几个,这个方法和faster R-CNN 中基本相同。都是先过滤掉score低于阈值的box,对剩下的box进行NMS非极大值抑制,去除掉重叠度比较高的box(NMS具体算法可以回顾上面faster R-CNN小节)。这样就得到了最终的最合适的几个box和他们的类别。

yolo的损失函数包含三部分,位置误差,confidence误差,分类误差。具体公式如下:

误差均采用了均方差算法,其实我认为,位置误差应该采用均方差算法,而分类误差应该采用交叉熵。由于物体位置只有4个参数,而类别有20个参数,他们的累加和不同。如果赋予相同的权重,显然不合理。故yolo中位置误差权重为5,类别误差权重为1。由于我们不是特别关心不包含物体的bounding box,故赋予不包含物体的box的置信度confidence误差的权重为0.5,包含物体的权重则为1。

Faster R-CNN准确率mAP较高,漏检率recall较低,但速度较慢。而yolo则相反,速度快,但准确率和漏检率不尽人意。SSD综合了他们的优缺点,对输入300x300的图像,在voc2007数据集上test,能够达到58 帧每秒( Titan X 的 GPU ),72.1%的mAP。

SSD网络结构如下图:

和yolo一样,也分为三部分:卷积层,目标检测层和NMS筛选层

SSD论文采用了VGG16的基础网络,其实这也是几乎所有目标检测神经网络的惯用方法。先用一个CNN网络来提取特征,然后再进行后续的目标定位和目标分类识别。

这一层由5个卷积层和一个平均池化层组成。去掉了最后的全连接层。SSD认为目标检测中的物体,只与周围信息相关,它的感受野不是全局的,故没必要也不应该做全连接。SSD的特点如下。

每一个卷积层,都会输出不同大小感受野的feature map。在这些不同尺度的feature map上,进行目标位置和类别的训练和预测,从而达到 多尺度检测 的目的,可以克服yolo对于宽高比不常见的物体,识别准确率较低的问题。而yolo中,只在最后一个卷积层上做目标位置和类别的训练和预测。这是SSD相对于yolo能提高准确率的一个关键所在。

如上所示,在每个卷积层上都会进行目标检测和分类,最后由NMS进行筛选,输出最终的结果。多尺度feature map上做目标检测,就相当于多了很多宽高比例的bounding box,可以大大提高泛化能力。

和faster R-CNN相似,SSD也提出了anchor的概念。卷积输出的feature map,每个点对应为原图的一个区域的中心点。以这个点为中心,构造出6个宽高比例不同,大小不同的anchor(SSD中称为default box)。每个anchor对应4个位置参数(x,y,w,h)和21个类别概率(voc训练集为20分类问题,在加上anchor是否为背景,共21分类)。如下图所示:

另外,在训练阶段,SSD将正负样本比例定位1:3。训练集给定了输入图像以及每个物体的真实区域(ground true box),将default box和真实box最接近的选为正样本。然后在剩下的default box中选择任意一个与真实box IOU大于0.5的,作为正样本。而其他的则作为负样本。由于绝大部分的box为负样本,会导致正负失衡,故根据每个box类别概率排序,使正负比例保持在1:3。SSD认为这个策略提高了4%的准确率

另外,SSD采用了数据增强。生成与目标物体真实box间IOU为0.1 0.3 0.5 0.7 0.9的patch,随机选取这些patch参与训练,并对他们进行随机水平翻转等操作。SSD认为这个策略提高了8.8%的准确率。

和yolo的筛选层基本一致,同样先过滤掉类别概率低于阈值的default box,再采用NMS非极大值抑制,筛掉重叠度较高的。只不过SSD综合了各个不同feature map上的目标检测输出的default box。

SSD基本已经可以满足我们手机端上实时物体检测需求了,TensorFlow在android上的目标检测官方模型ssd_mobilenet_v1_android_export.pb,就是通过SSD算法实现的。它的基础卷积网络采用的是mobileNet,适合在终端上部署和运行。

针对yolo准确率不高,容易漏检,对长宽比不常见物体效果差等问题,结合SSD的特点,提出了yoloV2。它主要还是采用了yolo的网络结构,在其基础上做了一些优化和改进,如下

网络采用DarkNet-19:19层,里面包含了大量3x3卷积,同时借鉴inceptionV1,加入1x1卷积核全局平均池化层。结构如下

yolo和yoloV2只能识别20类物体,为了优化这个问题,提出了yolo9000,可以识别9000类物体。它在yoloV2基础上,进行了imageNet和coco的联合训练。这种方式充分利用imageNet可以识别1000类物体和coco可以进行目标位置检测的优点。当使用imageNet训练时,只更新物体分类相关的参数。而使用coco时,则更新全部所有参数。

YOLOv3可以说出来直接吊打一切图像检测算法。比同期的DSSD(反卷积SSD), FPN(feature pyramid networks)准确率更高或相仿,速度是其1/3.。

YOLOv3的改动主要有如下几点:

不过如果要求更精准的预测边框,采用COCO AP做评估标准的话,YOLO3在精确率上的表现就弱了一些。如下图所示。

当前目标检测模型算法也是层出不穷。在two-stage领域, 2017年Facebook提出了mask R-CNN 。CMU也提出了A-Fast-RCNN 算法,将对抗学习引入到目标检测领域。Face++也提出了Light-Head R-CNN,主要探讨了 R-CNN 如何在物体检测中平衡精确度和速度。

one-stage领域也是百花齐放,2017年首尔大学提出 R-SSD 算法,主要解决小尺寸物体检测效果差的问题。清华大学提出了 RON 算法,结合 two stage 名的方法和 one stage 方法的优势,更加关注多尺度对象定位和负空间样本挖掘问题。

目标检测领域的深度学习算法,需要进行目标定位和物体识别,算法相对来说还是很复杂的。当前各种新算法也是层不出穷,但模型之间有很强的延续性,大部分模型算法都是借鉴了前人的思想,站在巨人的肩膀上。我们需要知道经典模型的特点,这些tricks是为了解决什么问题,以及为什么解决了这些问题。这样才能举一反三,万变不离其宗。综合下来,目标检测领域主要的难点如下:

一文读懂目标检测AI算法:R-CNN,faster R-CNN,yolo,SSD,yoloV2

从YOLOv1到v3的进化之路

SSD-Tensorflow超详细解析【一】:加载模型对图片进行测试  https://blog.csdn.net/k87974/article/details/80606407

YOLO    https://pjreddie.com/darknet/yolo/      https://github.com/pjreddie/darknet   

C#项目参考:https://github.com/AlturosDestinations/Alturos.Yolo

项目实践贴个图。

❷ 推荐算法简介

在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:作为信息消费者,如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情;作为信息生产者, 如何让自己生产的信息脱颖而出,受到广大用户的关注,也是一件非常困难的事情。推荐系统就是解决这一矛盾的重要工具。推荐系统的任务就是联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息 生产者的双赢。和搜索引擎不同的是,推荐系统不需要用户提供明确的需求,而是通过分析用户的历史行为给用 户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息 个性化推荐的成功需要两个条件。第一是存在 信息过载 ,因为如果用户可以很容易地从所有物品中找到喜欢的物品,就不需要个性化推荐。第二用 户大部分时候没有特别明确的需求 ,因为用户没有明确的需求,可以直接通过搜索引擎找到感兴趣的物品。

一个完整的推荐系统一般存在3个参与方:用户、物品提供者和提供推荐系统的网站。以图书推荐为例, 首先,推荐系统需要满足用户的需求,给用户推荐那些令他们感兴趣的图书。其次,推荐系统要让各出版社的书都能够被推荐给对其感兴趣的用户,而不是只推荐几个大型出版社的书。最后, 好的推荐系统设计,能够让推荐系统本身收集到高质量的用户反馈,不断完善推荐的质量,增加 用户和网站的交互,提高网站的收入。因此在评测一个推荐算法时,需要同时考虑三方的利益, 一个好的推荐系统是能够令三方共赢的系统。

推荐系统中,主要有3种评测推荐效果的实验方法,即离线实验(offline experiment)、用户调查(user study)和在线实验(online experiment)。

2.1 离线实验

离线实验的方法一般由如下几个步骤构成: (1) 通过日志系统获得用户行为数据,并按照一定格式生成一个标准的数据集; (2) 将数据集按照一定的规则分成训练集和测试集; (3) 在训练集上训练用户兴趣模型,在测试集上进行预测; (4) 通过事先定义的离线指标评测算法在测试集上的预测结果。

从上面的步骤可以看到,推荐系统的离线实验都是在数据集上完成的,也就是说它不需要一个实际的系统来供它实验,而只要有一个从实际系统日志中提取的数据集即可。这种实验方法的 好处是不需要真实用户参与,可以直接快速地计算出来,从而方便、快速地测试大量不同的算法。它的主要缺点是无法获得很多商业上关注的指标,如点击率、转化率等,而找到和商业指标非常相关的离线指标也是很困难的事情

2.2 用户调查

3.3 在线实验

在完成离线实验和必要的用户调查后,可以将推荐系统上线做 AB测试 ,将它和旧的算法进行比较。 AB测试 是一种很常用的在线评测算法的实验方法。它通过一定的规则将用户随机分成几组,并对不同组用户采取不同的算法,然后通过统计不同组用户的各种不同的评测指标比较不同算法的好坏。 AB测试的优点是可以公平获得不同算法实际在线时的性能指标,包括商业上关注的指标。 AB测试的缺点主要是周期比较长,必须进行长期的实验才能得到可靠的结果。因此一般不会用 AB测试测试所有的算法,而只是用它测试那些在离线实验和用户调查中表现很好的算法。其次, 一个大型网站的AB测试系统的设计也是一项复杂的工程。

一般来说,一个新的推荐算法最终上线,需要完成上面所说的3个实验。 1)首先,需要通过离线实验证明它在很多离线指标上优于现有的算法。 2)然后,需要通过用户调查确定它的用户满意度不低于现有的算法。 3)最后,通过在线的AB测试确定它在我们关心的指标上。

本节将介绍各种推荐系统的评测指标。这些评测指标可用于评价推荐系统各方面的性能。这 些指标有些可以定量计算,有些只能定性描述,有些可以通过离线实验计算,有些需要通过用户 调查获得,还有些只能在线评测。

(1) 用户满意度

用户作为推荐系统的重要参与者,其满意度是评测推荐系统的最重要指标。但是,用户满意度没有办法离线计算,只能通过用户调查或者在线实验获得。

在在线系统中,用户满意度主要通过一些 对用户行为的统计得到 。比如在电子商务网站中,用户如果购买了推荐的商品,就表示他们在一定程度上满意。因此,我们可以 利用购买率度量用 户的满意度 。此外,有些网站会通过设计一些用户 反馈界面收集用户满意度 。比如在视频网站中,都有对推荐结果满意或者不满意的 反馈按钮 ,通过统计两种按钮的单击情况就可以度量系统的用户满意度。更一般的情况下,我们可以用 点击率、用户停留时间和转化率等指标度量 用户的满意度。

(2) 预测准确度

预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这个指标是最重要的推荐系统离线评测指标

在计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录。然后,将该数据集通过时间分成训练集和测试集。最后,通过在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测行为和测试集上实际行为的重合度作为预测准确度。 预测准确度指标有分为以下几种:

评分预测:

预测用户对物品评分的行为成为评分预测,在评分预测中,预测准确度一般通过均方根误差RMSE和平均绝对误差MAE计算,对于测试集中的一个用户u和物品i,令[图片上传失败...(image-62a797-1560412790460)] 是用户u对物品i的实际评分,而[图片上传失败...(image-28cfbc-1560412790460)] 是推荐算法给出的预测评分,那么RMSE定义为:

其中T为样本个数

MAE采用绝对值计算预测误差,它的定义为:

TopN推荐

网站在提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。 令R(u)是根据用户在训练集上的行为给用户作出的推荐列表,而T(u)是用户在测试集上的行为列表。那么,推荐结果的召回率定义为:

推荐结果准确率定义:

(3) 覆盖率

覆盖率(coverage)描述一个推荐系统对物品长尾的发掘能力。覆盖率有不同的定义方法,最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。假设系统的用户集合U,推荐系统给每个用户推荐一个长度为N的物品集合R(u)。那么推荐系统的覆盖率可以通过下面的公式计算:

I为总物品数

此外,从上面的定义也可以看到,热门排行榜的推荐覆盖率是很低的,它只会 推荐那些热门的物品,这些物品在总物品中占的比例很小。一个好的推荐系统不仅需要有比较高的用户满意度,也要有较高的覆盖率。

但是上面的定义过于粗略。覆盖率为100%的系统可以有无数的物品流行度分布。为了更细致地描述推荐系统发掘长尾的能力,需要统计推荐列表中不同物品出现次数的分布。如果所有的 物品都出现在推荐列表中,且出现的次数差不多,那么推荐系统发掘长尾的能力就很好。因此, 可以通过研究物品在推荐列表中出现次数的分布描述推荐系统挖掘长尾的能力。如果这个分布比 较平,那么说明推荐系统的覆盖率较高,而如果这个分布较陡峭,说明推荐系统的覆盖率较低。 在信息论和经济学中有两个着名的指标可以用来定义覆盖率。第一个是信息熵:

其中:n代表推荐列表中物品类别个数,p(i)代表每个类别的所占的比率

第二个指标是基尼系数:

(4) 多样性

为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域,即推荐结果需要具有多样性。多样性推荐列表的好处用一句俗话表示就是(不在一棵树上吊死)。尽管用户的兴趣在较长的时间跨度中是一样的。但具体到用户访问推荐系统的某一时刻,其兴趣往往是单一的,那么如果推荐列表只能覆盖用户的一个兴趣点,而这个兴趣点不是用户这个时刻的兴趣点,推荐结果就不会让用户满意。反之如果推荐列表表较多样,覆盖用户绝大多数的兴趣点,那么久会增加用户找到感兴趣物品的概率。因此给用户的推荐列表也需要满足用户广泛的兴趣,即具有多样性。

多样性描述了推荐列表中物品两两之间的不相似性,因此,多样性和相似性是对应的。假设s(i, j) ∈Î[0,1] 定义了物品i和j之间的相似度,那么用户u的推荐列表R(u)的多样性定义如下:

而推荐系统的整体多样性可以定义为所有用户推荐列表多样性的平均值:

(5) 新颖性

新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。在一个网站中 实现新颖性 的最简单办法是,把那些用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。比如在一个视 频网站中,新颖的推荐不应该给用户推荐那些他们已经看过、打过分或者浏览过的视频。 评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越 可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。

(6) 惊喜度

惊喜度(serendipity)是最近这几年推荐系统领域最热门的话题。如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。提高推荐惊喜度需要提高推荐结果的用户满意度,同时降低推荐结果和用户历史兴趣的相似度。

(7) 信任度

度量推荐系统的信任度只能通过问卷调查的方式,询问用户是否信任推荐系统的推荐结果。 提高推荐系统的信任度主要有两种方法。首先需要增加推荐系统的透明度(transparency), 而增加推荐系统透明度的主要办法是提供推荐解释。只有让用户了解推荐系统的运行机制,让用 户认同推荐系统的运行机制,才会提高用户对推荐系统的信任度。其次是考虑用户的社交网络 信息,利用用户的好友信息给用户做推荐,并且用好友进行推荐解释。这是因为用户对他们的 好友一般都比较信任,因此如果推荐的商品是好友购买过的,那么他们对推荐结果就会相对比较信任

(8) 实时性

在很多网站中,因为物品(新闻、微博等)具有很强的时效性,所以需要在物品还具有时效 性时就将它们推荐给用户。 推荐系统的实时性包括两个方面。首先,推荐系统需要实时地更新推荐列表来满足用户新的 行为变化。实时性的第二个方面是推荐系统需要能够将新加入系统的物品推荐给用户。这主要考验了推 荐系统处理物品冷启动的能力。

(9) 健壮性

健壮性(即robust,鲁棒 性)指标衡量了一个推荐系统抗击作弊的能力。算法健壮性的评测主要利用模拟攻击。首先,给定一个数据集和一个算法,可以用这个算法 给这个数据集中的用户生成推荐列表。然后,用常用的攻击方法向数据集中注入噪声数据,然后 利用算法在注入噪声后的数据集上再次给用户生成推荐列表。最后,通过比较攻击前后推荐列表 的相似度评测算法的健壮性。如果攻击后的推荐列表相对于攻击前没有发生大的变化,就说明算 法比较健壮

(10) 商业目标

很多时候,网站评测推荐系统更加注重网站的商业目标是否达成,而商业目标和网站的盈利模式是息息相关的

(11) 总结

上一节介绍了很多评测指标,但是在评测系统中还需要考虑评测维度,比如一个推荐算法, 虽然整体性能不好,但可能在某种情况下性能比较好,而增加评测维度的目的就是知道一个算法 在什么情况下性能最好。这样可以为融合不同推荐算法取得最好的整体性能带来参考。

一般来说,评测维度分为如下3种。 1) 用户维度 :主要包括用户的人口统计学信息、活跃度以及是不是新用户等。 2) 物品维度 :包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。 3) 时间维度 :包括季节,是工作日还是周末,是白天还是晚上等。 如果能够在推荐系统评测报告中包含不同维度下的系统评测指标,就能帮我们全面地了解推 荐系统性能,找到一个看上去比较弱的算法的优势,发现一个看上去比较强的算法的缺点。

阅读全文

与topn算法相关的资料

热点内容
液压油可压缩吗 浏览:944
源泉cad加密文件 浏览:125
银河v10驱动重编译 浏览:889
电脑上文件夹右击就会崩溃 浏览:689
右美维持算法 浏览:938
php基础编程教程pdf 浏览:219
穿越之命令与征服将军 浏览:351
android广播重复 浏览:832
像阿里云一样的服务器 浏览:318
水冷空调有压缩机吗 浏览:478
访问日本服务器可以做什么 浏览:434
bytejava详解 浏览:450
androidjava7 浏览:386
服务器在山洞里为什么还有油 浏览:887
天天基金app在哪里下载 浏览:976
服务器软路由怎么做 浏览:293
冰箱压缩机出口 浏览:229
OPT最佳页面置换算法 浏览:645
网盘忘记解压码怎么办 浏览:853
文件加密看不到里面的内容 浏览:654