system: [SYSTEM]

user: 2. 本文算法 本文利用对用户基本属性的相似度与评分相似因子相结合的方法，以此来挑选更合适的相似邻居。 S i m ( u ， v ) = λ S i m A t t r ( u ， v ) + ( 1 − λ ) S i m S c o r e ( u ， v ) (1) S i m A t t r ( u ， v ) 为用户基本属性的相似度， S i m S c o r e ( u ， v ) 为用户评分的相似度； λ 为用户的基本属性在相似度计算中所占的权重比例， ( 1 − λ ) 为用户对项目的评价占整个相似度计算的权重比例。 对于新用户的冷启动问题，在新用户完全未评价任何项目前，需要把用户基本属性的相似度权重调到1。而考虑到随着新用户对项目评分的增多，应该加大对于评分相似性的重视程度，削减属性对于最终相似度的不利影响，以便用户相似度计算的重点由用户属性逐渐转移到用户评分上面，并且要保证这是一个平滑过渡的过程，以便提高在冷启动条件下向非冷启动转换时可以提高我们的推荐准确度，所以将函数引入权值 λ ： λ = 2 1 + exp ( I i ) (2) 当评价过的项目I i 由0逐渐增加的时候，用户基本属性的相似度权重值由1逐渐降到接近于0；而评分相似度的权重值逐渐升到1。 2.1. 用户基本属性相似度 用户在注册的时候填写的注册信息往往是不完整，比较稀疏的，根据国外的数据统计，对于性别、年龄、职业、爱好的填写率最高而且也是反应个人偏好比较准确的属性，而时间戳Time作为用户对项目评分与项目产生时间的差值，可以用来表示用户是否为活跃用户，可以提高对较新的项目推荐机率。可得属性集合Puser = {Sex， Age， Profession， Interest， Time， ...}。 2.1.1. 用户文本型属性相似值 对于Sex、Profession、Interest以及其余文本型的属性来说，若属性相同则相似属性的值为1，反之，不同相似属性的值为0。设S(k)为各个属性的相似值， P u i ( k ) 表示用户i的第k个属性， P u j ( k ) 表示用户j的第k个属性，则有： S ( k ) = { 1 ，     P u i ( k ) = P u j ( k ) 0 ，     P u i ( k ) ≠ P u j ( k ) (3) 2.1.2. 用户数值型属性相似值 对于Age、Time等这类数值型的属性就采取函数分段处理得方法，从而得到更合适的相似值。 ① 关于年龄Age的分段函数，设Age u 与Age v 为用户u、v的年龄，则有相似值S Age 为： S A g e = { 1 ，                                             A g e u = A g e v 1 | A g e u − A g e v | ，       A g e u ≠ A g e v (4) S Age 的取值为 { 1 ， 1 2 ， 1 3 ， ⋯ ， 1 n } 。 ② 关于评分时间分段取值，T u = t u − t i ；t u 、t i 分别为用户u发布评论时间、项目i生成时间，T u 为两者差值，差值越小证明用户u越活跃。 S T i m e = { 1 ，         0 ≤ T u ≤ 1   week ; 1 2 ，     1   week ≤ T u ≤ 1   month ; 1 3 ，       1   month ≤ T u ≤ 1   year ; 0 ，         T u > 1   year   or   T u = 0 ; (5) 根据各个属性对于真实相似度的影响不同，我们设置不同的权值系数 ω i ，以缓解不同属性对结果造成的相似度误差。这样，当 S i m A t t r 的值越大，说明用户间的相似性越高，反之，则越小。 S i m A t t r = ∑ i ∈ A t t r ω i × S A t t r ( u ， v ， i ) (6) ∑ i = 1 n ω i = 1 (7) 举例说明：用户u 1 = {男，24，计算机，科技，2017/2/13}，用户v 1 = {女，27，土木，音乐，2017/3/1}。 S i m A t t r = 0.2 × 0 + 0.4 × 1 / 3 + 0.2 × 0 + 0.1 × 0 + 0.1 × 1 / 2 = 0.183. 用户u 2 = {男，24，计算机，音乐，2017/2/13}，用户v 2 = {男，22，计算机，IT互联网，2017/4/16}。 S i m A t t r = 0.2 × 1 + 0.4 × 1 / 2 + 0.2 × 1 + 0.1 × 0 + 0.1 × 1 / 3 = 0.633. 直观的来看，第一组用户相似程度较低，而第二组用户相似程度较高。最终的属性相似度运算结果也基本与观察相符合。 2.2. 用户评分相似度 用户评分对于精确推荐至关重要，而仅仅通过用户对项目的单一的评分关系来确定用户之间的相似度是不准确的，所以本文引入了基于评分的多种相似因子算法，将相似因子算法相结合可得到较为准确的评分相似度。 2.2.1. 用户评分的相似因子 由于用户对某项目的评分是呈非线性变化趋势的，所以通过引入sigmoid函数来表现用户相似度的非线性变换，使得用户的差异变得相对平滑。引入的用户评分相似因子算法如下： S i m 1 ( u ， v ) = 1 − 1 1 + exp ( − | R u p − R v p | ) (8) R up 与R vp 分别表示用户u、v对项目p的评分，若用户u与用户v对于项目之间的评分差越小，则式(8)的值越大，表示用户U与用户V的相似性取值越高， S i m 1 ( u ， v ) 的取值范围为(0， 1/2)。 2.2.2. 用户偏好的相似因子 若用户不喜欢某项目就会给出其评分区间相对较低的分数，而喜欢该项目的话，分数就会较高。但由于用户的个人偏好与评分标准各有不同，为了尽量找到偏好的平衡点，引入用户各自的项目评分的平均分，为了消除因为评判标准不同带来的消极影响，用户偏好相似因子的算法则为： S i m 2 ( u ， v ) = 1 1 + exp ( − ( R u p − R u ¯ ) ( R v p − R v ¯ ) ) (9) ① ( R u p − R u ¯ ) ， ( R v p − R v ¯ ) 为一正向偏移、一负向偏移，且均较大偏移值。则 S i m 2 ( u ， v ) 取值较小，此相似因素较低。 ② ( R u p − R u ¯ ) ， ( R v p − R v ¯ ) 两正向偏移或者两负向偏移，且有较大偏移值。则 S i m 2 ( u ， v ) 取值趋近于1，此种情况下相似因素较高。 ③ 若 ( R u p − R u ¯ ) ， ( R v p − R v ¯ ) 一正向偏移、一负向偏移，但是偏移值较小，则 S i m 2 ( u ， v ) 趋近于1/2，则相似因素趋于中间值附近。 2.2.3. 用户评价项目的相似因子 S i m 3 ( U i ， U j ) = | I U i ∩ I U j | | I U i ∪ I U j | (10) 用户U i 与用户U j 共同评分的项目越多，则 S i m 3 ( U i ， U j ) 数值越大，相似因子越大，相似程度越高。 2.2.4. 相似因子综合计算 结合上诉三种相似因子算法，可以得到基于评分的最终的相似度计算方法： S i m s c o r e ( u ， v ) = ( 1 I u v ∑ i ∈ I u v S i m 1 ( u ， v ， i ) ⋅ S i m 2 ( u ， v ， i ) ) ⋅ S i m 3 ( u ， v ) (11) 2.3. 本文算法设计 本文算法设计流程图如图1所示： 输入：用户基本属性矩阵、用户评分矩阵 输出：推荐集合 步骤： Step 1：根据用户基本属性计算出属性相似度矩阵； Step 2：根据用户历史行为记录计算出评分相似度矩阵； Step 3：根据用户属性与评分相似度矩阵计算出最终用户相似度矩阵； Step 4：根据用户最终相似度矩阵得到待测用户u最相似的K个近邻，通过式(12)可以得到相应的预测评分，以获得TOP-N推荐方案。 r u i ¯ = ∑ k ∈ N K S i m ( u ， i ) ⋅ r k i ∑ k ∈ N K S i m ( u ， i ) (12) N K 代表与用户相似度最高的K个邻居；r ki 表示用户k对项目i的评分。