【发布时间】:2021-09-01 16:20:20
【问题描述】:
我从 scikit sklearn 训练了 GaussianNB 模型。当我调用classifier.predict_proba 方法时,它只对新数据返回 1 或 0。预计会返回预测正确与否的置信百分比。我怀疑它对以前从未见过的新数据有 100% 的信心。我已经在多个不同的输入上对其进行了测试。我使用 CountVectorizer 和 TfidfTransformer 进行文本编码。
编码:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
count_vect = CountVectorizer()
tfidf_transformer = TfidfTransformer()
X_train_counts = count_vect.fit_transform(X_train_word)
X_train = tfidf_transformer.fit_transform(X_train_counts).toarray()
print(X_train)
X_test_counts = count_vect.transform(X_test_word)
X_test = tfidf_transformer.transform(X_test_counts).toarray()
print(X_test)
模型:(我得到了 91% 的准确率)
from sklearn.naive_bayes import GaussianNB
classifier = GaussianNB()
classifier.fit(X_train, y_train)
# Predict Class
y_pred = classifier.predict(X_test)
# Accuracy
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print(accuracy)
最后,当我使用 predict_proba 方法时:
y_pred = classifier.predict_proba(X_test)
print(y_pred)
我得到如下输出:
[[0. 1.]
[1. 0.]
[0. 1.]
...
[1. 0.]
[1. 0.]
[1. 0.]]
对新数据保持 100% 的准确率没有多大意义。除了y_test,我已经在其他输入上对其进行了测试,但它仍然返回相同的结果。任何帮助将不胜感激!
为 cmets 编辑:
.predict_log_proba()的回复就更奇怪了:
[[ 0.00000000e+00 -6.95947375e+09]
[-4.83948755e+09 0.00000000e+00]
[ 0.00000000e+00 -1.26497690e+10]
...
[ 0.00000000e+00 -6.97191054e+09]
[ 0.00000000e+00 -2.25589894e+09]
[ 0.00000000e+00 -2.93089863e+09]]
【问题讨论】:
-
只是一种预感,因为我不熟悉上下文;是不是你在浮点精度方面遇到了麻烦?
classifier.predict_log_proba输出什么? -
你有两个变量名为
y_pred;另一个将以您看到的形式输出数据。很可能这是错误(特别是如果这是在笔记本中完成的)。为什么不试试y_probs? -
@anon01 谢谢回复,但输出还是一样
-
@jrbergen 我已经用
.predict_log_proba的结果更新了问题 -
@Dani 这些结果确实令人困惑。在某个地方,某些东西似乎被放大了很多。我希望我能帮助你,但我对 sk-learn 或其内部结构一点也不熟悉,也不知道在这种情况下会发生什么。我只是希望对数概率的事情能暗示一个解决方案,就像它曾经在不同的情况下对我所做的那样。
标签: python machine-learning scikit-learn nlp data-science