常用系统算法总结及性能比较

合集下载

常用调度算法总结

常用调度算法总结

⽬录1.2.3.1.2.4.1.2.5. 常⽤调度算法总结分类: 2013-08-10 17:59 71⼈阅读 (0)调度算法是指:根据系统的资源分配策略所规定的资源分配算法,如任务A在执⾏完后,选择哪个任务来执⾏,使得某个因素(如进程总执⾏时间,或者磁盘寻道时间等)最⼩。

对于不同的系统⽬标,通常采⽤不同的调度算法。

⼏个常⽤的操作系统进程调度算法。

1 先来先服务(队列)先来先服务(FCFS)调度算法是⼀种最简单的调度算法,该算法既可⽤于作业调度,也可⽤于进程调度。

当在作业调度中采⽤该算法时,每次调度都是从后备作业队列中选择⼀个或多个最先进⼊该队列的作业,将它们调⼊内存,为它们分配资源、创建进程,然后放⼊就绪队列。

在进程调度中采⽤FCFS算法时,则每次调度是从就绪队列中选择⼀个最先进⼊该队列的进程,为之分配处理机,使之投⼊运⾏。

该进程⼀直运⾏到完成或发⽣某事件⽽阻塞后才放弃处理机。

缺点:⽐较有利于长作业,⽽不利于短作业。

有利于CPU繁忙的作业,⽽不利于I/O 繁忙的作业。

2 最短优先(优先队列)最短优先调度算法是指对短作业或短进程优先调度的算法。

它们可以分别⽤于作业调度和进程调度。

短作业优先(SJF)的调度算法是从后备队列中选择⼀个或若⼲个估计运⾏时间最短的作业,将它们调⼊内存运⾏。

⽽短进程优先(SPF)调度算法则是从就绪队列中选出⼀个估计运⾏时间最短的进程,将处理机分配给它,使它⽴即执⾏并⼀直执⾏到完成,或发⽣某事件⽽被阻塞放弃处理机时再重新调度。

缺点:长作业的运⾏得不到保证。

2 ⾼优先权优先调度算法2.1 优先权调度算法的类型为了照顾紧迫型作业,使之在进⼊系统后便获得优先处理,引⼊了最⾼优先权优先(FPF)调度算法。

此算法常被⽤于批处理系统中,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可⽤于实时系统中。

当把该算法⽤于作业调度时,系统将从后备队列中选择若⼲个优先权最⾼的作业装⼊内存。

计算机操作系统调度算法基础知识

计算机操作系统调度算法基础知识

计算机操作系统调度算法基础知识操作系统是计算机系统中的核心软件,负责管理和控制计算机的硬件和软件资源。

其中,进程调度是操作系统最核心的功能之一,它决定了进程如何被分配处理器时间,以实现高效的任务执行和资源利用。

本文将介绍计算机操作系统调度算法的基础知识。

一、调度算法的概念和作用调度算法是操作系统用来决定进程执行顺序的一种策略或方法。

它的主要作用是合理安排进程的运行次序,以提高计算机系统的性能和响应速度。

调度算法需要根据不同的需求来选择合适的策略,例如优先级调度、时间片轮转调度、最短作业优先调度等。

二、先来先服务调度算法(FCFS)先来先服务调度算法是最简单的调度算法之一,即按照进程到达的顺序依次调度执行。

它不考虑进程的优先级或时间片大小,适用于批处理环境下的简单任务。

然而,FCFS调度算法容易导致“饥饿”问题,即长作业占用处理器时间,导致其他短作业无法得到及时处理。

三、最短作业优先调度算法(SJF)最短作业优先调度算法是根据进程的执行时间来进行调度的。

它选择执行时间最短的进程先执行,以保证平均等待时间最小化。

然而,SJF调度算法容易出现“饥饿”问题,即长作业的到达时间与短作业的差距过大,导致短作业无法及时获得处理器时间。

四、优先级调度算法优先级调度算法是根据进程的优先级来进行调度的。

