如何获取LinearSVC文档分类中的分类判定阈值数值?
获取LinearSVC的判定数值(决策函数值)
嘿,这个问题我太熟了!你说的那个用来判定类别的“判定数值”,在scikit-learn的LinearSVC里其实就是模型输出的决策函数值——它代表了样本到分类超平面的距离(经过模型内部缩放后的结果),完全对应你提到的「<-1归为A类、>1归为B类」这类判定逻辑。
具体怎么获取?
训练好你的LinearSVC模型后,别用predict()(它直接给你分类结果),而是调用decision_function()方法,就能拿到每个样本对应的原始判定数值:
- 对于二分类任务,这个方法会返回一个一维数组,每个元素就是单个样本的决策值;
- 对于多分类任务,会返回二维数组,每一行对应一个样本,每一列对应一个类别的决策值。
举个实际代码例子
假设你用文本分类的场景,代码大概是这样:
from sklearn.svm import LinearSVC from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.pipeline import make_pipeline # 模拟你的文档数据和标签 train_docs = ["人工智能入门教程", "Python编程技巧", "机器学习实战", "前端开发指南"] train_labels = [0, 1, 0, 1] # 0代表技术教程类,1代表编程技巧类 # 构建文本分类管道(TF-IDF向量化 + LinearSVC分类器) text_clf = make_pipeline(TfidfVectorizer(), LinearSVC()) text_clf.fit(train_docs, train_labels) # 对新文档获取判定数值 test_doc = ["深度学习优化方法"] decision_values = text_clf.decision_function(test_doc) print(f"判定数值:{decision_values[0]}") # 输出可能是类似 -1.2(归为A类)或者 1.5(归为B类)的数值
补充说明
LinearSVC默认的决策边界是决策值>0时归为正类,但如果你遇到的是<-1/>1的判定逻辑,可能是业务上额外做了阈值调整,或者模型使用了特定的参数(比如dual=False之类的),但不管怎样,decision_function()返回的就是你需要的原始判定数值,你可以基于这个值自己定义分类阈值。
内容的提问来源于stack exchange,提问作者Ottoh Hidayatullah
相关产品推荐
相关产品推荐

