概述
了解朴素贝叶斯和支持向量机及其在Python中的实现
在这个数字世界中,垃圾邮件是每个人都面临的最麻烦的挑战。向用户发送垃圾邮件会导致各种问题,进而可能导致经济损失。
通过垃圾邮件,我们损失了内存空间,计算能力和速度。要删除这些垃圾邮件,我们需要花费时间。已经开发出许多方法来过滤垃圾邮件,并获得不同程度的成功。
决策面
在本文中,我们将讨论朴素贝叶斯分类器和支持向量分类器,并实现这些机器学习模型来过滤垃圾短信并比较结果。
本文概要
朴素贝叶斯分类器
支持向量机(SVM)
数据集下载
数据预处理和模型构建
结果
1,朴素贝叶斯分类器
朴素贝叶斯是一种用于分类问题的受监督机器学习算法。它基于贝叶斯定理。之所以称为天真,是因为其天真的假设了预测变量之间的条件独立性。
它假定一个类中的所有要素彼此无关。
为了解释朴素贝叶斯算法,首先,我们将看到贝叶斯定理。
贝叶斯定理:
让我们考虑两个事件A和B。我们使用以下公式使用P(B),P(A),P(A / B)计算后验概率P(B / A)。
朴素贝叶斯SVM-后验概率
其中P(B / A)是后验概率,
P(B)是先验概率,
当我们具有单个特征时,很容易计算后验概率。但是,当我们具有两个或多个特征时,由于有时会得出零概率问题,因此很难计算后验概率。
因此,我们采用条件
独立性的朴素假设来计算后验概率。
当我们有
预测变量:[X1,X2]和
目标:Y
计算后验概率的公式是-
朴素贝叶斯SVM-后验概率公式
为P(X1,X2 / Y = 1)取条件独立
朴素贝叶斯SVM-条件概率
这是使用朴素贝叶斯分类器计算后验概率的公式。
2.支持向量机(SVM)
这是一种监督的机器学习算法,通过它我们可以执行回归和分类。
在SVM中,数据点绘制在n维空间中,其中n是要素数量。然后,通过选择区分两个类别的合适超平面来完成分类。
在n维空间中,超平面具有(n-1)个维。
朴素贝叶斯SVM-超平面空间
我们假设类是线性可分离的。
方程的符号有助于对类别进行分类,方程的大小有助于了解观测距离超平面有多远。当幅度很高时,我们就可以更确定类的分配。
从超平面到任一类的数据点的最小距离称为边距。我们需要有一个最大的余量,以便它具有很高的幅度。因此,此超平面称为最大边距分类器。
支持向量是位于边缘或违反影响超平面的边缘的观测值。支持向量支持
超平面。
超级飞机
在支持向量分类器中,我们有一个具有软余量的最大余量分类器(某些观察结果可能会违反此余量)。
3.下载数据集
SMS垃圾邮件收集数据集来自UCI机器学习存储库。该数据集是公开的SMS标签消息集,这些消息在2012年用于移动电话垃圾邮件研究。该数据集包含5572条消息,其中4825条是火腿邮件,而747条是垃圾邮件。在此数据集中,每一行均以消息的标签开头,然后是文本。
数据集链接: https : //archive.ics.uci.edu/ml/datasets/SMS+Spam+Collection
4.数据预处理和使用的模型
数据集有两列:
标签数据类别(火腿或垃圾邮件)和
文字讯息
其他不需要的列将被删除。
#导入软件包:
import pandas as pd
import numpy as np
#读取数据集:
sms_data =
pd.read_csv("spam.csv"
我们删除最后四列,因为最后三列没有任何值,并且我们不需要长度列。
sms_data.drop(labels = ['Unnamed: 2'
sms_data.head()
头
现在,我们将创建一个语料库并追加消息,在将消息追加到语料库之前,我们需要遵循某些预处理步骤。
我们导入“ re”包,并删除标点符号,特殊字符并将所有字符转换为小写。
现在,我们需要将消息拆分为多个单词,以删除停用词并执行词干分析。
我们从NLTK包中导入英语停用词,如果在句子中找到它们,则将其删除。
在删除停用词时,我们执行词干处理,即如果该单词不是停用词,它将被转换为其根形式。这称为“阻止”。
然后,我们再次将列表中的单词连接在一起,以形成没有任何停用词的消息,所有单词都将以其
根形式出现。然后,我们将消息附加到语料库。
#导入软件包:
import re
import nltk
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
#创建完善的消息语料库:
stemming = PorterStemmer()
corpus = []
for i in range (0
s1 = re.sub('[^a-zA-Z]'
s1.lower()
s1 = s1.split()
s1 = [stemming.stem(word) for word in s1 if word not in set(stopwords.words('english'))]
s1 = ' '.join(s1)
corpus.append(s1)
corpus[50]
语料库
我们将从Scikit-learn库中导入Count-Vectorizer来对文本进行标记化和向量化。
#导入包:
from sklearn.feature_extraction.text import CountVectorizer
countvectorizer =CountVectorizer()
通过使用Count-Vectorizer,我们将标记文本文档的集合并构建词汇表,该词汇表还用于编码新文档。
要使用此Count-Vectorizer,首先,我们将创建Count-Vectorizer类的实例。
然后,fit()函数用于从文档中学习词汇,而transform()函数用于编码为矢量。
x = countvectorizer.fit_transform(corpus).toarray()
该向量表示整个词汇的长度,以及每个单词出现在文档中的次数的计数。
现在我们有了一个数字矢量,它是从文本字符串转换而来的。
print(x)
朴素贝叶斯SVM-打印
y = sms_data['v1'].values
print(y)
朴素贝叶斯SVM-打印y
火车–测试拆分
我们将数据划分为训练,并使用训练测试比例为70:30的随机测试进行测试。
#分割火车和测试数据:
from sklearn.model_selection import train_test_split
x_train
楷模:
1.多项式朴素贝叶斯。
#导入包装和拟合模型:
from sklearn.naive_bayes import MultinomialNB
multinomialnb = MultinomialNB()
multinomialnb.fit(x_train
多项式-朴素贝叶斯SVM
#根据测试数据进行预测:
y_pred = multinomialnb.predict(x_test)
y-pred-天真贝叶斯SVM
2.支持向量机
#导入包装和配件型号:
from sklearn.svm import LinearSVC
linearsvc = LinearSVC()
linearsvc.fit(x_train
朴素贝叶斯SVM-线性SVC
#根据测试数据进行预测:
y_pred = linearsvc.predict(x_test)
朴素贝叶斯SVM-y_pred
5.我们模型的结果
#导入软件包:
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score
print(classification_report(y_test
accuracy_score(y_test
1.多项式朴素贝叶斯。
朴素贝叶斯SVM-多项朴素贝叶斯
准确度百分比:98.026
2. SVM。
支持向量机
准确度百分比:98.325
从以上结果可以看出,朴素贝叶斯模型和SVM在对垃圾邮件进行分类方面表现良好,准确率达98%,但是将这两个模型进行比较,则SVM的表现更好。这些模型可以有效地预测邮件是否为垃圾邮件。
题库
最后
以上就是粗暴大侠为你收集整理的python支持向量运算吗_了解朴素贝叶斯和支持向量机及其在Python中的实现的全部内容,希望文章能够帮你解决python支持向量运算吗_了解朴素贝叶斯和支持向量机及其在Python中的实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复