HealthChatbot
基于决策树的症状初诊聊天机器人,Tkinter GUI 可视化问诊流程
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于决策树的症状初诊聊天机器人,Tkinter GUI 可视化问诊流程
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,你突然感觉头痛欲裂、浑身发烫,想查查自己是不是发烧了——但这个点医院门诊早就关了,你只能打开搜索引擎,输入"头痛发烧怎么办",然后被淹没在一堆真假难辨的信息里。
这就是 HealthChatbot 试图解决的问题:用一个对话机器人,模拟全科医生的问诊思路,通过一系列"是/否"选择题,帮你判断自己可能得了什么病,并推荐相应的科室医生。
这个项目来自印度一所大学的计算机专业毕业设计,由四名女大学生在第七学期(相当于大三下)完成。它的代码不复杂,却清晰地展示了如何用机器学习构建一个落地的医疗辅助工具——没有 GPT-4,没有 RAG,就是最朴素的决策树。
HealthChatbot 的核心技术栈非常"复古"——它用的是 scikit-learn 的 DecisionTreeClassifier,这几乎是机器学习入门教材第一章就会讲到的算法。
项目提供了两份关键数据文件:
数据格式是典型的布尔矩阵:每行代表一个样本,每列对应一个症状,值为 0 或 1(有无该症状)。这种编码方式非常适合决策树处理。
用户描述症状 → Tkinter GUI 收集 → 转换为布尔向量 → 决策树推理 → 输出疾病预测 + 推荐医生
具体来说,Tkinter 图形界面会逐一向用户提问(比如"你是否头痛?"、"是否发烧?"),用户回答 Yes/No,系统将回答转为特征向量,送入训练好的决策树模型,最终输出预测疾病,并从 doctors_dataset.csv 中检索相关科室的医生推荐。
决策树的优势在这里体现得淋漓尽致:它可以生成可解释的推理路径——不仅告诉你"你可能得了 X 病",还能告诉你"因为你有症状 A、B、C,所以判断为 X"。这种可解释性在医疗场景下至关重要,没有哪个医生会相信一个黑盒模型。
| 文件 | 功能 |
|---|---|
QuestionDiagonosisTkinter.py | Tkinter GUI 主程序:登录注册界面 + 症状问答 + 医生推荐 |
healthcare_chatbotConsole.py | 命令行版本:同样的逻辑,无图形界面 |
newlogin.py | 用户登录/注册系统(简陋的 Tkinter 实现) |
Training.csv / Testing.csv | 症状-疾病训练/测试数据集 |
doctors_dataset.csv | 医生信息数据库 |
numpy # 数值计算
pandas # CSV 数据读取
scikit-learn # 决策树分类器
matplotlib # 可视化(可能在可视化决策树时用到)
tkinter # GUI(Python 内置,系统级依赖)
从代码中可以看到,模型使用 75% 数据训练、25% 数据测试(train_test_split(test_size=0.25)),并通过 classifier.feature_importances_ 计算各症状的特征重要性,按重要性降序排列用于后续推理优化。
对普通用户而言,最简方式是:
pip install numpy pandas scikit-learn matplotlib
python QuestionDiagonosisTkinter.py # GUI 版本
# 或
python healthcare_chatbotConsole.py # 命令行版本
需要确保系统已安装 Python 3.x 和 Tkinter(Ubuntu: apt install python3-tk)。
重要提示:这个项目绝不应该被用于真实的医疗决策。
数据质量问题:Training.csv 的症状-疾病映射关系来自何处?是否经过医学专业人士验证?这些信息在 README 中完全没有说明。
过拟合风险:一个课程级别的决策树,极有可能在训练集上表现良好,但泛化能力存疑。用户描述的症状稍有偏差,模型就可能给出错误结论。
无免责条款:代码中没有任何"本产品不构成医疗建议"的免责声明,在医疗场景下这是巨大的法律风险。
登录系统形同虚设:newlogin.py 的实现极其简陋,密码存储方式不明,不适合任何敏感场景。
HealthChatbot 代表的,是 AI 医疗应用的一个**最小可行产品(MVP)**路径:用简单的机器学习算法,结合直观的 UI,覆盖"看病前自我判断"这个长尾需求。
疫情后,医疗机构对在线问诊工具的需求急剧增长。类似 HealthChatbot 的轻量级方案,可以作为:
但前提是:必须经过严格的临床验证和监管审批,才能真正用于患者。
| 维度 | 评分 | 说明 |
|---|---|---|
| 技术实现 | 两星 | 决策树教科书级实现,适合教学 |
| 工程完成度 | 一星 | 无容器化、无测试、无 CI/CD |
| 医疗价值 | 一星 | 仅供学习,不可用于临床 |
| 可扩展性 | 一星 | 代码硬编码较多,难以二次开发 |
HealthChatbot 的价值不在于它能做什么,而在于它展示了怎么做:如何将医疗问诊流程转化为机器学习问题,如何设计一个用户友好的症状收集界面,如何用决策树给出可解释的诊断建议。对 AI 医疗应用感兴趣的开发者,可以把它当作一个极简的入门级参考项目,从中发现改进空间——比如引入更强大的 NLP 模型、增加症状描述的灵活性、接入真实的医生数据库等。