【问题标题】:Low confidence score in SVC for example from training setSVC 中的低置信度得分,例如来自训练集
【发布时间】:2018-09-14 18:13:18
【问题描述】:

这是我的 SVC 分类器代码。

vectorizer = TfidfVectorizer(lowercase=False)
train_vectors = vectorizer.fit_transform(training_data)
classifier_linear = svm.LinearSVC()
clf = CalibratedClassifierCV(classifier_linear) 
linear_svc_model = clf.fit(train_vectors, train_labels)

training_data 这里是英文句子列表,train_lables 是相关的标签。在创建training_data 的最终版本之前,我会进行通常的停用词删除和一些预处理。这是我的测试代码:

test_lables = ["no"]
test_vectors = vectorizer.transform(test_lables)
prediction_linear = clf.predict_proba(test_vectors)
counter = 0 
class_probability = {}
lables = []
for item in train_labels:
    if item in lables:
        continue
    else:
        lables.append(item)
for val in np.nditer(prediction_linear):
    new_val = val.item(0)
    class_probability[lables[counter]] = new_val
    counter = counter + 1
sorted_class_probability = sorted(class_probability.items(), key=operator.itemgetter(1), reverse=True)
print(sorted_class_probability)

现在,当我使用训练集中已经存在的短语(在本例中为单词“no”)运行代码时,它可以正确识别,但置信度分数甚至低于 .9。输出如下:

[('no', 0.8474342514152964), ('hi', 0.06830103628879058), ('thanks', 0.03070201906552546), ('confused', 0.02647134535600733), ('ok', 0.015857384248465656), ('yes', 0.005961945963546264), ('bye', 0.005272017662368208)]

当我在线学习时,我发现训练集中已经存在的数据的置信度得分通常更接近1 或几乎1,其余的都可以忽略不计。我该怎么做才能获得更好的置信度分数?我是否应该担心,如果我添加更多的类,置信度会进一步下降,并且我很难确定一个突出的类?

【问题讨论】:

  • 如果您要投反对票,请留言说明原因。射击和滑行对任何人都没有帮助。

标签: machine-learning scikit-learn svm


【解决方案1】:

只要您的分数可以帮助您正确分类输入内容,您就完全不用担心。如果有的话,如果您对训练数据中已有输入的置信度太高,则可能意味着您的方法对数据过度拟合,无法泛化到看不见的数据。

但是,您可以通过更改惩罚参数来调整方法的复杂性。对于LinearSVC,您同时拥有penaltyC 参数。尝试这两者的不同值并观察效果。确保您还观察到对看不见的测试集的影响。

只是C 的值不应该在指数空间中,例如。 [0.001, 0.01, 0.1, 1, 10, 100, 1000] 让您看到有意义的效果。

如果您对此类线性模型和调整参数感兴趣,SGDClassifier 可能与您的情况相关。

【讨论】:

    猜你喜欢
    • 2020-04-28
    • 2021-08-06
    • 2020-05-27
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2020-10-25
    • 2022-01-23
    • 2020-12-29
    相关资源
    最近更新 更多