参考,太久远了,应该是这个网站,但是很难搜到,国内搜索比较麻烦
通过网格搜索是为支持向量机找到最佳值参数。
单分类支持向量机一般拿来做异常检测任务,直接使用GridSearchCV
不太好写。
可以借用for循环和ParameterGrid
实现,目标是AUC
from sklearn.model_selection import ParameterGrid
from sklearn.metrics import roc_auc_score
import numpy as np
from sklearn import svm
def main(X_train,X_test,y_test):
# 搜索最佳参数
grid = {'gamma' : ['scale', 'auto'],
'nu' : np.linspace(0.01, 0.97, 33),
'kernel':['rbf','linear', 'poly', 'rbf', 'sigmoid']}
clf = svm.OneClassSVM()
maxAuc = 0
for z in ParameterGrid(grid):
clf.set_params(**z)
clf.fit(X_train)
y_pred_test = clf.predict(X_test)
# ocsvm输出为 负样本:-1,正样本: 1
for i in range(y_pred_test.shape[0]):
if y_pred_test[i]==-1:
y_pred_test[i]=0
auc = roc_auc_score(y_test, y_pred_test)
if maxAuc < auc:
maxAuc = auc
bestParams = z
print('bestParams', bestParams)
print('maxAuc',maxAuc)
其中clf.set_params(**z)
中的**z是关键字参数,本质上是一个 dict。