我在使用mlxtend包的SVM进行特征选择。X是一个包含特征的数据框,y是目标变量。这是我的代码的一部分。
from sklearn.svm import SVCfrom mlxtend.feature_selection import SequentialFeatureSelector as SFSdef SFFS(X, y, C_GS, gamma_GS, kernel_GS): sfs = SFS(SVC(kernel = kernel_GS, C = C_GS, gamma = gamma_GS), k_features = (1, num_of_features), forward= True, floating = False, verbose= 2, scoring= 'roc_auc', #scoring= 'accuracy', cv = 10, n_jobs= -1 ).fit(X, y) return sfsdef SFFS_lin(X, y, C_GS, kernel_GS): sfs = SFS(SVC(kernel = kernel_GS, C = C_GS), k_features = (1, num_of_features), forward= True, floating = False, verbose= 2, scoring= 'roc_auc', cv = 10, n_jobs= -1 ).fit(X, y) return sfsdef featureNames(sfs): Feature_Names = sfs.k_feature_names_ return Feature_Namessfs_lin = SFFS_lin(X, y, 1,'linear')#sfs_rbf = SFFS(X, y, 1, 'auto', 'rbf')names = featureNames(sfs_lin)print(names)
代码开始运行,但不久后就在这里卡住了:
[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrentworkers. [Parallel(n_jobs=-1)]: Done 28 out of 28 | elapsed: 2.5sremaining: 0.0s [Parallel(n_jobs=-1)]: Done 28 out of 28 |elapsed: 2.5s finished
[2021-01-24 00:01:57] Features: 1/28 — score:0.6146428161908037[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.
当使用rbf核时,代码运行得很顺畅。如果我将函数改为通过设置forward参数为False来执行向后消除,
forward=False,
它也运行得很顺畅。卡住的问题似乎出现在使用线性核进行前向选择时。这是愚蠢的错误还是我错过了什么琐碎的东西?
系统信息:
Python 3.8.5scikit-learn 0.24.1mlxtend 0.18.0
回答:
看来这只是一个愚蠢的错误。
将交叉验证参数
cv = 10
改为9后,它就运行了..