第3期 马钰,等:面对智能导诊的个性化推荐算法 ·355· if(p支配Q.front()) 式中:effect、charge、attitude为各项评分的均值, O=0-0.front(); userCounter为评分的总人数,对评分总人数取对数 0-0+p, 是用来平衡规模不同的医院之间评价人数的差别引 /体若p支配Q的头节点,将Q头节点删除,将 起的偏斜。 p插入Q*/ 4.3.3计算预测评分 4.3局部范围内基于协同过滤的评分算法 1)确定相似用户集 这一步要解决的问题就是结合用户信息与医院 在经过筛选的用户子集上计算用户相似度时采 信息,对Skyline中的医院集合进行评分与排序,算 用的是Pearson相关系数,因为Pearson相关系数能 法提出了局部范围内基于协同过滤的评分方式。该 在计算中不考虑平均值的差异,用户相似度计算公 评分算法能够充分利用用户数据以及用户之间的相 式为 似性,而且针对该领域中数据分布的局部稠密性, (ap-ia)p-ib) PEP 提出了近邻用户的筛选机制,有效降低了算法的时 sim(a,b)= (6) 间复杂度。 4.3.1近邻用户的选择 相似度系数取值在-1~1之间,-1表示完全负 传统的基于用户的协同过滤算法局限性在于不 相关,1表示完全正相关,0表示不相关。 能很好地适应大规模用户和物品数据),假定M个 2)计算预测值 用户和N个物品,在最坏的情况下,评估最多包含 预测值计算公式为 这N个物品的所有M个用户的记录,因此复杂度较 sim(a,b)(rhp-i) 高,而且评分矩阵一般非常稀疏。 pre(a,b)=Ta+ bEN sim(a.b) (7) 针对数据分布局部范围内稠密这一特性,近邻 针对空白评分数据,采用的是缺省投票机制, 用户选择算法将用户信息同样采用kd-trce索引结 即用该医院的平均评分值填充空白值。 构组织起来,可以快速找到距离该医院一定范围内 的用户集合,该集合是所有用户集合的一个很小的 5实验验证 子集。选取一定范围内的用户能够覆盖大多数的评 分记录。 5.1辅助诊疗实验 4.3.2带“分级诊疗”的医院累积评分 本文所使用的测试数据来自超星医疗知识库。 每次用户就诊后对就诊的医院的治疗效果、收 为了模拟症状表述不全的情况,每种疾病的症状信 费水平、服务态度这3个方面进行评分,系统根据 息都被拆分为两部分。实验在医疗知识库中疾病的 种类数为100和1000时分别进行了测试。 3项各自的权重计算出评分的平均值,均值计算函 统计实验结果的策略是:如果诊断结果的前10 数为 avgScore=5effect+3charge+2attitude 位中出现该疾病,则认为成功召回;如果诊断结果 (3) 中的前3位中出现该疾病,则认为诊断结果准确。 10 其中治疗效果、收费水平、服务态度3者之间的权 1)数据库中的疾病种类为100时,选取了10 重暂时定为5:3:2,这3者的权重比是通过查阅相关 种疾病,共20个测试用例,实验结果如表1所示。 资料与调查问卷的方式相结合得出的。 表1100种疾病时的辅助诊断结果 计算医院治疗每种疾病的累积评分时采用动态 Table 1 The results of auxiliary diagnoses on 100 diseases 的惩罚机制,惩罚系数设为: 位置 初步 优化 位置 初步 优化 1 9 14 7 1 0 Ld-Lhl+1 (4) 8 0 0 式中:Ld表示疾病标注的默认等级,Lh为实际所去 9 0 0 的医院。当Ld=Lh时=1,对该评分不惩罚;当Ld- Lh越大时a越小,对该评分的惩罚越严重,a在计 10 0 算每项均值时作为系数使用。 其他 0 完整的医院累积评分计算公式为 0 accScore= 5effect+3charge+attitude loguserounter 2)数据库中疾病种类为1000时,选取100种, 10 (5) 共200个测试用例,实验结果如表2所示。if (p 支配 Q.front()) Q=Q-Q.front(); Q=Q+p; /*若 p 支配 Q 的头节点,将 Q 头节点删除,将 p 插入 Q*/ 4.3 局部范围内基于协同过滤的评分算法 这一步要解决的问题就是结合用户信息与医院 信息,对 Skyline 中的医院集合进行评分与排序,算 法提出了局部范围内基于协同过滤的评分方式。该 评分算法能够充分利用用户数据以及用户之间的相 似性,而且针对该领域中数据分布的局部稠密性, 提出了近邻用户的筛选机制,有效降低了算法的时 间复杂度。 4.3.1 近邻用户的选择 传统的基于用户的协同过滤算法局限性在于不 能很好地适应大规模用户和物品数据[13] ,假定 M 个 用户和 N 个物品,在最坏的情况下,评估最多包含 这 N 个物品的所有 M 个用户的记录,因此复杂度较 高,而且评分矩阵一般非常稀疏。 针对数据分布局部范围内稠密这一特性,近邻 用户选择算法将用户信息同样采用 kd-tree 索引结 构组织起来,可以快速找到距离该医院一定范围内 的用户集合,该集合是所有用户集合的一个很小的 子集。选取一定范围内的用户能够覆盖大多数的评 分记录。 4.3.2 带“分级诊疗”的医院累积评分 每次用户就诊后对就诊的医院的治疗效果、收 费水平、服务态度这 3 个方面进行评分,系统根据 3 项各自的权重计算出评分的平均值,均值计算函 数为 avgScore = 5effect+3charge+2attitude 10 (3) 其中治疗效果、收费水平、服务态度 3 者之间的权 重暂时定为 5:3:2,这 3 者的权重比是通过查阅相关 资料与调查问卷的方式相结合得出的[14]。 计算医院治疗每种疾病的累积评分时采用动态 的惩罚机制,惩罚系数设为 α: α = 1 |Ld−Lh|+1 (4) 式中:Ld 表示疾病标注的默认等级,Lh 为实际所去 的医院。当 Ld=Lh 时 α=1,对该评分不惩罚;当|LdLh|越大时 α 越小,对该评分的惩罚越严重,α 在计 算每项均值时作为系数使用。 完整的医院累积评分计算公式为 accScore = 5effect+3charge+2attitude 10 log userCounter (5) 式中:effect、charge、attitude 为各项评分的均值, userCounter 为评分的总人数,对评分总人数取对数 是用来平衡规模不同的医院之间评价人数的差别引 起的偏斜。 4.3.3 计算预测评分 1) 确定相似用户集 在经过筛选的用户子集上计算用户相似度时采 用的是 Pearson 相关系数,因为 Pearson 相关系数能 在计算中不考虑平均值的差异,用户相似度计算公 式为 sim(a,b) = ∑ p∈P ( ra,p −r¯a ) (rb,p −r¯b ) √∑ p∈P ( ra,p −r¯a )2 √∑ p∈P ( rb,p −r¯b )2 (6) 相似度系数取值在–1~1 之间,–1 表示完全负 相关,1 表示完全正相关,0 表示不相关。 2) 计算预测值 预测值计算公式为 pre(a,b) = r¯a + ∑ b∈N sim(a,b) ( rb,p −r¯b ) ∑ b∈N sim(a,b) (7) 针对空白评分数据,采用的是缺省投票机制, 即用该医院的平均评分值填充空白值。 5 实验验证 5.1 辅助诊疗实验 本文所使用的测试数据来自超星医疗知识库。 为了模拟症状表述不全的情况,每种疾病的症状信 息都被拆分为两部分。实验在医疗知识库中疾病的 种类数为 100 和 1 000 时分别进行了测试。 统计实验结果的策略是:如果诊断结果的前 10 位中出现该疾病,则认为成功召回;如果诊断结果 中的前 3 位中出现该疾病,则认为诊断结果准确。 1) 数据库中的疾病种类为 100 时,选取了 10 种疾病,共 20 个测试用例,实验结果如表 1 所示。 表 1 100 种疾病时的辅助诊断结果 Table 1 The results of auxiliary diagnoses on 100 diseases 位置 初步 优化 位置 初步 优化 1 9 14 7 1 0 2 5 4 8 0 0 3 3 1 9 0 0 4 0 1 10 0 0 5 1 0 其他 1 0 6 0 0 2) 数据库中疾病种类为 1 000 时,选取 100 种, 共 200 个测试用例,实验结果如表 2 所示。 第 3 期 马钰,等:面对智能导诊的个性化推荐算法 ·355·