机器学习——垃圾邮件识别——SVM、MNB模型使用

ゝ一纸荒年。 2023-09-29 10:09 85阅读 0赞

本次案例采用SVM、MNB模型进行对比

用Accuracy、F1 Score进行评估

话不多说直接上代码包括数据集下载

CSDNicon-default.png_t_M276https://mp.csdn.net/mp\_download/manage/download/UpDetailed


  1. # 读取数据并用空字符串替换空值
  2. df1 = pd.read_csv("spamham.csv")
  3. df = df1.where((pd.notnull(df1)), '')
  4. # 将垃圾邮件分类为 0,将非垃圾邮件分类为 1
  5. df.loc[df["Category"] == 'ham', "Category",] = 1
  6. df.loc[df["Category"] == 'spam', "Category",] = 0
  7. # 将数据拆分为标签和文本。系统应该能够根据文本预测标签
  8. df_x = df['Message']
  9. df_y = df['Category']
  10. # 拆分表格 - 80% 用于训练,20% 用于测试大小
  11. 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)
  12. # 使用 Tfidf 矢量化器 进行特征提取、小写转换和停用词去除
  13. tfvec = TfidfVectorizer(min_df=1, stop_words='english', lowercase=True)
  14. x_trainFeat = tfvec.fit_transform(x_train)
  15. x_testFeat = tfvec.transform(x_test)
  16. # SVM 用于建模
  17. y_trainSvm = y_train.astype('int')
  18. classifierModel = LinearSVC()
  19. classifierModel.fit(x_trainFeat, y_trainSvm)
  20. predResult = classifierModel.predict(x_testFeat)
  21. # GNB 用于建模
  22. y_trainGnb = y_train.astype('int')
  23. classifierModel2 = MultinomialNB()
  24. classifierModel2.fit(x_trainFeat, y_trainGnb)
  25. predResult2 = classifierModel2.predict(x_testFeat)
  26. # 计算精度,转换为 int - 解决 - 无法处理未知和二进制的混合
  27. y_test = y_test.astype('int')
  28. #actual_Y = y_test.as_matrix()
  29. print("~~~~~~~~~~SVM RESULTS~~~~~~~~~~")
  30. #使用 SVM 的准确度得分
  31. print("Accuracy Score : {0:.4f}".format(accuracy_score(y_test, predResult)*100))
  32. #使用 SVM 的 FScore
  33. print("F Score: {0: .4f}".format(f1_score(y_test, predResult, average='macro')*100))
  34. cmSVM=confusion_matrix(y_test, predResult)
  35. #“[真阴性假阳性\假阴性真阳性]”
  36. print("Confusion matrix:")
  37. print(cmSVM)
  38. print("~~~~~~~~~~MNB RESULTS~~~~~~~~~~")
  39. #使用 MNB 的准确度得分
  40. print("Accuracy Score: {0:.4f}".format(accuracy_score(y_test, predResult2)*100))
  41. #使用 MNB 的 FScore
  42. print("F Score:{0: .4f}".format(f1_score(y_test, predResult2, average='macro')*100))
  43. cmMNb=confusion_matrix(y_test, predResult2)
  44. #“[真阴性假阳性\假阴性真阳性]”
  45. print("Confusion matrix:")
  46. print(cmMNb)

运行结果:

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBA54y_X-WQjOWtpg_size_20_color_FFFFFF_t_70_g_se_x_16

总结:

标称型:标称型目标变量的结果只在有限目标集中取值,如真与假(标称型目标变量主要用于分类)

数值型:数值型目标变量则可以从无限的数值集合中取值,如0.100,42.001等 (数值型目标变量主要用于回归分析)

朴素贝叶斯

  1. 优点:在数据较少的情况下仍然有效,可以处理多类别问题。
  2. 缺点:对于输入数据的准备方式较为敏感。
  3. 适用数据类型:标称型数据
  4. 一般流程:
  5. (1) 收集数据:可以使用任何方法。
  6. (2) 准备数据:需要数值型或者布尔型数据。
  7. (3) 分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好。
  8. (4) 训练算法:计算不同的独立特征的条件概率。
  9. (5) 测试算法:计算错误率。
  10. (6) 使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴
  11. 素贝叶斯分类器,不一定非要是文本。

#

支持向量机

  1. 优点:泛化错误率低,计算开销不大,结果易解释。
  2. 缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二类问题。
  3. 适用数据类型:数值型和标称型数据。
  4. 一般流程:
  5. (1) 收集数据:可以使用任意方法。
  6. (2) 准备数据:需要数值型数据。
  7. (3) 分析数据:有助于可视化分隔超平面。
  8. (4) 训练算法:SVM的大部分时间都源自训练,该过程主要实现两个参数的调优。
  9. (5) 测试算法:十分简单的计算过程就可以实现。
  10. (6) 使用算法:几乎所有分类问题都可以使用SVM,值得一提的是,SVM本身是一个二类
  11. 分类器,对多类问题应用SVM需要对代码做一些修改。

发表评论

表情:
评论列表 (有 0 条评论,85人围观)

还没有评论,来说两句吧...

相关阅读

    相关 机器学习——基础模型

    主要参考的资料是Sutton的强化学习书和UCL强化学习的课程。 1.强化学习在机器学习中的位置   强化学习的学习思路和人比较类似,是在实践中学习,比如学习走路,如果摔倒