在功能重要性和功能选择后重建并训练新的深度学习Python模型以减少功能数量吗?

时间:2019-05-17 17:52:47

标签: python anaconda xgboost feature-selection

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

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

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

因此,考虑到我还没有足够的实验能力和英语水平,我想得到您的一些建议,以希望提高我的技能的方式最终确定它:

2:是否有一种简单的方法可以使选择的这些“标签” xgboost成为真正的标记名称,以便我仅用这3个即可测试所有模型?除非我不太了解这张图是什么?

3:我得到了这个功能重要性图(图b),我想再次找到仅使用“重要”标记(特征)进行模型制作的方法,因此需要2680多个列(标记)用于对于每位患者,我都拥有更少的功能,而这些功能对于相同的精度而言是必需的。 (我的模型实际上是99.5准确)

fig.a Nodes decisions tree by 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,对于火车误差std有0.00937,对于测试误差std有0.135

此刻我还没有真正的错误,我只是不知道如何使用这些xgboost标签进行翻译并获得有关功能,名为glboost或f93等的xgboost返回节点以及我的数据特征设置就像“ cg000001052”(它是CpG标记(图c))

图c。数据集格式 how CpG marker names (col) are displayed in dataset

然后,我将仅使用这些(已考虑的)重要功能来制作另一个模型,以查看它是否仍然具有准确的准确性,并减少了数千个标记

如果您确实需要一些部件,我将能够为您提供这些部件,此刻我对搜索一无所知,无论我的基本想法是什么,我都找不到想要的答案类型简单

作为一个新手,我会说我注意到节点图中的f93在功能选择中是第二重要的(我按Desc order显示!对我来说是一个利用,这是项目中最难的部分)

现在我感到快要结束了,目的是减少所需的标记数,而我对这样的结果感觉很接近:(然后我迷路了

非常欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

好吧,基本上我已经尝试过仅使用选定标记重置数据集

发生这种情况是行不通的,我会错过一些技术,直到尝试建立这样的新模型时出现奇怪的错误。

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

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

所以结论:它可以99.5%的准确度检测出癌症,但是需要2683个CpG标记,太糟糕了,我几乎不能成功将它重新调整为500。太糟糕了,它完成了99%

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

致谢