我在使用Python
的Scikit-Learn
库进行异常值检测。我使用的是OneClassSVM
。我遇到了一个问题,每次运行我的代码时(没有错误),它都会打印[LibSVM]。
我不知道为什么会这样,我在代码中没有任何打印函数。
out_cls = [['One class SVM',OneClassSVM(cache_size=80, coef0=0.5, gamma ='auto', kernel = 'poly', random_state= None, shrinking=True, tol = 0.1, verbose = True, nu = 0.2)], ['Isolation Forest', IsolationForest(behaviour='new', contamination='auto',max_features=4, max_samples=2, n_estimators= 90, random_state=1)]]r = dffor out in out_cls: cls = out[1] model = cls.fit(x) prediction = model.predict(x) # print(model.best_params_) result = [] for i in prediction: if i == -1: result.append('BOT') else: result.append('good') r[out[0]] = result
回答:
scikit-learn中所有底层的SVM功能实际上都是基于LibSVM的;从OneClassSVM
的文档中可以看到:
实现是基于libsvm的。
在源代码中也可以看到许多对此的引用。
这个控制台输出只是在模型定义中设置verbose=True
的副作用;从文档中的简单示例中可以看到:
from sklearn.svm import OneClassSVMX=[[0], [0.44], [0.45], [0.46], [1]]clf = OneClassSVM(gamma='auto', verbose=True)clf.fit(X)
显示输出为:
[LibSVM]OneClassSVM(cache_size=200, coef0=0.0, degree=3, gamma='auto', kernel='rbf', max_iter=-1, nu=0.5, random_state=None, shrinking=True, tol=0.001, verbose=True)
设置verbose=False
可以消除[LibSVM]
的显示,这无论如何都不是问题,因为它不会以任何方式影响你的代码。