Machine learning SVC置信度低,例如来自培训集

Machine learning SVC置信度低,例如来自培训集,machine-learning,scikit-learn,svm,Machine Learning,Scikit Learn,Svm,这是我的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_la

这是我的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\u data
这是一个英语句子列表,
training\u标签
是相关标签。在创建最终版本的
training\u 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)
现在,当我使用训练集中已有的短语(在本例中为“否”)运行代码时,它可以正确识别,但置信度得分甚至低于
.9
。结果如下:

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

当我在网上学习时,我发现通常训练集中已有数据的置信度得分更接近于
1
或几乎接近
1
,其余的都可以忽略不计。我能做些什么来获得更好的信心分数?我是否应该担心,如果我增加更多的课程,信心分数将进一步下降,我将很难确定指出一个突出的课程?

只要你的分数帮助你正确分类输入,你就不必担心。如果有什么不同的话,如果您对培训数据中已有的输入的信心太高,那可能意味着您的方法对数据的拟合度过高,并且无法推广到看不见的数据

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

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


如果您对此类线性模型和调整参数感兴趣,则可能与您的案例相关

如果你要投否决票,请留下评论说明原因。射击和快跑对任何人都没有帮助。