Python Sklearn OneClassSVM与随机化搜索CV:“;ValueError:';f';“不在列表中”;

Python Sklearn OneClassSVM与随机化搜索CV:“;ValueError:';f';“不在列表中”;,python,scikit-learn,Python,Scikit Learn,我正在尝试训练一个用于异常检测的单类SVM。我想使用随机搜索来调整我的模型 我设置了模型参数的范围。然而,我得到这个错误,我没有找到它的原因。 ValueError:“f”不在列表中 在加载我的数据和相关库之后。我指定SVM模型的详细信息,如下所示: param_dist = {"kernel":"rbf", "gamma" : np.logspace(-9, 3, 13), "nu" : np.linspace(0.01, 0.99, 9

我正在尝试训练一个用于异常检测的单类SVM。我想使用随机搜索来调整我的模型

我设置了模型参数的范围。然而,我得到这个错误,我没有找到它的原因。 ValueError:“f”不在列表中

在加载我的数据和相关库之后。我指定SVM模型的详细信息,如下所示:

param_dist = {"kernel":"rbf",
              "gamma" : np.logspace(-9, 3, 13),
              "nu" : np.linspace(0.01, 0.99, 99)}
clf = svm.OneClassSVM()

clf_cv = RandomizedSearchCV(estimator  = clf, param_distributions = param_dist,  scoring = "accuracy")
值得注意的是,我的培训数据非常庞大(500000,5)

当我试着训练模特时

clf_cv.fit(Xtrain)
我得到以下错误


*My directory*\lib\site-packages\sklearn\svm\base.py in _dense_fit(self, X, y, sample_weight, solver_type, kernel, random_seed)
    252                 cache_size=self.cache_size, coef0=self.coef0,
    253                 gamma=self._gamma, epsilon=self.epsilon,
--> 254                 max_iter=self.max_iter, random_seed=random_seed)
    255 
    256         self._warn_from_fit_status()

sklearn\svm\libsvm.pyx in sklearn.svm.libsvm.fit()

ValueError: 'f' is not in list

我试图找出错误的原因,但仍然无法找出原因。

问题在于您的
参数分布。如以下文件所述:

参数分布:dict 使用参数名称(字符串)作为键的字典,以及要尝试的分布或参数列表。分布必须为采样提供rvs方法(例如来自scipy.stats.Distributions的方法)。如果给定一个列表,则对其进行统一采样

基本上,
参数分布中的所有值都需要是列表或rvs方法。因此,在这种情况下,
内核
的值应该是
['rbf']
,而不是
'rbf'

您看到的
ValueError:“f”不在列表中的原因是字符串“rbf”被拆分为“r”、“b”、“f”,当您调用fit时,“f”被作为内核的值传递。在svm的内部,被称为。您可以在第170行看到一个检查,它在可用内核列表中查找内核。这就是错误的真正来源