系统学习笔记
- 格式:docx
- 大小:47.87 KB
- 文档页数:18
信息系统管理工程师学习笔记知识体系结构1、信息系统根底知识:计算机根底知识以及数据结构、数据库、计算机网络等核心技术知识。
2、信息系统开发过程:信息系统的开发管理、需求分析、系统设计、系统实施、系统测试的整个建设过程。
3、信息系统管理:系统管理的各个方面,包括有系统管理规划、IT组织职能设计、IT财务管理、系统日常作业管理、IT资源管理、故障管理、性能管理、平安管理、系统转换、系统维护、用户支持等内容。
一、计算机硬件根底1、计算机的根本组成计算机硬件系统:运算器、控制器、存储器、输入设备、输出设备。
〔Central Processing Unit〕中央处理器 + 内部外设信息加工主机运算器:进行算术和逻辑运算的部件,运算数据以二进制格式给出,它可从存储器取出或来自输入设备,运算结果或写入存储器,或通过输出设备输出。
控制器:协调整个计算机系统的正常工作。
工作实质就是解释、执行指令。
①程序计数器〔PC〕:在大多数机器中存放的是要执行的下一条指令的地址。
②指令存放器〔IR〕:用以存放现行指令,以便在整个指令执行过程中,实现一条指令的全部功能控制。
③指令译码器:对指令存放器中的操作码局部进行分析解释,产生相应的控制信号提供应操作控制信号形成部件。
④脉冲源及启停控制线路:脉冲源产生一定频率的脉冲信号作为整个机器的时钟脉冲,是周期、节拍和工作脉冲的基准信号。
启停线路是对脉冲源产生脉冲的的控制。
⑤时序信号产生部件:以时钟脉冲为根底,产生不同指令相对应的周期、节拍、工作脉冲等时序信号,以实现机器指令执行过程的时序控制。
⑥操作控制信号形成部件:综合时序信号、指令译码信息、被控功能部件反应的状态条件信号等,形成不同指令所需要的操作控制信号序列。
⑦中断机构:实现对异常情况和某些外来请求的处理。
⑧总控制逻辑:实现对总线信息传输的控制。
控制器组成图存储器:存放数据和程序的部件,通过地址线和数据线与其他部件相连。
按功能分类:〔1〕高速缓冲存储器〔Cache〕:其存取速度接近CPU的工作速度,用来临时存放指令和数据。
linux操作系统课程学习笔记,我的Linux学习笔记·Linux操作系统基础今天的笔记主要是关于Linux操作系统根底的相关学问。
那就从我⾯前的电脑开端讲起。
计算机和操作系统计算机主要包括五个部分:运算器,控制器,存储器,输⼊设备和输出设备。
通常,运算器,控制器再加上其他⼀些部件如寄存器等构成了我们通常所说的CPU(central processing unit),存储器则主要是内存。
运算器,控制器和存储器可以实现数据的处理.但是数据从何⽽来,运算之后的结果去往哪⾥?这就需要输⼊设备和输出设备(I/O设备)。
我们通常⽤到的输⼊设备包括键盘⿏标等,输出设备为屏幕,打印机等。
值得⼀提的是,计算机中有个叫做硬盘的东西,它并不是存储器,⽽是⼀个I/O设备。
在将数据读取到内存时,它是⼀个输⼊设备;⽽将结果保存到磁盘时,它就变成了⼀个输出设备。
这么多设备整合在⼀起,就成了⼀台计算机。
它可以接收我们的指令(键盘⿏标),通过运算(CPU),把结果展⽰给我们(屏幕,硬盘等)。
但是这么多硬件是如何协调作⽤,共同完成⼀个任务⽽不会我⾏我素地乱来呢?我们需要⼀个东西,它可以控制硬件有序地⼯作,各⾃执⾏⾃⼰的任务,这个东西就是操作系统(Operating System)。
操作系统是⼀个特殊的软件,它的任务就是硬件管理—控制CPU的运算,控制内存的分配,控制计算机的⼏乎⼀切。
假如⼀台电脑没有操作系统,它可能只是⼀个艺术品,或者⼀堆废铁。
⼀个完整的操作系统包括内核和⼀些辅助软件。
内核的主要任务就是进⾏硬件管理,它是⼀个操作系统最基础最底层的东西。
内核若想很好地控制硬件并使其发挥相应的功能,需要和硬件相识相知相爱,他俩可以成为完美的⼀对,全都仰仗于驱动的帮忙。
驱动是硬件的灵魂,它向操作系统提供了访问和使⽤硬件的接⼝,以便在某项任务中最⾼效地调⽤硬件。
什么是LinuxLinux就是⼀个操作系统,它可以管理整个计算机硬件,并且可以接收我们的指令,来指挥硬件完成相应的任务,并把结果反馈给我们。
大学计算机操作系统设计原理学习笔记一、引言计算机操作系统是计算机科学中的重要组成部分,它负责管理计算机的硬件资源并提供各种服务给应用程序。
学习计算机操作系统的设计原理对于理解计算机系统的工作原理以及提升编程能力都具有重要意义。
本文将通过分析性论述的方式,结合具体操作方法和实例,介绍学习计算机操作系统设计原理的步骤和技巧。
二、学习步骤1. 理解操作系统的基本概念在学习操作系统设计原理之前,首先需要了解操作系统的基本概念和功能。
操作系统作为计算机系统的核心,它负责管理计算机的硬件资源,包括内存、处理器、设备等,并提供各种服务给应用程序。
熟悉操作系统的基本概念和功能可以为后续的学习奠定基础。
2. 学习操作系统的结构和组成操作系统的结构和组成是理解其设计原理的关键。
操作系统通常由内核和外壳组成,内核负责管理硬件资源,而外壳则提供用户界面和应用程序接口。
了解操作系统的结构和组成可以帮助我们理解其工作原理和实现方式。
3. 研究操作系统的运行机制操作系统的运行机制是其设计原理的核心内容。
操作系统通过调度算法、内存管理、文件系统等机制来优化资源利用和提供服务。
研究操作系统的运行机制可以帮助我们理解其工作原理,并且可以通过实验和实践来加深理解。
4. 分析和比较不同操作系统的设计原理在学习操作系统设计原理的过程中,可以选择一些经典的操作系统来进行分析和比较。
例如,UNIX、Windows、Linux等操作系统都有各自独特的设计原理和实现方式。
通过分析和比较不同操作系统的设计原理,可以加深对操作系统的理解,并且为自己的设计提供参考。
三、具体操作方法举例1. 学习操作系统的基本概念在学习操作系统的基本概念时,可以选择一本权威的教材或者参考资料作为学习的基础。
这些教材通常会详细介绍操作系统的基本概念和功能,并且提供一些实例和案例来帮助理解。
同时,可以通过搜索引擎或者在线学习平台找到一些相关的课程或视频来进行学习。
2. 学习操作系统的结构和组成学习操作系统的结构和组成可以通过查阅相关的书籍和文献来进行。
哈工大操作系统读书笔记在哈尔滨工业大学的计算机科学与技术专业的学习中,操作系统是我们学科的核心课程之一。
为了更好地掌握操作系统的基本原理和技术,我认真阅读了相关教材,并做了一些笔记。
一、操作系统的基本概念1. 操作系统定义:操作系统是控制计算机硬件和软件资源,管理用户程序运行,提供用户界面和应用程序开发环境的一种系统软件。
2. 操作系统功能:主要功能包括处理机管理、存储管理、文件管理、设备管理以及用户界面。
二、处理机管理1. 进程的定义:进程是程序的一次执行,是系统进行资源分配和调度的基本单位。
2. 进程的状态:包括新建、就绪、运行和阻塞四种状态。
3. 进程控制块PCB:用于描述进程的基本信息和运行状态。
4. 进程调度算法:包括先来先服务、最短作业优先、最短剩余时间优先等。
三、存储管理1. 内存分配方式:包括固定分区、可变分区、分页和分段。
2. 内存置换算法:包括先进先出、最近最少使用、最佳置换算法等。
3. 虚拟内存的概念:通过将内存和外存统一管理,为用户提供一个比实际内存大得多的虚拟内存空间。
四、文件管理1. 文件系统的概念:文件系统是操作系统中负责管理和存储文件信息的软件部分。
2. 文件的分类:按性质分为系统文件和用户文件;按内容分为文本文件和二进制文件;按存储方式分为顺序文件和随机文件。
3. 文件的访问方式:包括顺序访问和随机访问。
五、设备管理1. 设备驱动程序的概念:设备驱动程序是操作系统与硬件设备交互的接口,负责设备的初始化和释放、设备的读写操作以及设备的状态查询等。
2. 缓冲技术的概念:缓冲技术是解决I/O设备速度与CPU速度不匹配问题的一种方法,通过在内存中开辟一块缓冲区,暂时存放输入输出数据,以实现数据的同步传输。
3. 设备分配与回收:设备分配的主要任务是确定哪些进程可以使用哪些设备,并满足设备的互斥使用和独立性等约束条件;设备回收的任务是在进程终止时,将设备的使用权收回并重新分配给其他进程使用。
《现代操作系统》看了两个多月才看了前面200页,很多都似懂非懂,权且将自己认为重要的概念抄下来,以备后续查看。
0. 概述(1)操作系统的概念对操作系统的定义,有两种说法,一种声称操作系统是计算机的扩展器,一种声称操作系统是计算机资源集的抽象。
所谓操作系统是计算机的扩展,是将操作系统当做计算机对外的接口。
对外包括对应用程序,对程序员,对用户。
操作系统对计算机进行“化妆”,将计算机“丑陋晦涩”的硬件对外隐藏,而向外呈现界面友好清晰,更易理解的操作系统。
如下图所示:所谓操作系统是计算机资源集的抽象,是指操作系统将计算机资源(处理器,存储器以及I/O设备等)进行抽象以及管理。
将CPU处理抽象为进程,将内存抽象为地址空间,磁盘抽象成文件。
而这一切抽象都是为了实现多道程序设计,即可以在一个计算机上同时运行多个互不干扰程序。
(2)操作系统的作用操作系统的主要任务是在相互竞争的程序之间有序地控制对处理器、存储器以及其他I/O接口设备的分配。
其主要任务包括管理资源分配,评估使用代价和调节资源分配的冲突,记录哪个程序在用什么资源,用多少,用多久。
资源管理包括用以下两种不同方式实现多路复用:在时间上复用(进程调度:CPU 时间片轮转)和在空间上复用(内存管理:虚拟内存,页面置换;磁盘管理:文件系统)。
在时间上分配CPU资源需要考虑该进程在上面运行多久,下一次切换到哪一个进程。
在空间上分配存储空间需要考虑给每个进程分配多少内存,如果内存不足的时候,将哪个页面置换到磁盘以腾出空间。
操作系统的主要功能:为用户程序提供抽象和管理计算机资源。
用户程序和操作系统之间的交互处理是前者。
用户程序和操作系统之间的交互主要是处理抽象。
对于管理计算机资源系统(进程调度,内存置换等)一般自动完成。
所以主要是用户程序与操作系统的交互。
用户程序通过操作系统提供的接口来访问底层的系统。
操作系统提供一种特殊的过程调用——系统调用,该种过程调用可以由用户态陷入内核态对底层进行操作。
第一章架构师1.1.1系统架构的概念现代信息系统“架构”三要素:构件、模式、规划;规划是架构的基石,也是这三个贡献中最重要的。
架构本质上存在两个层次:概念层,物理层。
1.2.1系统架构师的定义负责理解、管理并最终确认和评估非功能性系统需求,给出开发规范,搭建系统实现的核心架构,对整个软件架构、关键构建、接口进行总体设计并澄清关键技术细节。
主要着眼于系统的“技术实现”,同时还要考虑系统的“组织协调”。
要对所属的开发团队有足够的了解,能够评估该开发团队实现特定的功能需求目标和资源代价。
1.2.2系统架构师技术素质对软件工程标准规范有良好的把握。
1.2.3系统架构师管理素质系统架构师是一个高效工作团队的创建者,必须尽可能使所有团队成员的想法一致,为一个项目订制清晰的、强制性的、有元件的目标作为整个团队的动力;必须提供特定的方法和模型作为理想的技术解决方案;必须避免犹豫,必须具备及时解决技术问题的紧迫感和自信心。
1.2.4系统架构师与其他团队角色的协调系统分析师,需求分析,技术实现系统架构师,系统设计,基于环境和资源的系统技术实现项目管理师,资源组织,资源实现由于职位角度出发产生冲突制约,不可能很好地给出开发规范,搭建系统实现的核心架构,并澄清技术细节,扫清主要难点。
所以把架构师定位在项目管理师与系统分析师之间,为团队规划清晰的目标。
对于大型企业或项目,如果一人承担多个角色,往往容易发生顾此失彼的现象。
1.3系统架构师知识结构需要从大量互相冲突的系统方法和工具中区分出哪些是有效的,那些是无效的。
1.4从开发人员到架构师总结自己的架构模式,深入行业总结规律。
几天的培训不太可能培养出合格的软件架构师,厂商的培训和认证,最终目的是培养自己的市场,培养一批忠诚的用户或产品代言人,而不是为中国培养软件架构师。
第二章计算机基础《计算机网络基础知识》计算机系统由硬件和软件组成,软件通常分为系统软件和应用软件。
系统软件支持应用软件的运行,为用户开发应用软件提供平台,用户可以使用它,但不能随意修改它。
系统规划与管理师学习笔记(一)(注:加黑加粗部分为关键点)1.1. 信息系统综合知识1.1.1.信息的基本概念●控制论的创伤人维纳认为:信息就是信息,它既不是物资,也不是能量。
●信息化的奠基者香农认为:信息是能够用来消除不确定性的东西。
●信息的概念存在两个基本层次,即本体论层面和认识论层面。
本体层面是纯客观的层次,只与客体本身的因素有关,与主体的因素无关。
认识层面是从主体立场来考察的信息层次,即与客体因素有关,又与主体因素有关。
1.1.2.信息的定量描述香农用概率来定量描述信息的公式如下:公式说明:H(X)表示X的信息熵,p i是事件出现第i种状态的概率,在二进制的情况下,对数的底是2,这是信息熵可以作为信息的度量,称为信息量,单位是比特(bit)。
1.1.3.信息的传输模式1.1.4.信息的质量属性(1)精确性:对事务状态描述的精确程度。
(2)完整性:对事物状态描述的全面程度。
(3)可靠性:信息来源合法,传输过程可信。
(4)及时性:信息获得及时。
(5)经济性:信息获取、传输成本经济。
(6)可验证性:信息的主要质量属性可以证实或证伪。
(7)安全性:信息可以被非授权访问的可能性,可能性越低,安全性越高。
1.2. 信息化1.2.1.信息化的含义1.2.1.1. 信息化层次信息化从小到大分为5个层次:(1)产品信息化:如集成了车载计算机系统的小车。
(2)企业信息化:如OA、CRM、ERP等。
(3)产业信息化:如交通运输业等传统产业广泛利用信息技术来完成工艺、产品的信息化,实现资源优化与重组,从而实现产业升级。
(4)国民经济信息化:指在经济大系统内实现统一的信息大流动,使生产、流通、分配、消费等经济的4个环节,通过信息进一步联成一个整体。
(5)社会生活信息化:指包括商务、教育、日常生活等在内的整个社会体系,采用先进的信息技术拓展我们的活动时空,提升生活品质。
如智慧城市等。
1.2.1.2. 信息化的主体●信息化的主体是全社会成员,包括政府、企业、事业、团体和个人。
【笔记】高效记笔记方法:打造精准、系统的学习笔记导言大家在学习过程中都知道记笔记的重要性。
记笔记的作用不仅在于帮助我们记住关键概念和知识点,还可以提高我们的学习效率和思维能力。
但是,很多人在记笔记时总是感到困惑,不知道如何才能记得精准、系统。
本篇文章将介绍一些高效的记笔记方法,帮助大家打造精准、系统的学习笔记,提高学习效果。
1. 定义学习目标在开始记笔记之前,首先要明确自己的学习目标是什么。
你想通过学习掌握哪些知识和技能?明确学习目标可以帮助你筛选出需要记录的重要内容,避免浪费时间和精力在无关紧要的内容上。
2. 选择合适的笔记工具选择合适的笔记工具非常重要。
不同的人有不同的偏好,有些人喜欢使用电脑记录笔记,有些人则更喜欢用纸和笔。
无论你选择哪种方式,都要确保能够方便地进行编辑和整理。
另外,如果你使用电脑记笔记,建议使用功能齐全且易于操作的软件,比如Evernote或OneNote。
3. 建立系统的笔记结构在开始记笔记之前,你需要建立一个系统的笔记结构。
这个笔记结构可以是按照课程或主题进行分组,也可以是按照时间先后进行组织。
建立一个清晰的笔记结构能够帮助你更好地整理和回顾知识,也方便日后查找需要的内容。
4. 使用标题和子标题使用标题和子标题是一个非常有效的方式来组织笔记。
标题和子标题可以帮助你分类和归纳笔记内容,也方便日后复习和查找。
在记笔记的时候,尽量使用简洁明了的标题和子标题,突出重点和主题。
5. 采用主要思路和关键词在记笔记的过程中,不要试图将所有内容都详细记录下来。
相反,你可以采用主要思路和关键词的方式来记录笔记。
这样可以帮助你更好地理解和记忆知识,同时也能节省时间和精力。
当你回顾笔记时,通过关键词可以迅速回想起相关的内容。
6. 使用图表和图像图表和图像是记笔记的重要辅助工具。
有些知识点和概念很难用文字来表达,这时候你可以使用图表和图像来进行说明和概括。
图表和图像可以帮助你更好地理解和记忆知识,也能让笔记更具可读性和可视化。
系统学习笔记集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#推荐系统实践学习笔记推荐系统和搜索引擎都是为了帮助用户从大量信息中找到自己感兴趣的信息。
区别是搜索引擎由用户主动提供关键词来查找信息,推荐系统则不需要,而通过分析用户的历史行为给用户的兴趣建模,主动给用户推荐他们可能感兴趣的信息。
从物品的角度出发,推荐系统可以更好地发掘物品的长尾。
长尾商品往往代表了一小部分用户的个性化需求,发掘这类信息正是推荐系统的长项。
推荐系统广泛存在于各类网站中,作为一个应用为用户提供个性化推荐。
它需要依赖用户的行为数据,因此一般都由后台日志系统、推荐算法系统和前台展示页面3部分构成。
应用推荐系统的领域包括:电子商务 - 亚马逊:基于物品、好友的个性化推荐,相关推荐,20~30%电影视频 - Netflix:基于物品的推荐,60%;YouTube、Hulu音乐 - Pandora:专家标记;:用户行为社交网络 - Facebook、Twitter阅读 - Google Reader基于位置的服务 - Foursquare个性化邮件 - Tapestry广告 - Facebook主要有3种评测推荐效果的实验方法:离线实验:划分训练集和测试集,在训练集训练用户兴趣模型,在测试集预测优点:快速方便缺点:无法用真实的商业指标来衡量用户调查:用抽样的方法找部分用户试验效果优点:指标比较真实缺点:规模受限,统计意义不够在线实验:AB测试优点:指标真实缺点:测试时间长,设计复杂实际中,这三种方法在推荐算法上线前都要完成。
评测指标较多,一些重要的如下:用户满意度:调查问卷,线上的用户行为统计、其他的指标转化得到预测准确度:可通过离线实验计算评分预测,通过均方根误差和平均绝对误差计算,前者更为苛刻。
设r ui为用户u对物品i的实际评分,r ui为预测评分RMSE=∑u,i∈T(r ui r ui)2|T|MAE=∑u,i∈T|r ui r ui||T|TopN推荐,通过准确率或召回率衡量。
设R(u)为根据训练建立的模型在测试集上的推荐,T(u)为测试集上用户的选择Precision=∑u∈U|R(u)∩T(u)|∑u∈U|R(u)|Recall=∑u∈U|R(u)∩T(u)|∑u∈U|T(u)|覆盖率:表示对物品长尾的发掘能力(推荐系统希望消除马太效应)Coverage=|∪u∈U R(u)||I|上面的公式无法区分不同的分布,可以用熵或基尼系数来更准确地表述覆盖率H=∑i=1n p(i)log p(i)p(i)为物品i的流行度的比例。
G=1n1∑j=1n(2jn1)p(j)p(j)为按流行度由小到大排序的物品列表中的第j个物品的流行度的比例。
多样性:推荐需要满足用户的广泛的兴趣,表示推荐列表中物品两两之间的不相似性。
设s(i,j)表示物品i和j之间的相似度Diversity(R(u))=1∑i,j∈R(u),i≠j s(i,j)12|R(u)|(|R(u)|1)Diversity=1|U|∑u∈U Diversity(R(u))新颖性:指给用户推荐他们不知道的物品,可以用平均流行度做粗算,或者更精确地通过做用户调查。
惊喜度:推荐和用户的历史兴趣不相似,却使用户满意的物品。
信任度:只能通过问卷调查来评价,可以通过增加推荐系统的透明度和利用好友信息推荐来提高信任度。
实时性:保持物品的时效性,主要涉及推荐系统实时更新和对新物品的处理。
健壮性:开发健壮性高的算法,清理脏数据,使用代价较高的用户行为设计推荐系统。
商业目标:推荐系统对于网站的价值。
作者认为,离线实验的优化目标是在给定覆盖率、多样性、新颖性等限制条件下,最大化预测准确度。
对推荐系统还需要从多维度来评测,如用户维度、物品维度和时间维度,这样可以更全面地了解推荐系统的性能。
用户行为数据一般从日志中获得,可以按反馈的明确性把用户行为分为显性反馈和隐性反馈。
用户行为数据很多满足长尾分布(Zipf定律)f(x)=αx k另外,用户活跃度高,倾向于看冷门的物品。
基于用户行为分析的推荐算法一般称为协同过滤算法,包括基于邻域的方法、隐语义模型、基于图的随机游走算法等,应用最广的是基于邻域的方法。
基于邻域的算法可以分为基于用户的协同过滤算法(UserCF)和基于物品的协同过滤算法(ItemCF)。
UserCF算法主要有两步:找到和目标用户兴趣相似的用户集合找到这个集合中的用户喜欢的,且目标用户没有听说过的物品,推荐给目标用户设N(u)为用户u有过正反馈的物品集合,N(v)为用户v有过正反馈的物品集合,u和v 的兴趣相似度可以用Jaccard公式或余弦相似度计算w uv=|N(u)∩N(v)||N(u)∪N(v)|w uv=|N(u)∩N(v)||N(u)||N(v)|√以余弦相似度为例:def calcUserSimilarity1(t):w = defaultdict(dict) # 相似度矩阵for u in t:for v in t:if u != v:w[u][v] =len(t[u] & t[v]) / (len(t[u]) *len(t[v]))可以利用稀疏矩阵的性质优化上面的算法:def calcUserSimilarity2(t):itemUsers = defaultdict(set) # 物品-用户倒排表n = defaultdict(int) # 用户喜欢的物品数w = defaultdict(dict) # 相似度矩阵# 建立倒排表for u, items in ():for i in items:itemUsers[i].add(u)# 计算相似度for i, users in ():for u in users:n[u] +=1for v in users:if u != v:w[u][v] = w[u].get(v, 0) +1for u in w:for v in w[u]:w[u][v] /= (n[u] * n[v])return w然后用上面的相似度矩阵来给用户推荐和他兴趣相似的用户喜欢的物品。
用户u对物品i 的兴趣程度可以估计为p(u,i)=∑v∈S(u,K)∩N(i)w uv r viS(u,K)为和用户u兴趣最接近的K个用户,N(i)为对物品i有正反馈的用户集合,w uv 为用户u和用户v的兴趣相似度,r vi为用户v对物品i的兴趣。
def recommend(u, t, w, k):rank = defaultdict(float) # 推荐结果su =sorted(w[u].items(), key=itemgetter(1), reverse=True) for v, wuv in su[:k]:for i, rvi in t[v].iteritems():if i not in t[u]: # 排除已经有过反馈的物品rank[i] += wuv * rvireturn rank通过对不同K值下的测量发现:准确率和召回率并不和K成线性关系,通过多次测量可以选择合适的K值K越大,推荐的结果越热门,流行度增大K越大,推荐结果的覆盖率越低可以调整计算用户兴趣相似度的公式来改进算法。
注意到用户对冷门物品采取同样的行为更能说明他们的兴趣相似度,可以改用下式计算兴趣相似度w uv=∑i∈N(u)∩N(v)1log(1+|N(i)|)|N(u)||N(v)|√上式用1log(1+|N(i)|)(IIF参数)减小了热门物品对用户兴趣相似度的影响。
将calcUserSimilarity2第15行改为w[u][v] = w[u].get(v, 0) +1/ (1+len(users))UserCF算法用的并不多。
它的问题是运算复杂度大,并且难以解释推荐的结果。
ItemCF算法是目前应用最多的算法。
它也主要分为两步:根据用户行为计算物品之间的相似度根据物品的相似度和用户的历史行为给用户生成推荐列表设N(i)为喜欢物品i的用户数,N(j)为喜欢物品j的用户数,i和j的相似度可以计算为w ij=|N(i)∩N(j)||N(i)||N(j)|√这里面包含的假设是每个用户的兴趣都局限在某几个方面。
计算物品相似度使用和计算用户兴趣相似度类似的方法:def calcItemSimilarity(t):n = defaultdict(int) # 喜欢物品的用户数w = defaultdict(dict) # 相似度矩阵for u, items in ():for i in items:n[i] +=1for j in items:if i != j:w[i][j] = w[i].get(j, 0) +1for i in w:for j in w[i]:w[i][j] /= (n[i] * n[j])return w然后计算用户u对物品i的兴趣程度p(u,i)=∑j∈S(i,K)∩N(u)w ij r ujS(i,K)为和物品i最相似的K个物品,N(u)为用户u喜欢的物品集合,w ij为物品i和物品j的相似度,r uj为用户u对物品j的兴趣。
它的意思是和用户感兴趣的物品越相似的物品,越应该被推荐。
def recommend(u, t, w, k):rank = defaultdict(float) # 推荐结果reason = defaultdict(dict) # 推荐解释for j, ruj in t[u].iteritems():sj =sorted(w[j].items(), key=itemgetter(1), reverse=True) for i, wij in sj[:k]:if i not in t[u]: # 排除已经喜欢的物品rank[i] += wij *rujreason[i][j] = wij * rujreturn rankItemCF算法的一个好处是可以给出推荐解释。
对不同K值的测量可以看到:准确率和召回率和K也不成线性关系K和流行度不完全正相关K增大仍会降低覆盖率活跃用户对物品相似度的贡献要小于不活跃用户,可以用和IIF类似的IUF参数来修正物品相似度的计算公式w ij=∑u∈N(i)∩N(j)1log(1+|N(u)|)|N(i)||N(j)|√将calcItemSimilarity第9行改为w[i][j] = w[i].get(j, 0) +1/ (1+len(items))实际计算中,对于过于活跃的用户,一般直接做忽略处理。
对ItemCF的另一个改进是将相似度矩阵归一化,这样可以提高推荐的准确率,以及覆盖率和多样性。
w ij′=wijmaxiwijUserCF算法的特点是:用户较少的场合,否则用户相似度矩阵计算代价很大适合时效性较强,用户个性化兴趣不太明显的领域用户有新行为,不一定造成推荐结果的立即变化对新用户不友好,对新物品友好,因为用户相似度矩阵需要离线计算很难提供令用户信服的推荐解释对应地,ItemCF算法的特点:适用于物品数明显小于用户数的场合,否则物品相似度矩阵计算代价很大适合长尾物品丰富,用户个性化需求强的领域用户有新行为,一定导致推荐结果的实时变化对新用户友好,对新物品不友好,因为物品相似度矩阵需要离线计算用用户历史行为做推荐解释,比较令用户信服和UserCF算法相比,ItemCF算法的离线实验结果要差一些,不过这是在两者优化前的结果,实际优化后性能是接近的。