我正在尝试从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分钟。对于6,100,000个计算时间的数十年的功能。实际上115.9岁。有什么更好的方法吗?我知道RFE需要上次淘汰的结果,但是有什么办法可以通过并行化或获得排名不同的方式加快这种速度?我可以使用数千个节点(感谢我工作的公司!),所以任何类型的并行性都很棒!
我确实具有线性SVM超平面的列表系数。订购这些非常容易,但是要做的论文将由斯坦福数据科学教授审查,他有强有力的保留地不反对使用非级别算法进行排名。...我。:p
我可以使用较大的step
,但这将消除实际对所有功能进行排名的能力。相反,我将排名100,000或10,000个功能的组,这并不有用。
编辑:NSV可能很有用,因此我在下面包括了:
obj = -163.983323, rho = -0.999801
nSV = 182, nBSV = 148
Total nSV = 182
您应该使用其他算法。关于如何加快功能选择的研究,已经进行了大量研究。RFE的计算复杂性对于大量功能而言是令人难以置信的。您应该考虑使用appoaches来用于高尺寸数据,例如 fbed (前向后回答), omp (orthogonal-matching-pursuit), ses> ses> ses(统计上的等效符号), lasso 等。
fbed https://arxiv.org/abs/1705.10770
opm https://arxiv.org/abs/2004.00281
SES https://bmcbioinformatics.biomedcentral.com/articles/10.1186/S12859-018-018-2023-7
lasso https://ieeexplore.ieee.org/document/7887916