首页 > 解决方案 > 在特征重要性和特征选择之后重建和训练新的深度学习 Python 模型以减少特征量?

问题描述

我正在用 python 学习深度学习概念,到目前为止我的项目已经完成了。这个开放项目的目的是检测肝癌,这样患者就可以避免活检,并且可以比平时更快地痊愈。

我有一个包含 427 名患者的数据集,其中遗传标记(2687 列)甲基化率已确定为 0 到 1(0 = 未甲基化,1 = 完全甲基化)。

我使用了 xgboost,我得到了一个由 xgboost 重命名的特征的节点图(所以我的第一个问题是我不知道这些 xgboost 图的标签真正代表了哪些标记(显然有 3 个测试(6 个“是”或“否”决策树,图 a),xgboost 可以确定患者是否患有肝癌)

所以,考虑到我没有足够的经验,也不是英语母语,我想得到你的一些建议,以根据我的技能完成它:

2:有没有一种简单的方法可以让 xgboost 选择的这些“标签”成为真正的标记名称,这样我就可以只用这 3 个来测试我的所有模型?除非我不太明白这张图是什么?

3:我得到了这个特征重要性图(图 b),我想找到只用“重要”标记(特征)制作模型的方法,所以每个患者都有 2680 多个列(标记),相同精度所需的功能要少得多。(我的模型实际上是 99.5 准确)

图.a xgboost的节点决策树

fig.b(功能重要性)链接,因为您需要电动缩放:https ://cdn.discordapp.com/attachments/314114979332882432/579000210760531980/features_importances.png

我有我的整个笔记本,但我不知道如何向您展示有趣的代码部分(因为您必须导入数据集等),即使是一天前工作以获得特征重要性形状的代码(可能会返回一个简单的2687) 不再为我工作,例如当我执行单元格时“'Booster' 对象没有'feature_importances_'”。我不知道为什么......

用于指示当我这样做时

cv_results = xgb.cv(dtrain=data_dmatrix, params=params, nfold=100, num_boost_round=100, early_stopping_rounds=10, metrics="error", as_pandas=True, seed=123)
cv_results

我的训练误差平均值为 0.0346,训练误差标准为 0.00937,测试错误标准为 0.135

目前我并没有真正的错误,我只是不知道如何将那些 xgboost 标签翻译并进入相关的特征,xgboost 返回名为 fl1754 或 f93 等的节点,我在数据集中的特征就像“cg000001052”(这是 CpG 标记(图 c))

图c。数据集格式 CpG 标记名称 (col) 如何在数据集中显示

然后我会做另一个只有这些(考虑过的)重要特征的模型,看看它是否仍然非常准确,少了数千个标记

如果你真的需要一些零件,我可以提供给你,此刻我只是迷失在我的搜索中我找不到我想要的答案类型我的基本想法很简单

作为一个新手,我会说我注意到节点图中的 f93 在特征选择中是第二重要的(我按 Desc 顺序显示!对我来说是一个漏洞,说实话是项目中最难的部分)

现在我感觉接近尾声了,目的是减少所需的标记量,我对这样的结果感到非常接近:(然后我迷路了

任何帮助都非常受欢迎!

标签: pythonanacondaxgboostfeature-selection

解决方案


好的,所以基本上我尝试仅使用选定的标记重置数据集

发生它不起作用,我错过了一些技术,直到我在尝试设置这样的新模型时遇到奇怪的错误。

我最终决定这是项目的结束,

解决方案是:没有可达的解决方案

所以结论:它以 99.5% 的准确率检测癌症,但需要 2683 个 CpG 标记,太糟糕了,我无法将它重新调整为 500,因为我几乎成功了。太糟糕了,它已经完成了 99%

无论如何感谢您的宝贵知识和帮助

问候


推荐阅读