关于最优超参数
来源: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的变化而变化吧
00 -
慕粉4242934
提问者
2019-01-07
bobo老师,我先用下面的模块来判断最好的C,然后将这个最好的C放进第一模块后得到的准确率与第二模块得到的相应的准确率不一样
082019-01-08 -
慕粉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_score00 -
liuyubobobo
2019-01-07
没有特别理解你的问题。你的网格搜索的SVM是LinearSVC吗?
012019-01-07
相似问题