《机器学习-吴恩达》课程笔记week7

本文详细介绍了支持向量机(SVM)的工作原理,包括优化目标、大间隔直觉和数学基础。通过示例展示了C参数如何影响线性分类边界,并探讨了高斯核函数在非线性分类中的作用。此外,还提供了数据集和代码,用于训练和评估SVM模型,以及在垃圾邮件分类任务中的应用。读者将学习到如何选择合适的C和σ参数,以及如何处理和提取电子邮件特征。
摘要由CSDN通过智能技术生成

目录

Large Margin Classification

Optimization Objective

Large Margin Intuition

Mathematics Begind Large Margin Classification

Kernels

Kernels I

Kernels II

ex-6

文件结构:

第一部分完成步骤:

第二部分完成步骤:


Large Margin Classification

Optimization Objective

介绍了svm做了什么事 ,相比较于logistic regression。给出了数学定义

Large Margin Intuition

结合函数图介绍了svm的情况,它是一个large margin classifier,以及在不同c的情况下,预测会倾向于做出怎么样的变化。

Mathematics Begind Large Margin Classification

解释了cost function公式的物理意义,以及为什么它倾向于选large margin

Kernels

Kernels I

如何去选择feature。kernal function(gaussian kernels)需要读文稿辅助理解。

Kernels II

解释上一节遗漏的概念,需要读文稿辅助理解。

ex-6

目的:通过svm构建一个垃圾邮件分类器。

文件结构:

ex6.m - main函数,主处理流程。处理一个简单的2d分类问题。

ex6data1.mat - ex6data2.mat - ex6data3.mat - 数据

svmTrain.m - svm训练函数

svmPredict.m - svm预测函数

plotData.m - 用内置的plot函数画图,输入二维X和一维y,平面图坐标为x1/x2,用+表示y=0,o表示y=1

visualizeBoundaryLinear.m - 画线性预测分割线

visualizeBoundary.m - 画出非线性预测分割线

linearKernel.m - svm kernel

[*] gaussianKernel.m - gaussian kernel

[*] dataset3Params.m - 针对data3的参数

ex6_spam.m - 第二个练习的主函数,处理垃圾邮件分类

spamTrain.mat - spam训练集

spamTest.mat - spam测试集

emailSample1.txt -  emailSample2.txt - 样例邮件

spamSample1.txt -  spamSample2.txt - 样例spam

vocab.txt - 词汇表

getVocabList.m - 加载词汇表

porterStemmer.m - stemming函数,把同根词都转成词干

readFile.m - 读文件并把内容转为string

submit.m - 提交作业

[*] processEmail.m - 对email进行处理

[*] emailFeatures.m - 从email中提取feature

可以看到这几次练习的函数拆分比早期作业的细,很多放在main里面的功能都拆成了单独的代码文件。

第一部分完成步骤:

1. 利用dataset1来熟悉svm中C对分割预测线的影响【注:这里使用的svmTrain以及大多数的svm包都会自动添加feature x0=1,所以这里无需手动处理x0】

C=1/10/100如下图:

fb9a630675c158917518eec4a91a657d.png

可以看出,当C越大时越倾向于把所有的数据都分开,但是自然数据存在误差,所以并不是C越大划分越好。

2. 利用高斯核函数和dataset2完成非线性分类。要点:1. 计算每个样例之间的距离 2. 带宽参数lambda决定了相似性矩阵下降的快慢

 如图为sigma=0.1/0.2之间的差距

sigma增大的效果和C减小的效果相似。

3. 利用训练集和cv集来寻找最适合的C和sigma

利用两层for循环遍历,数据量小的时候可以这样处理。

第二部分完成步骤:

1. 对数据进行处理

对url来说常见的处理方式是统计url出现的次数,而不是看具体是哪个url。在processEmail中已经做了预处理,包括:

将字符统一转成小写/转换特殊字符为空格/转换数值为标志符号number/转换http地址为标志位httpaddr/转换email地址为标志位emailaddr/转换价格为标志位dollar/词汇转成词干/删除特殊字符

之后把词汇表中的词对应标号写在一个list里返回即可。在实际应用中,一般取10 000~50 000个spam邮件高频词。

在getVocabList中使用了cell函数,该函数返回的数组or矩阵可以存储字符串作为item,按下标访问时通常使用花括号{}而不是圆括号()来调用。之后再把数组转成0-1标签数列,作为输入的x。

2. 训练svm

使用task1中相同的技术,这里用的linearKernel。

3. 选做

尝试从SpamAssassin Public Corpus的数据中构建自己的数据集和词汇表,以及尝试libsvm。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值