每个进程都赋予一个优先级,优先级越高,被执行的机会越大。

它可以是静态优先级,即在进程创建时确定;也可以是动态优先级,即根据进程的行为和状态实时调整。

优先级调度算法可以保证高优先级进程的及时响应,但可能导致低优先级进程的“饥饿”,所以需要合理设置优先级范围。

五、时间片轮转调度算法(RR)时间片轮转调度算法将所有进程按照到达顺序排列成一个队列,每个进程被分配一个时间片进行执行。

当时间片用完之后,进程被移至队尾,等待下一次调度。

这种算法可以保证每个进程都能获得公平的处理器时间,并且对实时性要求不高的任务比较适用。

六、多级队列调度算法多级队列调度算法将进程划分为多个队列,每个队列具有不同的优先级和调度算法。

系统性能指标总结

系统性能指标总结

系统性能指标总结1. 系统性能指标包括哪些?业务指标、资源指标、中间件指标、数据库指标、前端指标、稳定性指标、批量处理指标、可扩展性指标、可靠性指标。

1)业务指标:主要包括并发⽤户数、响应时间、处理能⼒。

指标定义简称标准交易响应时间指⽤户从客户端发起⼀个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。

Response Time: RT对于在线实时交易:互联⽹企业:500毫秒以下,例如淘宝业务10毫秒左右。

⾦融企业:1秒以下为佳,部分复杂业务3秒以下。

保险企业:3秒以下为佳。

制造业:5秒以下为佳。

对于批量交易:不同数据量结果是不⼀样的,⼤数据量的情况下,2⼩时内完成。

系统处理能⼒指系统在利⽤系统硬件平台和软件平台进⾏信息处理的能⼒。

系统处理能⼒通过系统每秒钟能够处理的交易数量来评价,交易有两种理解:⼀是业务⼈员⾓度的⼀笔业务过程;⼆是系统⾓度的⼀次交易申请和响应过程。

前者称为业务交易过程,后者称为事务。

两种交易指标都可以评价应⽤系统的处理能⼒。

⼀般建议与系统交易⽇志保持⼀致,以便于统计业务量或者交易量。

HPS(Hits PerSecond):每秒点击次数,单位是次/秒。

TPS(Transactionper Second):系统每秒处理交易数,单位是笔/秒。

QPS(Query perSecond):系统每秒处理查询次数,单位是次/秒。

对于互联⽹业务中,如果某些业务有且仅有⼀个请求连接,那么TPS=QPS=HPS。

⼀般情况下,⽤TPS来衡量整个业务流程,⽤QPS来衡量接⼝查询次数,⽤HPS来表⽰对服务器点击请求。

⽆论TPS、QPS、HPS,此指标是衡量系统处理能⼒⾮常重要的指标,越⼤越好。

并发⽤户数指在同⼀时刻内,登录系统并进⾏业务操作的⽤户数量。

在测试中,采⽤虚拟⽤户来模拟现实中⽤户进⾏业务操作。

Virtual User: VU⼀般情况下,性能测试是将系统处理能⼒容量测出来,⽽不是测试并发⽤户数,除了服务器长连接可能影响并发⽤户数外,系统处理能⼒不受并发⽤户数影响,可以⽤最⼩的⽤户数将系统处理能⼒容量测试出来,也可以⽤更多的⽤户将系统处理能⼒容量测试出来。

评分模型常用的算法-概述说明以及解释

评分模型常用的算法-概述说明以及解释

评分模型常用的算法-概述说明以及解释1.引言1.1 概述评分模型是在许多领域中广泛应用的一种算法,用于对不同对象或事件进行评分或打分。

通过评分模型,我们可以将复杂的事物转化为数字形式,从而更方便地进行比较和分析。

评分模型的应用可以追溯到多个领域,如电商平台中的商品评价、社交媒体中的用户评级以及电影评分等。

评分模型的重要性在于它可以帮助我们量化和衡量各个对象的优劣程度。

