Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
垃圾邮件过滤器-Python新手_Python_Machine Learning_Scikit Learn_Classification_Naivebayes - Fatal编程技术网

垃圾邮件过滤器-Python新手

垃圾邮件过滤器-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

因此,我的任务是用Python为电子邮件数据集创建一个分类算法:

我需要能够处理数据集,应用我的分类算法(我选择了3个朴素贝叶斯版本),将准确度分数打印到终端,并执行5或10倍交叉验证,找出有多少电子邮件是垃圾邮件

正如你所看到的,我已经完成了一些任务,但错过了交叉验证,并发现有多少电子邮件是垃圾邮件

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的答案。我更困惑的是准确度分数到底是多少。从下面的答案中,我认为这是正确分类的电子邮件的准确性。但我肯定不能指望我知道整个数据集中有多少实际的垃圾邮件?假设数据集中的所有内容都是正确的,我同意你的观点,我现在就明白了。因此,现实地说,当我的简介中说“查找垃圾邮件数量”时,我真的不能准确地知道吗?
“查找垃圾邮件数量”
(在测试数据中)通常意味着查找您的模型能够正确检测垃圾邮件的程度。它是对模型性能的衡量,以便您可以看到哪个模型在检测垃圾邮件方面表现良好(同样是在测试数据上)。但我们假设,如果它对测试数据有好处,那么它对看不见的数据也会有好处。