SVM实现邮件分类

首先学习一下svm分类的使用。

主要有以下步骤:

  • Loading and Visualizing Dataj
  • Training Linear SVM
  • Implementing Gaussian Kernel
  • Training SVM with RBF Kernel
  • 选择最优的C, sigma参数
  • 画出边界线

线性keneral实现

C = 1;
model = svmTrain(X, y, C, @linearKernel, 1e-3, 20);
visualizeBoundaryLinear(X, y, model);

高斯keneral实现

function sim = gaussianKernel(x1, x2, sigma)
x1 = x1(:); x2 = x2(:);
sim = 0;
sim = exp( - (x1-x2)'* (x1-x2) / (2 * sigma *sigma ) );
endload('ex6data2.mat');% SVM Parameters
C = 1; sigma = 0.1;% We set the tolerance and max_passes lower here so that the code will run
% faster. However, in practice, you will want to run the training to
% convergence.
model= svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma)); 
visualizeBoundary(X, y, model);

选择合适的参数

function [C, sigma] = dataset3Params(X, y, Xval, yval)
C = 1;
sigma = 0.3;
C_vec = [0.01 0.03 0.1 0.3 1 3 10 30]';
sigma_vec = [0.01 0.03 0.1 0.3 1 3 10 30]';
error_val = zeros(length(C_vec),length(sigma_vec));
error_train = zeros(length(C_vec),length(sigma_vec));
for i = 1:length(C_vec)for j = 1:length(sigma_vec)model= svmTrain(X, y, C_vec(i), @(x1, x2) gaussianKernel(x1, x2, sigma_vec(j))); predictions = svmPredict(model, Xval);error_val(i,j) = mean(double(predictions ~= yval));end
end
% figure
% error_val
% surf(C_vec,sigma_vec,error_val)   % 画出三维图找最低点[minval,ind] = min(error_val(:));   % 0.03
[I,J] = ind2sub([size(error_val,1) size(error_val,2)],ind);
C = C_vec(I)         %   1
sigma = sigma_vec(J)  %   0.100% [I,J]=find(error_val ==  min(error_val(:)) );    % 另一种方式找最小元素位子
% C = C_vec(I)         % 1
% sigma = sigma_vec(J)  % 0.100
end[C, sigma] = dataset3Params(X, y, Xval, yval);% Train the SVM
model= svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));
visualizeBoundary(X, y, model);

邮件分类

主要步骤如下:

  • 邮件数据归一化处理
  • 特征提取
  • Train Linear SVM for Spam Classification
  • Test Spam Classification
  • Top Predictors of Spam
  • 测试自己的email

归一化处理

In processEmail.m, we have implemented the following email prepro- cessing and normalization steps:

  • Lower-casing: The entire email is converted into lower case, so that captialization is ignored (e.g., IndIcaTE is treated the same as Indicate).
  • Stripping HTML: All HTML tags are removed from the emails. Many emails often come with HTML formatting; we remove all the HTML tags, so that only the content remains.
  • Normalizing URLs: All URLs are replaced with the text “httpaddr”.
  • Normalizing Email Addresses: All email addresses are replaced
    with the text “emailaddr”.
  • Normalizing Numbers: All numbers are replaced with the text
    “number”.
  • Normalizing Dollars: All dollar signs ($) are replaced with the text
    “dollar”.
  • Word Stemming: Words are reduced to their stemmed form. For ex- ample, “discount”, “discounts”, “discounted” and “discounting” are all replaced with “discount”. Sometimes, the Stemmer actually strips off additional characters from the end, so “include”, “includes”, “included”, and “including” are all replaced with “includ”.
  • Removal of non-words: Non-words and punctuation have been re- moved. All white spaces (tabs, newlines, spaces) have all been trimmed to a single space character.

处理之后效果如下:

Vocabulary List
我们取垃圾邮件中最常见的单词放入单词表中。
Our vocabulary list was selected by choosing all words which occur at least a 100 times in the spam corpus, resulting in a list of 1899 words. In practice, a vocabulary list with about 10,000 to 50,000 words is often used.

将我们邮件中有的单词在单词表中的id存储在word_indices中

    for i=1:length(vocabList)if( strcmp(vocabList{i}, str) )word_indices = [word_indices;i];endend

Extracting Features from Emails
然后查找我们的邮件中的单词在单词表中的位置,有则置1,无则跳过。
You should look up the word in the vocabulary list vocabList and find if the word exists in the vocabulary list. If the word exists, you should add the index of the word into the word indices variable. If the word does not exist, and is therefore not in the vocabulary, you can skip the word.