通过建立合理的算法和评分体系,我们可以对不同对象进行客观、准确且可靠的评估。

这不仅对消费者和用户提供了更好的参考和决策依据,也对商品和服务的提供者提供了改进和优化的方向。

评分模型的广泛应用使得我们能够更好地了解各个领域中的对象和事件,并对它们进行全面的比较和分析。

常用的评分模型算法包括但不限于平均分算法、加权平均算法、协同过滤算法等。

平均分算法是一种简单且常见的评分算法,它将所有评分相加再取平均值作为最终评分。

加权平均算法在平均分算法的基础上引入权重因素,根据不同评分的重要性进行加权计算。

协同过滤算法则是基于用户的历史行为和偏好进行评分预测,通过发现用户之间的相似性来推荐适合的评分。

这些评分模型算法在不同的领域和场景中发挥着重要的作用。

在电商平台中,评分模型可以帮助消费者选择高质量和受欢迎的商品,提升用户的购物体验。

在社交媒体中,评分模型可以帮助用户发现和关注高质量的内容创作者,并建立交流和互动的平台。

在电影和音乐领域,评分模型可以帮助用户找到符合个人口味和喜好的作品,提供个性化的推荐和建议。

总之,评分模型是一种重要的算法工具,它能够帮助我们进行客观、准确和可靠的评估和比较。

通过不断优化和改进评分模型算法,我们可以提高评估的准确性和预测的精确性,为用户和消费者提供更好的体验和服务。

未来,随着技术的不断发展和应用场景的扩大,评分模型算法有望进一步提升并发展出更多的变种和应用形式。

对于评分模型的应用前景,我们可以期待它在各个领域中发挥更大的作用,并为不同行业的发展注入新的动力和机遇。

计算机算法设计五大常用算法的分析及实例

计算机算法设计五大常用算法的分析及实例

计算机算法设计五⼤常⽤算法的分析及实例摘要算法(Algorithm)是指解题⽅案的准确⽽完整的描述,是⼀系列解决问题的清晰指令,算法代表着⽤系统的⽅法描述解决问题的策略机制。

也就是说,能够对⼀定规范的输⼊,在有限时间内获得所要求的输出。

如果⼀个算法有缺陷,或不适合于某个问题,执⾏这个算法将不会解决这个问题。

不同的算法可能⽤不同的时间、空间或效率来完成同样的任务。

其中最常见的五中基本算法是递归与分治法、动态规划、贪⼼算法、回溯法、分⽀限界法。

本⽂通过这种算法的分析以及实例的讲解,让读者对算法有更深刻的认识,同时对这五种算法有更清楚认识关键词:算法,递归与分治法、动态规划、贪⼼算法、回溯法、分⽀限界法AbstractAlgorithm is the description to the problem solving scheme ,a set of clear instructions to solve the problem and represents the describe the strategy to solve the problem using the method of system mechanism . That is to say, given some confirm import,the Algorithm will find result In a limited time。

If an algorithm is defective or is not suitable for a certain job, it is invalid to execute it. Different algorithms have different need of time or space, and it's efficiency are different.There are most common algorithms: the recursive and divide and conquer、dynamic programming method、greedy algorithm、backtracking、branch and bound method.According to analyze the five algorithms and explain examples, make readers know more about algorithm , and understand the five algorithms more deeply.Keywords: Algorithm, the recursive and divide and conquer, dynamic programming method, greedy algorithm、backtracking, branch and bound method⽬录1. 前⾔ (4)1.1 论⽂背景 (4)2. 算法详解 (5)2.1 算法与程序 (5)2.2 表达算法的抽象机制 (5)2.3 算法复杂性分析 (5)3.五中常⽤算法的详解及实例 (6)3.1 递归与分治策略 (6)3.1.1 递归与分治策略基本思想 (6)3.1.2 实例——棋盘覆盖 (7)3.2 动态规划 (8)3.2.1 动态规划基本思想 (8)3.2.2 动态规划算法的基本步骤 (9)3.2.3 实例——矩阵连乘 (9)3.3 贪⼼算法 (11)3.3.1 贪⼼算法基本思想 (11)3.3.2 贪⼼算法和动态规划的区别 (12)3.3.3 ⽤贪⼼算法解背包问题的基本步骤: (12)3.4 回溯发 (13)3.4.1 回溯法基本思想 (13)3.3.2 回溯发解题基本步骤 (13)3.3.3 实例——0-1背包问题 (14)3.5 分⽀限界法 (15)3.5.1 分⽀限界法思想 (15)3.5.2 实例——装载问题 (16)总结 (18)参考⽂献 (18)1. 前⾔1.1 论⽂背景算法(Algorithm)是指解题⽅案的准确⽽完整的描述,是⼀系列解决问题的清晰指令,算法代表着⽤系统的⽅法描述解决问题的策略机制。

