请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于最优超参数

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

正在回答 回答被采纳积分+3

4回答

提问者 慕粉4242934 2019-01-08 09:42:53

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

0 回复 有任何疑惑可以回复我~
提问者 慕粉4242934 2019-01-07 17:15:24

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

0 回复 有任何疑惑可以回复我~
  • 用的什么数据?
    回复 有任何疑惑可以回复我~ 2019-01-07 17:24:02
  • 提问者 慕粉4242934 回复 liuyubobobo #2
    用的从网上爬取的违约数据,二分类
    回复 有任何疑惑可以回复我~ 2019-01-07 17:25:48
  • liuyubobobo 回复 提问者 慕粉4242934 #3
    你试着用一个scikit-learn的内置数据能复现这个问题吗?如果能,给我一个完整的代码,我这里测试一下?
    回复 有任何疑惑可以回复我~ 2019-01-07 17:27:37
提问者 慕粉4242934 2019-01-07 17:14:18

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 回复 有任何疑惑可以回复我~
liuyubobobo 2019-01-07 16:35:16

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

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉4242934 #1
    是的,老师
    回复 有任何疑惑可以回复我~ 2019-01-07 17:10:56
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信