function x = emailFeatures(word_indices)
% Total number of words in the dictionary
n = 1899;% You need to return the following variables correctly.
x = zeros(n, 1);
x(word_indices) = 1;
end

Training SVM for Spam Classification

load('spamTrain.mat');fprintf('\nTraining Linear SVM (Spam Classification)\n')
fprintf('(this may take 1 to 2 minutes) ...\n')C = 0.1;
model = svmTrain(X, y, C, @linearKernel);p = svmPredict(model, X);fprintf('Training Accuracy: %f\n', mean(double(p == y)) * 100);%% =================== Part 4: Test Spam Classification ================
load('spamTest.mat');fprintf('\nEvaluating the trained Linear SVM on a test set ...\n')p = svmPredict(model, Xtest);fprintf('Test Accuracy: %f\n', mean(double(p == ytest)) * 100);

After loading the dataset, ex6 spam.m will proceed to train a SVM to classify between spam (y = 1) and non-spam (y = 0) emails. Once the training completes, you should see that the classifier gets a training accuracy of about 99.8% and a test accuracy of about 98.5%.

Top Predictors for Spam
找出最易被判断为垃圾邮件的单词。

[weight, idx] = sort(model.w, 'descend');
vocabList = getVocabList();fprintf('\nTop predictors of spam: \n');
for i = 1:15fprintf(' %-15s (%f) \n', vocabList{idx(i)}, weight(i));
end

Try your own emails

filename = 'spamSample1.txt';% Read and predict
file_contents = readFile(filename);
word_indices  = processEmail(file_contents);
x             = emailFeatures(word_indices);
p = svmPredict(model, x);fprintf('\nProcessed %s\n\nSpam Classification: %d\n', filename, p);
fprintf('(1 indicates spam, 0 indicates not spam)\n\n');

可以看出我们的邮件判断准确率大概在98%左右。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习之推荐系统

我们从一个例子开始定义推荐系统的问题。 假使我们是一个电影供应商,我们有 5 部电影和 4 个用户,我们要求用户为电影打分。 基于内容的推荐系统 在一个基于内容的推荐系统算法中,我们假设对于我们希望推荐的东西有一些数据,这 些数据是有关这些东西的特征。 在我们的例子…

低潮过后,未来医疗可穿戴市场将如何发展?

来源:资本实验室在过去几年中,以智能手表为代表的可穿戴设备市场从快速爆发,并吸引全球厂商趋之若鹜;到如今平缓发展,众多厂商黯然离场,经历了一轮过山车般的炒作周期。但可穿戴设备市场难道只是看上去很美…

大规模机器学习

如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果。我们应 该怎样应对一个有 100 万条记录的训练集? 以线性回归模型为例,每一次梯度下降迭代,我们都需要计算训练集的误差的平方和, 如果我们的学习算法需要有 20 次迭代,这便已经是非常大的计算代价。 …

中国半导体:存储器能否打破海外垄断?

来源:中金公司摘要:根据WSTS的统计,全球存储器行业营收2017年达到1319亿美元,占半导体行业收入的30.1%,过去五年(2012-2017)年复合增长率高达37%。▌全球市场概览:千亿美金市场,寡头竞争,IDM模式…

hdu 4588 Count The Carries

思路:容易发现二进制表示的数的最低位规律是01010101……;接着是001100110011……;接着是:0000111100001111…… 这样我们发现每一位的循环节是2^(i1),前2^i是0,后面的是1.这样就可以算出每一位1出现的次数…

数字图像处理入门

