Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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 了解SciKit中贝叶斯过滤的工作原理并提高准确性_Python_Machine Learning_Scikit Learn - Fatal编程技术网

Python 了解SciKit中贝叶斯过滤的工作原理并提高准确性

Python 了解SciKit中贝叶斯过滤的工作原理并提高准确性,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我正在使用SciKit构建一个简单的垃圾邮件过滤器,我对我的结果有点不确定。我有一个数据集,大约有5000行数据,其中最后一列是一个布尔值,指定电子邮件是垃圾邮件还是火腿,其他列指定数据,例如不间断大写字母序列的平均长度 在我的代码中,我有以下内容: X = dataset[:,:57] # the first 57 col, excluding the answer col Y = dataset[:,-1] # the final row with the boolean spam/ham

我正在使用SciKit构建一个简单的垃圾邮件过滤器,我对我的结果有点不确定。我有一个数据集,大约有5000行数据,其中最后一列是一个布尔值,指定电子邮件是垃圾邮件还是火腿,其他列指定数据,例如不间断大写字母序列的平均长度

在我的代码中,我有以下内容:

X = dataset[:,:57] # the first 57 col, excluding the answer col
Y = dataset[:,-1]  # the final row with the boolean spam/ham value
xTrain, xTest, yTrain, yTest = train_test_split(X, Y)
bNB = BernoulliNB(binarize = True)
bNB.fit(xTrain, yTrain)
yPred = bNB.predict(xTest)
score =  accuracy_score(yExpect, yPred)
print("result: ", score)
我剪切了这些列,使得X是前57列,Y是最后一列的spam/ham值

然后我在这个X,Y上运行
train\u test\u split
,生成一个xTrain xTest和一个yTrain,yTest值

我的准确度很低,如何提高准确度?我做了两个观察:

如果我将
test\u sample
大小(teast\u train\u split默认值为0.25,即数据集的25%)减小到0.01,则精确度将增加到99%甚至100%

当我包含包含spam/ham布尔值的最后一行时,精确度将增加到99%或100%。虽然我觉得这不是你应该做的,关键是不在训练数据中使用结果


我的问题是为什么。有人能给我解释一下为什么我的这两个观察结果会发生吗?以及它们是否“正确”,也就是说,在数据集中包含布尔结果是作弊,或者测试规模非常小是作弊?

简短回答:是,包含布尔结果就是“作弊”

基本上,你正在做的是,你正在试图建立一个模型,从一组变量中预测一个变量。该模型将非常容易地发现它们是相同的事实。 更麻烦的是,如果你把自己放在一封新邮件的情况下,你没有布尔结果来尝试和预测它是否是垃圾邮件,你的模型就变得无用了


在你的另一点上,是的,减少测试集的大小是不相关的。这在统计上不太相关。不过,你可以这样做,看看这是否真的是你的模型需要更多数据的问题,但我对此表示怀疑。

简短回答:是的,包括布尔结果就是“作弊”

基本上,你正在做的是,你正在试图建立一个模型,从一组变量中预测一个变量。该模型将非常容易地发现它们是相同的事实。 更麻烦的是,如果你把自己放在一封新邮件的情况下,你没有布尔结果来尝试和预测它是否是垃圾邮件,你的模型就变得无用了


在你的另一点上,是的,减少测试集的大小是不相关的。这在统计上不太相关。不过,你可以这样做,看看这是否真的是你的模型需要更多数据的问题,但我对此表示怀疑。

Hey@flooblebit,别忘了它是否解决了你的问题;)嘿@flooblebit,如果它解决了你的问题,别忘了告诉我;)