根据sklearn文档,可以更改某些模型中的decision_function
方法以改善结果。例如,如果您希望在二进制分类问题中具有更高的召回率,则可以将阈值更改为小于0的值。但是,因为如果您在测试中这样做,则可能会添加一些训练后信息,因此预测将过于现实。
我想知道是否有一种方法可以通过使用交叉验证来选择阈值而不使用测试集。这样,您就可以使他们以更安全的方式将其应用于测试集。
在此示例中,我们有一个简单的实现,而没有使用交叉验证策略(摘自Python机器学习入门书)
from mglearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
X, y =make_blobs(n_samples=(400,50), centers=2, cluster_std=[7.0,2],
random_state=22)
X_train, X_test, y_train, Y_test = train_test_split(X,y,random_state=0)
svc= SVC(gamma=0.5).fit(X_train,y_train)
y_pred_lower_threshold = svc.decision_function(X_test) > -.8
print(classification_report(Y_test, y_pred_lower_threshold))
哪个会导致这个结果
precision recall f1-score support
0 1.00 0.81 0.89 104
1 0.31 1.00 0.47 9
avg / total 0.95 0.82 0.86 113
我很确定必须有一种使用验证集的方法。但是即使我知道了,也无法弄清楚如何正确应用它。