【发布时间】:2017-11-25 16:55:41
【问题描述】:
有没有办法使用 GridSearchCV 或任何其他内置的 sklearn 函数来为 OneClassSVM 分类器找到最佳超参数?
我目前所做的是使用这样的训练/测试拆分自己执行搜索:
Gamma 和 nu 值定义为:
gammas = np.logspace(-9, 3, 13)
nus = np.linspace(0.01, 0.99, 99)
探索所有可能的超参数并找到最佳超参数的函数:
clf = OneClassSVM()
results = []
train_x = vectorizer.fit_transform(train_contents)
test_x = vectorizer.transform(test_contents)
for gamma in gammas:
for nu in nus:
clf.set_params(gamma=gamma, nu=nu)
clf.fit(train_x)
y_pred = clf.predict(test_x)
if 1. in y_pred: # Check if at least 1 review is predicted to be in the class
results.append(((gamma, nu), (accuracy_score(y_true, y_pred),
precision_score(y_true, y_pred),
recall_score(y_true, y_pred),
f1_score(y_true, y_pred),
roc_auc_score(y_true, y_pred),
))
)
# Determine and print the best parameter settings and their performance
print_best_parameters(results, best_parameters(results))
结果存储在表单的元组列表中:
((gamma, nu)(accuracy_score,precision_score,recall_score,f1_score, roc_auc_score))
为了找到最好的准确率,f1,roc_auc 分数和参数我写了自己的函数:
最佳参数(结果)
【问题讨论】:
-
你用 GridSearchCV 试过了吗?你有任何错误吗?
-
如何在不应用交叉验证的情况下做到这一点,因为 One-Class SVM 只需要适合属于分类器正在处理的类的数据。我所做的是:在属于该类的 80% 的实例上进行训练,然后将其余 20% 与不属于该类的实例结合起来进行测试。
-
如何将数据划分为训练和测试?
-
@Yustx 您能否分享一下您是如何使用 OC-SVM 解决此问题的。我正在努力解决同样的问题,我不确定如何将您的问题与答案结合起来才能使其发挥作用。
标签: scikit-learn svm grid-search multilabel-classification hyperparameters