0

所以我正在使用带有 mlxtend 包的 SVM 执行特征选择。X 是具有特征的数据框,y 是目标变量。这是我的代码的一部分。

from sklearn.svm import SVC
from mlxtend.feature_selection import SequentialFeatureSelector as SFS

def 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 sfs

def 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 sfs

def featureNames(sfs):
    Feature_Names = sfs.k_feature_names_
    return Feature_Names


sfs_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)]:使用后端 LokyBackend 和 8 个并发工作人员。[并行(n_jobs=-1)]:完成 28 个,共 28 个 | 已用:剩余 2.5 秒:0.0 秒 [并行(n_jobs=-1)]:完成 28 个,共 28 个 | 经过:2.5秒完成

[2021-01-24 00:01:57] 特点:1/28 -- 得分:0.6146428161908037[Parallel(n_jobs=-1)]:使用后端 LokyBackend 和 8 个并发工作人员。

使用 rbf 内核时,代码运行良好。如果我通过将forward参数设置为 False来更改函数以执行向后消除,它运行得很好

前进=假,

它运行得很漂亮。使用线性核进行前向选择时似乎会出现冻结问题。这是一个愚蠢的错误还是我错过了一些微不足道的东西?

系统信息:

Python 3.8.5
scikit-learn 0.24.1
mlxtend 0.18.0
4

1 回答 1

0

看来这只是一个愚蠢的错误。

切换了交叉验证

cv = 10

参数为 9 并运行..

于 2021-01-25T23:16:44.947 回答