图像是指能在人的视觉系统中产生视觉印象的客观对象,包括自然景物、拍摄到的图片、用数学方法描述的图形.图像的要素有儿何要素〈刻画对象的轮廓、 形状等〉和非几何要素(刻画对象的颜色、 材质等〉。 什么是数字图像 简单地说, 数字图像就…

马化腾六年后知乎再提问:未来十年哪些基础科学突破会影响互联网科技产业?...

来源:量子位“未来十年哪些基础科学突破会影响互联网科技产业?产业互联网和消费互联网融合创新,会带来哪些改变?”昨天午夜时分,一个新问题出现在知乎。略微不同之处在于,这个问题的提出者ID是ponyma&#…

2018 中国开源年度报告发布,阿里系独占鳌头

来源:网络大数据摘要:指南针团队使用网络爬虫与 GitHub 数据 API 获取开源代码库的数据如原代码、项目信息、项目的静态信息如项目名称、起始日期等、与动态信息如fork数、客户给与的星数等众多项目相关的信息储存在本地数据结构中。第二篇 数据篇2.1 指…

图像处理中的matlab使用

图像的矩阵表示 类和图像类型 虽然使用的是整数坐标, 但 MATLAB 中的像素值(亮度)并未限制为整数。 表 1-1 列出了 MATLAB 和图像处理工具箱为描述像素值而支持的各种类。 表中的前 8 项是数值型的数据类,第 9 项称为字符类&…

AI洞观 | 一文读懂2018安博会四大趋势

来源: 网易智能10月23-26日,2018年安博会在北京顺义举行。这是全球规模最大,最具影响力的安防展会之一,据安博会官方介绍,本次展会总面积超过10万平方米,展位数突破5000个,云集了国内外上千家安…

图像的点运算

对于一个数字图像处理系统来说, 一般可以将处理流程分为3个阶段。在获取原始图像 后, 首先是图像预处理阶段, 其次是特征抽取阶段,最后才是识别分析阶段。预处理阶段尤 为重要, 这个阶段处理不好则直接导致后面的工作…

量子计算技术发展迅猛,商业潜力初现!如何把握量子计算时代的新机遇?

来源:蓝驰创投编译:全球君摘要:通用量子计算机一旦实现,将对通信安全、导航、成像以及人工智能、生物制药、新材料研发等诸多领域产生颠覆性影响,带来国家安全和社会经济发展的极大变革。通用量子计算机一旦实现&#…

分段线性变换与直方图修正

本文主要包括以下内容 分段线性变换两种实用的直方图修正技术:直方图均衡化和直方图规定化本章的典型案例分析 基于直方图均衡化的图像灰度归一化直方图匹配 分段线性变换 分段线性变换有很多种, 包括灰度拉伸、 灰度窗口变换等, 本节仅讲述最为常用…

图像的几何变换

包含相同内容的两幅图像可能由于成像角度、透视关系乃至镜头自身原因所造成的几何失 真而呈现出截然不同的外观,这就给观测者或是图像识别程序带来了困扰。通过适当的几何变 换可以最大程度地消除这些几何失真所产生的负面影响,有利于我们在后续的处理…

交叉科学不仅不是边缘学科,反而应是科研主流

来源:科学网摘要:“信息时代将走过数字化、网络化、智能化等几个阶段,从现在分界将信息时代和智能时代划分成两个时代有点牵强。”“信息时代将走过数字化、网络化、智能化等几个阶段,从现在分界将信息时代和智能时代划分成两个时…

空间域图像增强

图像增强是数字图像处理相对简单却最具艺术性的领域之一,增强的目的是消除噪声, 显现那些被模糊了的细节或简单突出一幅图像中我们感兴趣的特征。一个简单例子是增强图 像的对比度, 使其看起来更加一目了然。增强是图像处理中非常主观的领域…

wordpress增删改查

wordpress 焦点图插件-增删改查操作 2012-02-01 15:39:14分类: 系统运维 该插件在wordpress-3.3.1-zh_CN版本下开发,主要用于在后台管理首页焦点图(图片轮播)。存放焦点图信息的表 focusphoto(id,photourl,linkto,title,descripti…

AI改变现代商业的25种方式

来源:财富编译 | Geek AI、微胖、茜茜现在,是时候真正了解 AI 未来。关于人工智能引起的焦虑 - 就业问题是其主要来源 - 现实是,没有人知道未来会如何。原因是,我们永远无法预见人类的聪明才智,以及全世界数百万企业家…

中值滤波与图像锐化

本文主要包括以下内容 中值滤波及其改进算法图像锐化, 包括梯度算子、拉普拉斯算子、高提升滤波和高斯-拉普拉斯变换本章的典型囊例分析 对椒盐噪声的平滑效果比较Laplacian与LoG算子的锐化效果比较 中值滤波 中值滤波本质上是一种统计排序滤波器. …

5G手机“狂奔而来”,业内预计明年二季度全面上市

来源: 全天候科技作者:张超,编辑:舒虹随着科技快速发展、网络不断升级,智能手机的“5G时代”正狂奔而来。10月25日,台湾电子时报援引行业消息人士称,芯片、手机厂商等正在加快进度,预…