垃圾邮件过滤器-Python新手
因此,我的任务是用Python为电子邮件数据集创建一个分类算法: 我需要能够处理数据集,应用我的分类算法(我选择了3个朴素贝叶斯版本),将准确度分数打印到终端,并执行5或10倍交叉验证,找出有多少电子邮件是垃圾邮件 正如你所看到的,我已经完成了一些任务,但错过了交叉验证,并发现有多少电子邮件是垃圾邮件垃圾邮件过滤器-Python新手,python,machine-learning,scikit-learn,classification,naivebayes,Python,Machine Learning,Scikit Learn,Classification,Naivebayes,因此,我的任务是用Python为电子邮件数据集创建一个分类算法: 我需要能够处理数据集,应用我的分类算法(我选择了3个朴素贝叶斯版本),将准确度分数打印到终端,并执行5或10倍交叉验证,找出有多少电子邮件是垃圾邮件 正如你所看到的,我已经完成了一些任务,但错过了交叉验证,并发现有多少电子邮件是垃圾邮件 import numpy as np import pandas as pd import sklearn from sklearn.naive_bayes import Bernoul
import numpy as np
import pandas as pd
import sklearn
from sklearn.naive_bayes import BernoulliNB
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.metrics import accuracy_score
# Read data
dataset = pd.read_csv('dataset.csv').values
# What shuffle does? How it helps?
np.random.shuffle(dataset)
X = dataset[ : , :48 ]
Y = dataset[ : , -1 ]
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = .33, random_state = 17)
# Bernoulli Naive Bayes
BernNB = BernoulliNB(binarize = True)
BernNB.fit(X_train, Y_train)
y_expect = Y_test
y_pred = BernNB.predict(X_test)
print ("Bernoulli Accuracy Score: ")
print (accuracy_score(y_expect, y_pred))
# Multinomial Naive Bayes
MultiNB = MultinomialNB()
MultiNB.fit(X_train, Y_train)
y_pred = MultiNB.predict(X_test)
print ("Multinomial Accuracy Score: ")
print (accuracy_score(y_expect, y_pred))
# Gaussian Naive Bayes
GausNB = GaussianNB()
GausNB.fit(X_train, Y_train)
y_pred = GausNB.predict(X_test)
print ("Gaussian Accuracy Score: ")
print (accuracy_score(y_expect, y_pred))
# Bernoulli ALTERED Naive Bayes
BernNB = BernoulliNB(binarize = 0.1)
BernNB.fit(X_train, Y_train)
y_expect = Y_test
y_pred = BernNB.predict(X_test)
print ("Bernoulli 'Altered' Accuracy Score: ")
print (accuracy_score(y_expect, y_pred))
我已经研究了交叉验证,认为我现在可以应用它,但它发现有多少电子邮件是我不理解的垃圾邮件???我有不同的navie bayes版本,但我如何才能真正找到垃圾邮件的数量?最后一列是1或0,用于定义其是否为垃圾邮件?所以我不知道该怎么做因为你的类标签1意味着垃圾邮件,所以你使用
准确度评分计算的准确度值
将为你提供正确识别为垃圾邮件的垃圾邮件数量。例如,90%的测试准确率意味着100封测试垃圾邮件中有90封被正确归类为垃圾邮件
使用sklearn.metrics.conflusion\u矩阵(y\u expect,y\u pred)
进行单独的类级别分解
例如:
如果y\u expect=[1,1,0,0,1]
这意味着您的测试数据中有3封垃圾邮件和2封非垃圾邮件,如果
y_pred=[1,1,1,0,1]
,则表示您的模型已正确检测到3封垃圾邮件,但也检测到1封非垃圾邮件为垃圾邮件 我不明白你到底在问什么。y_true的计数,其中spam==1是实际垃圾邮件的数量,y_predicted的计数,其中spam==1是预测垃圾邮件的数量这里说y_true==1?我对python和分类算法还不熟悉,所以我对它很熟悉。目前,我所了解的程序所要做的就是为每种朴素贝叶斯类型获得准确分数。我想了解的是如何计算垃圾邮件的数量?在您的例子中,您的真实y标签似乎存储为y\u expect
,您的预测y值为y\u pred
。我的困惑是:你是否在试图告诉你的测试集中有多少实际的垃圾邮件y\u expect.sum()
。根据您的测试功能,您预计有多少封电子邮件是垃圾邮件y_pred.sum()
。你错分了多少?下面是@mujjiga的答案。我更困惑的是准确度分数到底是多少。从下面的答案中,我认为这是正确分类的电子邮件的准确性。但我肯定不能指望我知道整个数据集中有多少实际的垃圾邮件?假设数据集中的所有内容都是正确的,我同意你的观点,我现在就明白了。因此,现实地说,当我的简介中说“查找垃圾邮件数量”时,我真的不能准确地知道吗?“查找垃圾邮件数量”
(在测试数据中)通常意味着查找您的模型能够正确检测垃圾邮件的程度。它是对模型性能的衡量,以便您可以看到哪个模型在检测垃圾邮件方面表现良好(同样是在测试数据上)。但我们假设,如果它对测试数据有好处,那么它对看不见的数据也会有好处。