我正在处理病人数据。我希望根据一组症状预测前N种疾病。
这是我的数据集的一个样本:总共有大约1200种独特的症状和大约200种独特的诊断
ID 症状组合 诊断 病人1: 发热,食欲不振,感冒 流感 病人2: 脱发,血压 甲状腺 病人3: 脱发,血压 流感 病人4: 喉咙痛,关节痛 病毒性发热 .. ..病人30000: 呕吐,恶心 腹泻
我计划用这个数据集做的是使用症状列为每行病人数据生成word2vec词向量。生成向量后,我想构建一个分类器,每行中的向量作为我的自变量,诊断作为目标分类变量。
我应该取向量的平均值来生成由word2vec生成的特征向量吗?如果是的话,是否有任何进一步的说明?
回答:
你可以将一组症状的词向量平均起来,得到一个相同维度的单一特征向量。(如果你的词向量是100维的,将它们平均起来会得到一个单一的100维总结向量。)
但这种平均方法相当粗糙,并且有稀释每种症状信息的风险。
(作为一个简化的、风格化的例子,假设一个护士在晚上9点测量了一个病人的体温,发现是102.6°F。然后在早上7点再次测量,发现是94.6°F。医生问,“我们的病人体温怎么样?”,护士回答平均值,“98.6°F”。医生说,“哇,有人体温正好是正常健康温度,这很少见。下一个病人!”平均值隐藏了重要信息:病人既有发热又有危险的低温。)
听起来你有一组控制的症状词汇,只有已知、有限且数量不大的症状标记:大约1200个。
在这种情况下,将它们转换为表示每种症状是否存在的分类向量可能比基于word2vec的方法效果好得多。无论你有100种不同的症状还是10,000种不同的症状,你都可以将它们转换为一个大的由1和0组成的向量,按顺序表示每种可能的症状,许多分类器都能很好地处理这种输入。
如果将症状列表视为文本中的单词,那么文本的简单“词袋”表示本质上就是这种分类表示:一个1200维的“单热”向量。
除非这是某个学术练习,你被要求使用word2vec,否则这不是一个好的起点,可能也不是最佳解决方案的一部分。为了训练好的词向量,你需要比你拥有的更多的数据。(要重用来自别处的词向量,它们应该与你的领域很好地匹配。)
如果有成千上万到数十万个术语,并且有许多关于每个术语使用情况的上下文示例来绘制它们在密集共享空间中的细微意义变化,词向量最有可能帮助你。只有30,000个“文本”,每个大约3-5个标记,只有大约1200个独特标记,对于word2vec来说是相当小的。
(我在你之前的一个问题的评论中提出了类似的观点。)
一旦你将每一行转换为特征向量——无论是通过平均症状词向量,还是更好地创建一个词袋表示——你可以并且应该尝试许多不同的分类器,看看哪个效果最好。
许多分类器可以相互替代,并且根据你的数据量,在循环中测试它们可能只需要不到一个小时或几个小时。
如果完全不知道从哪里开始,这个scikit-learn
图形指南左上角的“分类器”部分列出的任何内容都值得尝试:
如果你想考虑更广泛的可能性,并且获得一个大致直观的想法,了解哪些分类器最能发现底层高维数据中的某些“形状”,你可以查看这个scikit-learn
“分类器比较”页面中展示的所有内容,这些图形表示它们如何处理一个嘈杂的2D分类挑战(而不是你的1200D挑战):