决策树C4.5算法总结

决策树C4.5算法总结

数据集准备
数据清洗
去除异常值、缺失值,对数据进行预处理,使其满足算法要 求。
数据分割
将数据集分为训练集和测试集,用于训练和评估决策树模型 。
特征选择与划分
特征重要性评估
计算每个特征对目标变量的影响程度,选择最重要的特征作为划分标准。
特征划分
根据特征的重要性和信息增益率,将数据集划分为不同的子集,形成决策树的 节点。
THANKS
感谢观看
案例二:医疗诊断分类
数据集
医疗诊断数据集包含了1452 条样本,每个样本有11个特 征,目标变量为是否患有某
种疾病。
算法应用
使用C4.5算法构建决策树模 型,对数据进行训练和测试 ,评估模型的准确率、召回
率和F1分数等指标。
结果分析
通过决策树模型,可以辅助 医生进行疾病诊断,提高诊 断的准确性和效率。
处理连续属性和缺失值的方法优化
• C4.5算法在处理连续属性和缺失值时采用了一些简单的策略,如将连续属性离散化或忽略缺失值。这些策略可 能导致决策树无法充分利用数据中的信息。因此,一些研究者提出了更复杂的方法来处理连续属性和缺失值, 如使用插值或回归方法来处理连续属性,以及使用特殊标记或填充值来处理缺失值。这些方法可以提高决策树 对连续属性和缺失值的处理能力,从而提高模型的分类准确率。
2
C4.5算法采用了信息增益率、增益率、多变量增 益率等更加复杂的启发式函数,提高了决策树的 构建精度和泛化能力。
3
C4.5算法还引入了剪枝策略,通过去除部分分支 来避免过拟合,提高了决策树的泛化性能。
决策树C4.5算法的应用场景
数据挖掘
C4.5算法广泛应用于数据挖掘 领域,用于分类、回归和聚类

常用加密算法介绍

常用加密算法介绍

常用加密算法介绍加密算法是现代信息安全的基础,它们用于保护数据的机密性、完整性和可用性。

在本文中,我将介绍一些常用的加密算法及其特点。

1.对称加密算法:对称加密算法采用相同的密钥对数据进行加密和解密。

常见的对称加密算法有DES(Data Encryption Standard)、3DES(Triple DES)、AES(Advanced Encryption Standard)等。

这些算法在加密和解密的过程中速度快且效率高,但密钥的管理和分发比较困难。

2.非对称加密算法:非对称加密算法使用一对密钥,即公钥和私钥。

公钥用于加密数据,私钥用于解密数据。

公钥可以公开给任何人使用,而私钥必须保密。

常见的非对称加密算法有RSA(Rivest-Shamir-Adleman)、ElGamal等。

非对称加密算法能够解决对称加密算法中密钥安全分发的问题,但加密和解密的速度较慢。

3.散列函数:散列函数(Hash Function)将输入映射为固定长度的输出,通常是一个固定长度的字符串。

散列函数具有以下特点:输入的微小变化会导致输出的巨大变化;同样的输入会产生同样的输出;给定输出,很难从中推断出输入。

常见的散列函数有MD5、SHA-1、SHA-256等。

