朴素贝叶斯模型和逻辑回归之间混乱的结果

问题描述 投票:1回答:1

我通过这个快速tutorial继续使用Scikit学习,有一个约NaiveBayes VS 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)为什么NaiveBayes返回,这是Spam当逻辑回归是说,它是Ham

这两种分类返回精度高比分,但给出不同的答案?这是混淆了我。难道我做错了什么?

2)什么是.predict_probab成绩意味着什么?我的思维方式,我明白这是分类响应的精确程度。即NB的说,它相信它的答案(1)为98%准确,但是这意味着LogReg是说其答案(0)为6%准确。

这是没有意义的。

任何帮助将不胜感激。

python scikit-learn
1个回答
2
投票

spam是在1您的第二类(即,在索引sms.label.map({'ham': 0, 'spam': 1}))。所以,你打印的可能性的消息是spam的概率,该模型的预测类的概率不大。 logreg给出0.05628297概率为所述消息是spam这意味着它给有关0.9437概率ham。无论你的模型是非常准确的,但并不意味着他们将在每个测试实例一致。朴素贝叶斯得到这个一个权利,但回归听错了,应该有其他的例子,其中的情况正好相反。

© www.soinside.com 2019 - 2024. All rights reserved.