首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NaiveBayes和LogistcRegression之间的混淆结果

NaiveBayes和LogistcRegression之间的混淆结果
EN

Stack Overflow用户
提问于 2019-02-03 06:11:03
回答 1查看 54关注 0票数 1

在使用Scikit学习时,我学习了这个快速的教程,并对NaiveBayes和Logistc回归有了一个问题。

这里是与笔录的链接-

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

代码语言:javascript
复制
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.)为什么NaiveBayes返回它是Spam,而LogisticRegression说它是Ham

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

2.).predict_probab评分是什么意思?我的想法,,我理解它是多么准确的分类器反应是。ie NB说,它相信它的答案(1)是98%的准确性,但这将意味着LogReg说它的答案(0)是6%的准确性。

这没道理。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-03 06:31:19

spamsms.label.map({'ham': 0, 'spam': 1})中的第二个类(即索引1)。因此,您打印的概率是消息为spam的概率,而不是模型的预测类的概率。logreg给出消息为spam0.05628297概率,这意味着它给出了ham0.9437概率。这两种模型都是非常精确的,但这并不意味着它们将在每个测试示例上达成一致。朴素的bayes是正确的,但逻辑回归的错误,应该有其他的例子,相反的是正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54500440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档