关于最优超参数

来源:11-4 scikit-learn中的SVM

慕粉4242934

2019-01-07

bobo老师,关于支持向量机里的超参数C,我利用网格搜索做了1e-9到1e9的循环,判断出最好的C及相应的最高准确率,在我的数据中C=100时显示准确率达到最高,但是当我把这个结果带到LinearSVC(C=100)并且fit和score后的准确率与之前判断出的最高准确率不一样。
而当我变换循环的范围,比如让C从1到1e9时,判断出的最好C竟然为1e7,最高准确率自然也不一致。
不知道老师明不明白我说的,有点乱,希望能解答,谢谢。

写回答

4回答

慕粉4242934

提问者

2019-01-08

当我一旦改变第二个模块里面的t取值范围时,相对应的准确率都会变化,比如range(-9,9)和range(-8,8)这两种情况下t=0时的准确率竟然不一样,按理说这个准确率不应该随着range的变化而变化吧

0
0

慕粉4242934

提问者

2019-01-07

bobo老师,我先用下面的模块来判断最好的C,然后将这个最好的C放进第一模块后得到的准确率与第二模块得到的相应的准确率不一样

0
8
慕粉4242934
回复
liuyubobobo
谢谢回复!
2019-01-08
共8条回复

慕粉4242934

提问者

2019-01-07

def SVM_predict_score(X_train, y_train, X_test, y_test, C):
   svc = LinearSVC(C=C)
   svc.fit(X_train, y_train)
   true_ratio = svc.score(X_test, y_test)
   print "SVM方法的准确率:" + str(true_ratio)
   return true_ratio

#调参,寻找最好的超参数C
def find_best_C(X_train, y_train, X_test, y_test):
   best_score = 0.0
   best_C = -1
   for t in range(-9, 10):
       print t
       C = float(10 ** t)
       accuracy = SVM_predict_score(X_train, y_train, X_test, y_test, C)
       if accuracy > best_score:
           best_C = C
           best_score = accuracy
   print best_C, best_score

0
0

liuyubobobo

2019-01-07

没有特别理解你的问题。你的网格搜索的SVM是LinearSVC吗?

0
1
慕粉4242934
是的,老师
2019-01-07
共1条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程