本次案例采用SVM、MNB模型进行对比
用Accuracy、F1 Score进行评估
话不多说直接上代码包括数据集下载
CSDN
文章图片
https://mp.csdn.net/mp_download/manage/download/UpDetailed
# 读取数据并用空字符串替换空值
df1 = pd.read_csv("spamham.csv")
df = df1.where((pd.notnull(df1)), '')# 将垃圾邮件分类为 0,将非垃圾邮件分类为 1
df.loc[df["Category"] == 'ham', "Category",] = 1
df.loc[df["Category"] == 'spam', "Category",] = 0
# 将数据拆分为标签和文本。系统应该能够根据文本预测标签
df_x = df['Message']
df_y = df['Category']
# 拆分表格 - 80% 用于训练,20% 用于测试大小
x_train, x_test, y_train, y_test = train_test_split(df_x, df_y, train_size=0.8, test_size=0.2, random_state=4)# 使用 Tfidf 矢量化器 进行特征提取、小写转换和停用词去除
tfvec = TfidfVectorizer(min_df=1, stop_words='english', lowercase=True)
x_trainFeat = tfvec.fit_transform(x_train)
x_testFeat = tfvec.transform(x_test)# SVM 用于建模
y_trainSvm = y_train.astype('int')
classifierModel = LinearSVC()
classifierModel.fit(x_trainFeat, y_trainSvm)
predResult = classifierModel.predict(x_testFeat)# GNB 用于建模
y_trainGnb = y_train.astype('int')
classifierModel2 = MultinomialNB()
classifierModel2.fit(x_trainFeat, y_trainGnb)
predResult2 = classifierModel2.predict(x_testFeat)# 计算精度,转换为 int - 解决 - 无法处理未知和二进制的混合
y_test = y_test.astype('int')
#actual_Y = y_test.as_matrix()print("~~~~~~~~~~SVM RESULTS~~~~~~~~~~")
#使用 SVM 的准确度得分
print("Accuracy Score : {0:.4f}".format(accuracy_score(y_test, predResult)*100))
#使用 SVM 的 FScore
print("F Score: {0: .4f}".format(f1_score(y_test, predResult, average='macro')*100))
cmSVM=confusion_matrix(y_test, predResult)
#“[真阴性假阳性\假阴性真阳性]”
print("Confusion matrix:")
print(cmSVM)print("~~~~~~~~~~MNB RESULTS~~~~~~~~~~")
#使用 MNB 的准确度得分
print("Accuracy Score: {0:.4f}".format(accuracy_score(y_test, predResult2)*100))
#使用 MNB 的 FScore
print("F Score:{0: .4f}".format(f1_score(y_test, predResult2, average='macro')*100))
cmMNb=confusion_matrix(y_test, predResult2)
#“[真阴性假阳性\假阴性真阳性]”
print("Confusion matrix:")
print(cmMNb)
运行结果:
文章图片
总结: 【机器学习|机器学习——垃圾邮件识别——SVM、MNB模型使用】标称型:标称型目标变量的结果只在有限目标集中取值,如真与假(标称型目标变量主要用于分类)
数值型:数值型目标变量则可以从无限的数值集合中取值,如0.100,42.001等 (数值型目标变量主要用于回归分析)
朴素贝叶斯
优点:在数据较少的情况下仍然有效,可以处理多类别问题。
缺点:对于输入数据的准备方式较为敏感。
适用数据类型:标称型数据一般流程:
(1) 收集数据:可以使用任何方法。
(2) 准备数据:需要数值型或者布尔型数据。
(3) 分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好。
(4) 训练算法:计算不同的独立特征的条件概率。
(5) 测试算法:计算错误率。
(6) 使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴
素贝叶斯分类器,不一定非要是文本。
支持向量机
优点:泛化错误率低,计算开销不大,结果易解释。
缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二类问题。
适用数据类型:数值型和标称型数据。一般流程:
(1) 收集数据:可以使用任意方法。
(2) 准备数据:需要数值型数据。
(3) 分析数据:有助于可视化分隔超平面。
(4) 训练算法:SVM的大部分时间都源自训练,该过程主要实现两个参数的调优。
(5) 测试算法:十分简单的计算过程就可以实现。
(6) 使用算法:几乎所有分类问题都可以使用SVM,值得一提的是,SVM本身是一个二类
分类器,对多类问题应用SVM需要对代码做一些修改。
推荐阅读
- XingleiGao的日常|Atlas 200 DK开发者套件基于CANN的垃圾分类实验踩坑指南
- python|CSDN技能树测评(开宗立派但仍需精雕细琢)
- 深度学习|学习笔记(深度学习(4)——卷积神经网络(CNN)PyTorch实践篇)
- Python中的数组用法指南|S2(重要函数)
- Python使用.kv文件的Kivy中的StackLayout
- Networxx模块的超链接诱导主题搜索(HITS)算法|Python
- Python Mongodb如何使用Delete_one()(用法示例)
- opencv|基于OpenCv的人脸识别系统设计
- 笔记|Python读取CIFAR10数据集,附代码详解