本文内容

  • 代码地址
  • 使用线性SVM实现对垃圾邮件分类
    • (1)问题描述:
    • (2)实现过程:
  • 实验小结:

代码地址

代码地址

使用线性SVM实现对垃圾邮件分类

(1)问题描述:

​ 编程实现一个垃圾邮件SVM线性分类器,分别在训练集和测试集上计算准确率。其中训练数据文件:task3_train.mat,要求导入数据时输出样本数和特征维度。测试数据文件:task3_test.mat,要求导入数据时输出样本数和特征维度,测试数据标签未给出。(程序运行时间10mins左右)

(2)实现过程:

  1. 分析数据:

    利用给出loadData(),读取数据,并输出维度:

    X, y = svmF.loadData('task3_train.mat')
    shape = np.shape(X)
    print('训练集样本数:%d,特征维度:%d' % (shape[0], shape[1]))'''
    output:
    训练集样本数:4000,特征维度:1899
    '''

    观察输入如下图所示:

    可知,这里是已经完成了邮件特征变量的提取的数据。

    完成了邮件特征变量的提取之后, 可以利用4000个训练样本和1000个测试样本训练SVM算法, 每个原始的邮件将会被转化为一个 x∈R1900x \in R^{1900}x∈R1900 的向量 (词汇表中有1899个词汇, x0=1x_{0}=1x0​=1 会 被添加到向量中)。

  2. 训练模型:

    载入数据集之后, 用变量 y=1y=1y=1 表示 垃圾邮件, 而 y=0y=0y=0 表示非垃圾邮件可就可以训练SVM算法了。

    这里我们使用sklearn的svm,具体实现代码如下所示:

    c = 0.1
    clf = svm.SVC(c, kernel='linear')
    clf.fit(X, y)
    

    在训练集上的精度如下:

    p = clf.predict(X)
    print('Training Accuracy: {}'.format(np.mean(p == y) * 100))
    

    尝试高斯核:

    c = 1
    sigma = 0.1
    clf = svm.SVC(c, kernel='rbf', gamma=np.power(sigma, -2))
    clf.fit(X, y)
    

  3. 输出预测结果:

    result = clf.predict(X_t)
    np.savetxt('result.txt', result, fmt='%d', delimiter='\n')
    

实验小结:

  • 支持向量机的参数选择
    C:C:C:对于C,C越大,可以理解为正则化系数越小,会出现lower bias和high variance的问题就是过拟合;C越小,可以理解为lambda越大,会出现high bias和low variance的问题就是欠拟合。

    sigma:对于高斯函数的sigma,sigma越大,特征变化越平滑,会出现high bias和low variance的问题就是欠拟合;sigma越小,特征变化越陡峭,会出现lower bias和high variance的问题就是过拟合。

  • 核函数选择:

    当特征数量相对于训练集数量很大时,使用逻辑回归或者是使用线性核函数的支持向量机;
    当特征数量很少,训练集数据量一般,使用高斯核函数的支持向量机;
    当特征数量很少,训练集数据很大,可以考虑添加更多特征,然后使用逻辑回归或者是使用线性核函数的支持向量机。

