Python Sklearn OneClassSVM与随机化搜索CV:“;ValueError:';f';“不在列表中”;
我正在尝试训练一个用于异常检测的单类SVM。我想使用随机搜索来调整我的模型 我设置了模型参数的范围。然而,我得到这个错误,我没有找到它的原因。 ValueError:“f”不在列表中 在加载我的数据和相关库之后。我指定SVM模型的详细信息,如下所示: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
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行看到一个检查,它在可用内核列表中查找内核。这就是错误的真正来源