【发布时间】:2015-06-23 14:48:22
【问题描述】:
背景
我正在使用支持向量机对不平衡类进行二元分类(即,我的训练集中正负标签的比率约为 100)。我想优化以下参数:m(我从训练数据中采样的正负标签的比率)、w(类权重)和 SVM 参数 C。
问题
我想通过网格搜索来优化这些参数,并定义了分数函数如下:
def svm_acc(X, y, m, w, c):
X, y = balanceClasses(X, y, m)
clf = svm.SVC(kernel='rbf', C=c, class_weight = {1: w})
scores = cross_validation.cross_val_score(clf, X, y, 5)
return( scores.mean() )
其中 X 是特征矩阵,y 是二进制分类标签,svm_acc 返回 5 折交叉验证的平均准确度。我在 optunity 中尝试了以下方法:
import optunity as opt
s = opt.solvers.GridSearch(mult=[1,10], w=[1,10], c=[1,10])
best_pars, _ = s.optimize(svm_acc, X=X, y=y)
但我收到此错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: optimize() got an unexpected keyword argument 'X'
我从文档中收集到 optimize 不接受任何额外的关键字参数(X 和 y)。我尝试了上述的不同变体,但无法弄清楚如何将不应优化的其他参数传递给例程。
据我所知,我不能使用 scikit-learn 的网格搜索,因为我想优化 m 参数,这不是估计器的“内在”。谁能指出我的解决方案或其他用于进行网格搜索的 python 包?
【问题讨论】:
标签: python optimization scikit-learn