使用线性SVM实现对垃圾邮件分类相关推荐

  1. 基于Bayes和SVM的垃圾邮件分类实现(改进版)

    对本文标题进行分词和提取关键词,本文关键词如下:分类.垃圾邮件分类(spam).Bayes.SVM.改进版(体现在哪里?).本文不对Bayes.SVM原理做过多的摄入和解释,主要是使用这些算法做一个基 ...

  2. 垃圾邮件分类 python_在python中创建SMS垃圾邮件分类器

    垃圾邮件分类 python 介绍 (Introduction) I have always been fascinated with Google's gmail spam detection sys ...

  3. [CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑

    本文对应的是吴恩达老师的CS229机器学习的第五课.这节课介绍了判别学习算法和生成学习算法,并给出了生成学习算法的一个实例:利用朴素贝叶斯进行垃圾邮件分类. 判别学习(Discriminative L ...

  4. 朴素贝叶斯(西瓜数据集分类,社区恶意留言分类,垃圾邮件分类,新浪新闻分类),AODE分类器 代码实现

    朴素贝叶斯(西瓜数据集分类,社区恶意留言分类,垃圾邮件分类,新浪新闻分类),AODE分类器 代码实现 以下代码为本人学习后,修改或补充后的代码实现,数据集和原代码请参考:https://github. ...

  5. python训练opencb分类器_垃圾邮件分类.ipynb

    { "cells": [ { "cell_type": "markdown", "metadata": {}, &quo ...

  6. 【人工智能项目】机器学习中文垃圾邮件分类任务

    [人工智能项目]机器学习中文垃圾邮件分类任务 本次采用机器学习模型对中文邮件是否为垃圾邮件进行判别.那么工友们,学起来吧!!! 任务说明 0,商业秘密的秘密性那是维系其商业价值和垄断地位的前提条件之一 ...

  7. 垃圾邮件分类(trec06c数据集)数据处理-特征提取

    目录 目标:我要提取 发件人(From).收件人(To).邮件主题(Subject).邮件正文(zhengwen) 作为邮件特征,然后输入到线性分类模型中进行训练 首先是这四个特征提取的部分 发件人 ...

  8. 垃圾邮件分类(trec06c数据集)特征分词、特征向量化、模型训练

    目录 得到全量数据集 得到采样数据集 模型训练 全部代码: 结果 已完结 接上: 垃圾邮件分类(trec06c数据集)数据处理-特征提取 https://blog.csdn.net/qq_393215 ...

  9. 文本分类:垃圾邮件分类

    https://appliedmachinelearning.blog/2017/01/23/email-spam-filter-python-scikit-learn/ 转自:http://fina ...

最新文章

  1. HDOJ 1060 Leftmost Digit
  2. 【6】Zookeeper脚本及API
  3. DevOps笔记-04:DevOps工具和文化缺一不可
  4. 中学计算机课的现状和感受,中小学信息技术课程的现状与发展.doc
  5. Nginx 之一:编译安装nginx 1.8.1 及配置
  6. abp框架java,【Net】ABP框架学习之正面硬钢
  7. c语言编写的每个函数都可以进行独立的编译,2017年辽宁师范大学计算机与信息技术学院836C语言程序设计考研冲刺密押题...
  8. $.ajax注册表单
  9. ACM - 欧拉函数(内容)
  10. linux中的信号3——alarm、pause函数
  11. 小白必须懂的MongoDB的十大总结
  12. 学习有五个层次和境界
  13. excel导入的数据中文字段转英文
  14. 使用Pycharm打包应用程序
  15. 图形学中常用计算几何总结
  16. readyState的值的含义
  17. miRNA与 lncRNA的相互调控作用
  18. Vue3中watch和watchEffect监听的用法
  19. 小学三年级计算机画图工具作品,小学三年级美术下册《电脑绘画—模板帮我们作画》教案...
  20. mc服务器常用指令_我的世界服务器指令大全 史上最全的服务器指令介绍

热门文章

  1. android 编程词典,基于Android的英文词典的实现方法
  2. One PUNCH Man——变量显著性检验
  3. 中国海洋大学计算机考研怎么样,中国海洋大学考研难吗?一般要什么水平才可以进入?...
  4. 同学早已年薪百万 为何你却还在朋友圈集赞?
  5. [ECE]模拟试题-4
  6. 事业单位计算机技术岗工资,事业单位管理岗和技术岗工资区别,不得不知!
  7. Mysql-Cluster 集群部署
  8. 餐馆会员管理系统 - MySQL数据库课程设计
  9. MySQL服务开机自启动失败
  10. 爬虫,爬糗百热门段子