采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
bobo老师,关于支持向量机里的超参数C,我利用网格搜索做了1e-9到1e9的循环,判断出最好的C及相应的最高准确率,在我的数据中C=100时显示准确率达到最高,但是当我把这个结果带到LinearSVC(C=100)并且fit和score后的准确率与之前判断出的最高准确率不一样。 而当我变换循环的范围,比如让C从1到1e9时,判断出的最好C竟然为1e7,最高准确率自然也不一致。 不知道老师明不明白我说的,有点乱,希望能解答,谢谢。
当我一旦改变第二个模块里面的t取值范围时,相对应的准确率都会变化,比如range(-9,9)和range(-8,8)这两种情况下t=0时的准确率竟然不一样,按理说这个准确率不应该随着range的变化而变化吧
bobo老师,我先用下面的模块来判断最好的C,然后将这个最好的C放进第一模块后得到的准确率与第二模块得到的相应的准确率不一样
用的什么数据?
用的从网上爬取的违约数据,二分类
你试着用一个scikit-learn的内置数据能复现这个问题吗?如果能,给我一个完整的代码,我这里测试一下?
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
#调参,寻找最好的超参数Cdef 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
没有特别理解你的问题。你的网格搜索的SVM是LinearSVC吗?
是的,老师
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.4k 19
3.4k 17
2.9k 15
1.6k 15
1.4k 14