散列函数常用于验证数据的完整性和生成密码的摘要。

4.消息认证码(MAC):MAC是一种带有密钥的散列函数,用于验证消息的完整性和真实性。

它使用一个密钥来对消息进行加密,并生成一个固定长度的摘要。

常见的MAC算法有HMAC(Hash-based Message Authentication Code)、CMAC (Cipher-based Message Authentication Code)等。

5.数字签名:数字签名是一种在数字通信中验证消息真实性和完整性的技术。

它使用发送者的私钥对消息进行加密生成签名,接收者使用发送者的公钥进行解密和验证签名。

常见的数字签名算法有RSA、DSA(Digital Signature Algorithm)、ECDSA(Elliptic Curve Digital Signature Algorithm)等。

Linux操作系统磁盘调度算法分析

Linux操作系统磁盘调度算法分析

Linux操作系统磁盘调度算法分析磁盘调度算法是指操作系统中用于处理磁盘上的请求的一套算法。

在现代计算机系统中,磁盘是一种非常重要的存储设备,因此如何高效地处理磁盘请求对于提高系统性能至关重要。

Linux操作系统作为一种广泛使用的开源操作系统,也采用了多种磁盘调度算法来提高磁盘访问效率。

本文将对Linux操作系统中常用的磁盘调度算法进行详细分析。

1. 先来先服务(FCFS)调度算法先来先服务是最基本的磁盘调度算法之一。

它按照磁盘请求的提交顺序进行处理。

当一个请求被完成后,下一个请求将按照提交的顺序进行处理。

这种算法的优点是简单易实现,但并不考虑磁盘访问位置和移动时间。

由于磁盘的读写时间和移动时间往往不同,因此FCFS算法可能会导致一些请求等待时间过长,影响系统的响应速度。

2. 最短寻道时间优先(SSTF)调度算法最短寻道时间优先算法是根据当前磁头位置选择离磁头最近的下一个请求进行处理。

该算法考虑了磁头的移动距离,因此能够减少磁头的寻道时间。

但是由于该算法总是选择最近的请求处理,可能导致一些远离磁头的请求等待时间过长,造成一些请求的饥饿现象。

3. 扫描(SCAN)调度算法扫描算法是磁盘调度算法中常用的一种。

它模拟磁头在磁盘上进行的一次扫描操作,沿着一定方向进行磁道的访问。

当磁头到达磁盘的一端时,会改变方向进行下一次扫描。

该算法比较公平,能够较均匀地处理所有磁盘请求,但是由于需要扫描整个磁道,可能导致一些请求等待时间较长。

4. 循环扫描(C-SCAN)调度算法循环扫描算法是对扫描算法的一种改进。

该算法在到达磁盘的一端后不会改变方向,而是直接返回到磁道的另一端进行下一次扫描。

这意味着所有请求都会等待直到磁头回到磁道的起始位置,这样能够减少等待时间,但是也可能导致一些请求的响应时间较长。

5. 最不常用(LFU)调度算法最不常用算法是根据请求的使用频率进行处理的一种算法。

它将优先处理那些使用频率较低的请求,这样能够提高系统的整体性能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一,常用推荐系统算法总结1、Itemcf (基于商品的协同过滤)
这个算法是cf中的一种,也是当今很多大型网站都在采用的核心算法之一。

对于商城网站(以Amazon为代表,当然也包括京东那种具有搞笑特色的推荐系统在内),影视类推荐,图书类推荐,音乐类推荐系统来说,item的增长速度远不如user的增长速度,而且item之间的相似性远不如user之间的相似性那么敏感,所以可以在离线系统中将item的相似度矩阵计算好,以供线上可以近乎即时地进行推荐。

因为这种方法靠的是item之间的相关性进行推荐,所以推荐的item一般都和喜欢的item 内容或者特性高度相似,很难推荐出用户潜在喜欢的item,多样性也比较差。

