gpt4 book ai didi

python - NaiveBayes 和 LogistcRegression 之间令人困惑的结果

转载 作者:行者123 更新时间:2023-12-01 01:14:23 34 4
gpt4 key购买 nike

我快速经历了这个tutorial关于使用 Scikit learn 并对 NaiveBayes 与 Logistc 回归有疑问

Here是文字记录的链接 -

您应该能够复制/粘贴下面的代码并运行它。如果您得到不同的答案,请告诉我!

import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import metrics

from sklearn.naive_bayes import MultinomialNB
from sklearn.linear_model import LogisticRegression

vect = CountVectorizer()

url = 'https://raw.githubusercontent.com/justmarkham/pydata-dc-2016-tutorial/master/sms.tsv'
sms = pd.read_table(url, header=None, names=['label', 'message'])
sms['label_num'] = sms.label.map({'ham': 0, 'spam': 1})
X = sms.message
y = sms.label_num

X_train, X_test, y_train, y_test = train_test_split(X,y, random_state=1)

vect.fit(X_train)
X_train_dtm = vect.transform(X_train)

## NaiveBayes
nb = MultinomialNB()
nb.fit(X_train_dtm, y_train)

# LogisticRegression
logreg = LogisticRegression()
logreg.fit(X_train_dtm, y_train)

# testing data
simple_text = ["this is a spam message spam spam spam"]
simple_test_dtm = vect.transform(simple_text)

# ***NaiveBayes***
nb.predict(simple_test_dtm)
# array([1]) says this is spam

nb.predict_proba(simple_test_dtm)[:, 1]
# array([0.98743019])

# ****Logistic Regression***
logreg.predict(simple_test_dtm)
# array([0]) says this is NOT spam

logreg.predict_proba(simple_test_dtm)[:, 1]
# array([0.05628297])

nb_pred_class = nb.predict(X_test_dtm)
metrics.accuracy_score(y_test, nb_pred_class)
# 0.9885139985642498

lg_pred_class = logreg.predict(X_test_dtm)
metrics.accuracy_score(y_test, lg_pred_class)
# 0.9877961234745154

两个问题:

1.) 为什么当 LogisticRegression 说它是 Ham 时,NaiveBayes 却返回它是 Spam

两个分类器都返回高精度分数,但给出不同的答案?这让我很困惑。我做错了什么吗?

2.) .predict_probab 分数是什么意思?我认为我理解的方式是分类器响应的准确性。即 NB 表示它相信其答案 (1) 的准确度为 98%,但这意味着 LogReg 表示其答案 (0) 的准确度为 6%。

这没有道理。

任何帮助将不胜感激。

最佳答案

spamsms.label.map({'ham': 0, 'spam': 中的第二个类别(即索引 1 处) 1})。因此,您打印的概率是消息为垃圾邮件的概率,而不是模型预测类别的概率。 logreg 给出了消息为垃圾邮件0.05628297概率,这意味着它为ham<提供了大约0.9437概率。您的两个模型都非常准确,但这并不意味着它们会在每个测试示例上达成一致。朴素贝叶斯在这一点上是对的,但逻辑回归却错了,应该还有其他例子,相反的情况也是如此。

关于python - NaiveBayes 和 LogistcRegression 之间令人困惑的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54500440/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com