Machine learning 如何在6100000个功能上加速递归功能消除?

Machine learning 如何在6100000个功能上加速递归功能消除?,machine-learning,scikit-learn,svm,rfe,Machine Learning,Scikit Learn,Svm,Rfe,我试图从sklearn中相当大的一组功能(~6100000)中获得功能的排名。以下是迄今为止我掌握的代码: 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(verbos

我试图从sklearn中相当大的一组功能(~6100000)中获得功能的排名。以下是迄今为止我掌握的代码:

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分钟。对于6100000功能,这意味着数十年的计算时间。实际上是115.9年。有更好的方法吗?我知道rfe需要最后一次淘汰的结果,但有没有办法通过并行化或以不同方式获得排名来加快这一过程?我可以使用数千个节点(感谢我工作的公司!),所以任何类型的并行都会很棒

我有线性支持向量机超平面的列表系数。排序很容易,但这篇论文将由斯坦福大学的一位数据科学教授进行审查,他对使用非排名算法进行排名有强烈的保留……以及像我这样的非斯坦福校友:P

我可以采取更大的
步骤
,但这将取消对所有功能进行实际排名的能力。相反,我会对100000或10000个功能的组进行排名,这并不是非常有用

编辑:nSV可能很有用,因此我将其包括在下面:

obj = -163.983323, rho = -0.999801
nSV = 182, nBSV = 148
Total nSV = 182

您应该使用不同的算法。关于如何加快特征选择,已经有很多研究。RFE的计算复杂性对于一大组功能来说是不可接受的。你应该考虑使用高维数据的APPOACH,如<强> fBest(向前向后早期下降),<强> OMP>强>(正交匹配追踪),<强> SES>(统计等效签名),<强> LasSO >强>等

Fbed

OMP

SES


套索

PCA或随机投影如何?@LukaszTracewski如何使用PCA对特征进行排序?我会检查哪些特征贡献最大:您可以使用sklearn的相关矩阵检查每个特征与输出的相关性。排序,并选择最相关的N个数量的特征?@塔加我会考虑让它运行到完成,因为30分钟不是太多。或者,可以在每次递归中删除多个功能。这将使运行时的速度提高大约n倍(其中n是每次递归时删除的功能的数量)。感谢您的建议,但我们希望获得排名。在这方面有更好的算法吗?如果你想获得最重要(即选定)功能的排名,那么你可以使用建议的算法。但是,如果您想获得所有功能的排名,那么如何做到这一点并不是无关紧要的。你必须更好地定义你实验的期望输出。例如,您可以使用目标变量测试每个特征的无条件独立性,然后使用测试的显著性输出(统计)对它们进行排序。不过,此方法不会测试与目标的条件依赖性。