2、Usercf (基于用户的协同过滤)
这个是cf中的另外一种,它的主要特色是可以发现和用户具有同样taste的人,有句俗话叫做观其友知其人,大概也是这个道理吧。

找到用户的相似用户,通过相似用户喜欢的item推荐给该用户。

因为用户的相似用户群还是比较敏感的,所以要频繁地计算出用户的相似用户矩阵,这样的话运算量会非常大。

而且这个算法往往推荐出来的item很多都是大家都喜欢的比较hot的item,有的时候它提供的结果并不是个性化,反而成了大众化的推荐了。

用这种算法的web应用一般都是item更新频繁,比如提供资讯类服务的应用(以“指阅”为代表的),或者笑话类推荐(以“冷笑话精选”为代表的)。

当然这种算法的一个中间产物-----用户相似度矩阵是一个很有用的东西,社交类的网站可以利用这个中间产物来为用户提供相同品位的好友推荐。

3、Content_based(基于内容的推荐)
基于内容的推荐,很大程度上是在进行文本挖掘。

web应用提供的内容或者爬取的内容在推给用户之前可以做一些挖掘,比如资讯类的应用,将抓取到的资讯,通过文本分析那一套算法提取出每篇资讯的关键词,以及统计频次和逆向文档频率来聚类或者笨一点地话计算出资讯的相似度矩阵,即共同的key words越多,两篇资讯的相似度越高。

当你的用户很少很少,你的显式反馈数据非常非常少的时候,你可以根据用户的浏览或者搜索等等各种行为,来给用户进行推荐。

再猥琐一点的话,你可以在用户刚刚注册好你的应用的时候,给他一些提问,比如让他输入一些感兴趣的话题啊,或者对以前看过的电影打分什么的。

(当然这些电影都是你从各个簇中随机选取的,要足够多样性)这个算法它好就好在,不需要拿到用户--项目的评分矩阵,只需要知道用户喜欢什么,就可以很快速地推荐给用户十分相关的item。

这个算法需要每天都要根据你抓取的资讯,不断地计算item之间的相似性。

这个算法有个好处在于可以从容应对上面的两个算法其实都很难应对的问题,就是如果你想推出一个新的item,因为没有一个人有对这个new item的评分,所以上述的两个算法不可能推荐新的东西给你,但你可以用基于内容的算法将新的item计算出它属于哪个类,然后时不时地推出你的新item,这点对于商城尤其重要。

4、Knn(邻近算法)
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。

该方法的思路是:如果一个样本在特征空间中的k 个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

KNN算法中,所选择的邻居都是已经正确分类的对象。

该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

KNN方法
虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。

由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

5、Slope One
推荐系统的最最本质的事情就是把user-item rating矩阵中的空白填好,看穿这个本质以后,你可能会觉得问题一下子简单多了,填格子啊填格子谁不会啊。

因此很多高效加搞笑的算法就出来了。

slope one就是其中,说实话,这个算法我自己没有写过,但是看到这个算法怎么实现的,我就觉得应该很好做,而且算起来会很快,但结果肯定不会特别理想。

Slope One的基本概念很简单, 例子1, 用户X, Y和A都对Item1打了分. 同时用户X,Y还对Item2打了分, 用户A对Item2可能会打多少分呢
User Rating to Item 1 R ating to Item 2
X 5 3
Y 4 3
A 4
根据SlopeOne算法, 应该是:4 - ((5-3) + (4-3))/2 = .
当然这个只是个算例简单地说明下原理,当user和item都很多的时候,你可以用加权的办法来做。

为什么我会感觉这个算法的效果会不理想呢因为,这个算法总是把你的口味和大众的平均口味作对等,推荐出来的东西很难是非常个性化的。

很容易让很多用户的推荐结果趋向一致,也就是大数的平均值,也即大众的平均口味。

6、Svd(奇异值分解)
svd的全称是:Singular Value Decomposition,翻译过来是奇异值分解,是一种矩阵分解的方法。

