如何加快对6,100,000个特征的递归特征消除?

问题描述 投票:3回答:1

我正在尝试从sklearn中相当大的一组特征(〜6,100,000)中获得特征等级。这是我到目前为止的代码:

train, test = train_test_split(rows, test_size=0.2, random_state=310)
train, val = train_test_split(train, test_size=0.25, random_state=310)
train_target = [i[-1] for i in train]

svc = SVC(verbose=5, random_state=310, kernel='linear')
svc.fit([i[1:-1] for i in train], train_target)

model=svc
rfe = RFE(model, verbose=5, step=1, n_features_to_select=1)
rfe.fit([i[1:-1] for i in train], train_target)
rank = rfe.ranking_

[模型的每次训练大约需要10分钟。 610万个功能,这意味着decades的计算时间。实际上是115.9年。还有更好的方法吗?我知道rfe需要最后淘汰的结果,但是有什么办法可以通过并行化或以其他方式获得排名来加快速度?我可以使用数千个节点(感谢我工作的公司!),所以任何种类的并行性都很棒!

我确实具有线性SVM超平面的列表系数。排序这些命令很容易,但是要完成的论文将由斯坦福大学数据科学教授进行审查,他强烈反对使用非排名算法来排名...以及非斯坦福的明矾我。 :P

我可以采用更大的step,但这将消除对所有要素进行实际排名的能力。相反,我会对100,000个或10,000个功能的组进行排名,这并不是超级有用。

编辑:nSV可能有用,所以我将其包括在下面:

obj = -163.983323, rho = -0.999801
nSV = 182, nBSV = 148
Total nSV = 182
machine-learning scikit-learn svm rfe
1个回答
0
投票

您应该使用其他算法。关于如何加快功能选择的研究很多。 RFE的计算复杂性禁止使用大量功能。对于高维数据,应考虑使用方法,例如FBED(向前-向后-早期拖放),OMP(正交匹配-追踪),SES(统计等效签名),LASSO

Fbed https://arxiv.org/abs/1705.10770

OMP https://arxiv.org/abs/2004.00281

SES https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-018-2023-7

LASSO https://ieeexplore.ieee.org/document/7887916

© www.soinside.com 2019 - 2024. All rights reserved.