问题描述
我一直在尝试使用sklearn和rbf kernal对SVM分类器进行超参数优化,并且很懒惰,我使用np.logspace创建了大量以对数间隔的C值:
tuned_parameters = [{'kernel': ['rbf'],'C': np.logspace(-5,-1),'class_weight': ['None','balanced']}]
clf = GridSearchCV(
SVC(probability = True,max_iter=100000),tuned_parameters,scoring='precision_weighted',cv=3,)
clf.fit(X_train,y_train)
print(clf.best_estimator_)
y_pred = clf.predict(X_test)
cm = confusion_matrix(y_test,y_pred)
print(classification_report(y_test,y_pred))
由于最佳C值的有效位数大约为12位,因此我仅用第一位再次运行它,最后得到了完全不同的结果。看起来C的微小变化会使分类错误的样本数量产生非常大的非单调变化。实际上,看起来C中的位数在误分类中起着与实际C值一样大的作用。 一些示例(根据保留的数据计算出的精度):
C value precision (macro avg)
0.00199999999 0.83
0.00189899991 0.86
0.002 0.59
0.00200000001 0.83
1 0.62
20 0.62
2000 0.63
任何人都可以帮助我了解这里发生的情况吗?这根本不是我理解错误分类惩罚应该表现出来的方式,而且我不确定现在如何进行超参数优化。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)