在使用 Sklearn 库进行文本分类时,模型会对输入的文本片段做出预测,并将其归类为不同的类别。但有时候,模型对某些预测并不确定,或者说预测的置信度不高。我们需要一种方法来提取预测的相对置信度,以进行进一步的分析和处理。
- 解决方案:
Sklearn 中的 predict_proba
方法可以帮助我们解决这个问题。它可以输出一个包含多个概率值的数组,每个值代表模型对该文本片段属于各个类别的置信度。我们可以使用这些概率值来评估预测的可靠程度。
具体来说,predict_proba
方法返回一个形状为 (n_samples, n_classes)
的数组,其中 n_samples
是要进行预测的文本片段数量,n_classes
是类别数量。数组中的每个元素代表模型对该文本片段属于对应类别的置信度。
例如,如果我们使用 predict_proba
方法对一个包含两个类别的文本分类模型进行预测,则返回的数组可能如下所示:
[[0.99, 0.01],
[0.60, 0.40],
[0.20, 0.80]]
在这个例子中,第一行的第一个值表示模型对第一个文本片段属于第一个类别的置信度为 99%,而对第二个类别的置信度为 1%。第二行的第一个值表示模型对第二个文本片段属于第一个类别的置信度为 60%,而对第二个类别的置信度为 40%。第三行的第一个值表示模型对第三个文本片段属于第一个类别的置信度为 20%,而对第二个类别的置信度为 80%。
我们可以使用这些置信度值来评估预测的可靠程度。例如,如果一个文本片段的置信度值很高,则表明模型对该预测非常有信心。而如果一个文本片段的置信度值很低,则表明模型对该预测不太确定。
代码例子:
import sklearn
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import BernoulliNB
# 数据集
X_train = ["Sentence I know belongs to Subject A", "Another sentence that describes Subject A", "A sentence about Subject B", "Another sentence about Subject B"...], etc
Y_train = ["Subject A", "Subject A", "Subject B", "Subject B", ...], etc.
predict_these_X = ["Some random sentence", "Another sentence", "Another sentence again", ...] etc.
# 特征提取
count_vect = CountVectorizer()
tfidf_transformer = TfidfTransformer()
X_train_counts = count_vect.fit_transform(X_train)
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
X_new_counts = count_vect.transform(predict_these_X)
X_new_tfidf = tfidf_transformer.transform(X_new_counts)
# 模型训练
estimator = BernoulliNB()
estimator.fit(X_train_tfidf, Y_train)
# 预测
predictions = estimator.predict(X_new_tfidf)
# 获取预测置信度
confidence_scores = estimator.predict_proba(X_new_tfidf)
# 输出预测结果和置信度
for i, prediction in enumerate(predictions):
print("Prediction:", prediction)
print("Confidence scores:", confidence_scores[i])
通过运行这段代码,我们可以同时获得预测结果和预测置信度。我们可以使用置信度值来评估预测的可靠程度,并进行进一步的分析和处理。