其实,这个方法是提取一般实矩阵“特征值”的算法,(这里特征值加引号是因为,特征值是针对方阵来定义的,而一般的m*n的实矩阵是没有特征值的。

)其实,矩阵就是一个线性变换的表示方法,因为一个向量乘一个矩阵的结果是一个向量,第一个向量通过线性变换来变成第二个向量。

线性变换有许多变换方向,比如你可以对一个图像矩阵做伸缩同时也做平移。

那么特征值和特征向量又是什么一个特征向量就是表示其中的一个变换方向,而对应的特征值则表示这个变换方向对于整个线性变换有多么重要。

书归正传,那么奇异值又是什么我觉得奇异值就是特征值从方阵往一般实矩阵的一个推广。

你将一个m*n的实矩阵和它的转置相乘,就会得到一个方阵,然后对这个方阵做特征值分解,得到的特征值就是所谓的奇异值的平方。

我的意思是说,某种意义上,可以讲奇异值和特征值理解为一回事。

那么拿到奇异值又会有什么用呢拿到奇异值后,我们就可以抓到主要的成分,丢掉次要和非常次要的成分进行分析。

也就是说,我们可以对原来的庞大的常常又非常稀疏的矩阵进行降维和分解,而分解后得到的矩阵都是稠密矩阵。

最终我们会得到一个表示user特性的矩阵和一个表示item特性的矩阵。

拿到这些数据之后,我们就可以进行推荐了,而且也可以很容易地进行聚类分析。

这个算法的好处在于,可以解决rating矩阵的稀疏性问题,同时可以降低矩阵的维度,提高运算速度。

但它的缺点是付出的空间代价太大。

在做svd分解时,你需要先把一个大的rating矩阵分解成三个大的矩阵,这三个矩阵需要存在计算机内存中,然后才能进行降维。

其实,svd这个方法的思路和PCA(主成分分析法)很像,抓住主要矛盾,忽略次要矛盾。

分解降维后的矩阵非常约等于原来的矩阵。

7、聚类算法
这里用到的聚类算法,是用来降低维度以及为并行计算作准备的。

拿到rating 矩阵之后,可以通过这些评分将用户自然地聚成几簇,然后用上述的算法对各个簇做推荐算法并行计算,充分地利用好所有计算资源。

当然你也可以在svd分解之后,拿到user和item矩阵之后,对这两个矩阵分别作聚类分析,你可以得到user的簇以及item的簇。

这样的结果会非常有意义,你可以作好友推荐,相似item推荐等等。

在基于内容的算法中,因为很多资讯之间并不是那么的相关,把他们都相互计算相似度,会得到很多的0,所以没有必要。

因此可以在计算之前,对整个item做个聚类,然后分别对各簇来做相似度计算。

聚类算法中,我用过性能最好的也是最简单的就是k-means。

8、组合算法
任何一个算法都有它独特的优势和固有的缺陷,因此单用一个算法的web应用很少,往往是将各种算法组合起来用。

一种方式是:将多种算法计算出来的结果,加权之后排序推荐给用户。

一种方式是:将多种算法计算出来的结果,各取前几个推荐给用户,这样做的好处是结果很丰富多彩。

一种方式是:用svd算法填充后的矩阵作为输入,用普通cf做计算来输出,然后排序推荐。

这种叫做层次推荐,可以得到两种方法的好处。

一种方式是:对新用户做基于内容的推荐,因为新用户没有任何评分数据,对老用户用cf来做。

……
二,性能评价
绘制成直方图,如下图:
由此可知,SVD和Slope One算法的推荐结果最为精确,UserCF最差。

这个数据和推荐系统相关着作中的结论是吻合的。

此外,在内存方面,Slope One最占内存,1G内存下最多只能处理6%左右的用户。

而其他算法均能轻松地处理30%以上的用户量。

在速度方面,SVD速度最快,处理每个用户的平均时间约为4ms,Slope One的平均时间约为30ms,ItemCF和UserCF的平均处理时间都在10ms左右。

KNN的速度是最慢的,平均处理时间约为100ms。

相关文档
最新文档