当我们在进行机器学习时着重要考虑什么问题。以垃圾邮件分类为例子。假如你想建立一个垃圾邮件分类器,看这些垃圾邮件与非垃圾邮件的例子。左边这封邮件想向你推销东西。注意这封垃圾邮件有意的拼错一些单词,就像Med1cine中有一个1,m0rtgage里有个0。右边的邮件显然不是一个垃圾邮件。

假设我们已经有一些加过标签的训练集,比如标注垃圾邮件为y=1,和非垃圾邮件为y=0。那么如何用监督学习的方法来构造一个分类器,区分垃圾邮件和非垃圾邮件呢?为了应用监督学习,首先必须确定的是,如何用邮件的特征构造向量x。给出训练集中的特征x和标签y,我们就能够训练出某种分类器,比如用逻辑回归的方法。这里有一种选择,邮件的一些特征变量的方法,比如说我们可能会想出一系列单词或者成百上千的单词,我们可以认为这些单词能够用来区分垃圾邮件或非垃圾邮件。比如,如果邮件包含单词"deal(交易),同时包含单词"buy(买)"、 "discount(折扣)",那么很有可能是垃圾邮件。如果一封邮件中,包含了收件人名字,这有可能是一个知道收件人的人写的,说明这封邮件不太可能是垃圾邮件。因为某些原因我们还可以认为now(现在)"这个单词表明了这封邮件可能并不是垃圾邮件,因为经常收到一些很紧急的邮件,当然还有别的单词。我们可以选出这样成百上千的单词,给出一封这样的邮件,我们可以将这封邮件用一个特征向量来表示。方法如下,现在列出一些之前选好的单词,然后按字典序排序(并不是一定要这样的排序)。看看下图的例子,准备检查一下前面提到的词汇,看它们是否出现在这封邮件中。用一个特征向量x,表示右边的这封邮件,收件人名字没有出现,因此是0,单词"buy(购买)"出现了,所以是1. 注意在向量里面只有1或0,表示有没有出现。所以尽管"buy"出现了两次,这里仍然只是1。单词"deal"也出现了,所以也是1。单词"discount"并没有出现,至少在这封邮件里是这样,以此类推。单词"now"出现了,所以我在特征向量中,依据对应的单词是否出现,填上0和1。 在这个例子中,因为我选择了100个单词,用于表示是否可能为垃圾邮件。所以这个特征向量x的维度是100,并且如果这个特定的单词即单词级j出现在这封邮件中, 那么每一个特征变量Xj的值为1。反之,Xj为0。这样我们就可以使用特征向量来表示这封邮件。顺便说一句,在实际工作中最普遍的做法是遍历整个训练集。然后在训练集中选出出现次数最多的n个单词,n一般介于10,000和50,000之间。然后把这些单词作为特征。因此不同于手动选取,我们只用遍历训练样本,然后选出出现频率最高的词语。差不多是10,000到50,000个单词,这些单词会构成特征。这样你就可以用它们,来做垃圾邮件分类。

如果你正在构造一个垃圾邮件分类器,你应该会面对这样一个问题,那就是如何在有限的时间和精力下改进你的方法,从而使得你的垃圾邮件分类器具有较高的准确度。从直觉上讲是要收集大量的数据。就垃圾邮件分类而言,有一个叫做"Honey Pot"的项目,它可以建立一个假的邮箱地址,故意将这些地址泄露给发垃圾邮件的人,这样就能收到大量的垃圾邮件。这样的话,我们就能得到非常多的垃圾邮件来训练学习算法。在前面的课程中我们知道,大量的数据可能会有帮助,也可能没有。对于大部分的机器学习问题,还有很多办法用来提升机器学习的效果。比如对于垃圾邮件而言,也许你会想到用更复杂的特征变量。像是邮件的路径信息,这种信息通常会出现在邮件的标题中,因此垃圾邮件发送方在发送垃圾邮件时,他们总会试图让这个邮件的来源变得模糊一些,或者是用假的邮件标题或者通过不常见的服务器来发送邮件。用不常见的路由他们就能给你发送垃圾邮件,而且这些信息也有可能包含在邮件标题部分。因此可以想到,我们可以通过邮件的标题部分来构造更加复杂的特征,来获得一系列的邮件路由信息,进而判定这是否是一封垃圾邮件。你还可能会想到别的方法,比如从邮件的正文出发,寻找一些复杂点的特征,比如单词"discount”, 是否和单词"discounts"是一样的,又比如单词"deal(交易)"和"dealer(交易商)"是否也应视为等同。甚至,像这个例子中有的单词小写有的大写,或者我们是否应该用标点符号来构造复杂的特征变量,因为垃圾邮件可能会更多的使用感叹号。同样的,我们也可能构造更加复杂的算法来检测或者纠正那些故意的拼写错误,比如m0rtgage、med1cine、w4tches。因为如果你将4放到"w4tches"中,那么用我们之前提到的简单的方法,垃圾邮件分类器不会把"w4tches” 和"watches” 看成一样的, 这样我们就很难区分这些故意拼错的垃圾邮件,这么做可以逃避一些过滤规则。当我们使用机器学习时,可以“头脑风暴”一下,想出一堆方法来试试。

斯坦福大学公开课机器学习: machine learning system design | prioritizing what to work on : spam classification example(设计复杂机器学习系统的主要问题及构建复杂的机器学习系统的建议)的更多相关文章

  1. (原创)Stanford Machine Learning (by Andrew NG) --- (week 6) Advice for Applying Machine Learning & Machine Learning System Design

    (1) Advice for applying machine learning Deciding what to try next 现在我们已学习了线性回归.逻辑回归.神经网络等机器学习算法,接下来 ...

  2. 斯坦福大学公开课机器学习:advice for applying machine learning | diagnosing bias vs. variance(机器学习:诊断偏差和方差问题)

    当我们运行一个学习算法时,如果这个算法的表现不理想,那么有两种原因导致:要么偏差比较大.要么方差比较大.换句话说,要么是欠拟合.要么是过拟合.那么这两种情况,哪个和偏差有关.哪个和方差有关,或者是不是 ...

  3. 第19月第8天 斯坦福大学公开课机器学习 (吴恩达 Andrew Ng)

    1.斯坦福大学公开课机器学习 (吴恩达 Andrew Ng) http://open.163.com/special/opencourse/machinelearning.html 笔记 http:/ ...

  4. Stanford机器学习笔记-7. Machine Learning System Design

    7 Machine Learning System Design Content 7 Machine Learning System Design 7.1 Prioritizing What to W ...

  5. Machine Learning - XI. Machine Learning System Design机器学习系统的设计(Week 6)

    http://blog.csdn.net/pipisorry/article/details/44119187 机器学习Machine Learning - Andrew NG courses学习笔记 ...

  6. 斯坦福大学公开课:iOS 7应用开发 笔记

    2015-07-06 第一讲   课务.iOS概述 -------------------------------------------------- 开始学习斯坦福大学公开课:iOS 7应用开发留 ...

  7. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 11—Machine Learning System Design 机器学习系统设计

    Lecture 11—Machine Learning System Design 11.1 垃圾邮件分类 本章中用一个实际例子: 垃圾邮件Spam的分类 来描述机器学习系统设计方法.首先来看两封邮件 ...

  8. Coursera 机器学习 第6章(下) Machine Learning System Design 学习笔记

    Machine Learning System Design下面会讨论机器学习系统的设计.分析在设计复杂机器学习系统时将会遇到的主要问题,给出如何巧妙构造一个复杂的机器学习系统的建议.6.4 Buil ...

  9. Machine Learning - 第6周(Advice for Applying Machine Learning、Machine Learning System Design)

    In Week 6, you will be learning about systematically improving your learning algorithm. The videos f ...

随机推荐

  1. Python 版百度站长平台链接主动推送脚本

    如果自己的网站需要被百度收录,可以在搜索结果中找到,就需要将网站的链接提交给百度.依靠百度的爬虫可能无法检索到网站所有的内容,因此可以主动将链接提交给百度. 在百度的站长平台上介绍了链接提交方法,目前 ...

  2. PHP的特质Trait使用

    参考: Trait的使用,网站地址https://www.jianshu.com/p/fc053b2d7fd1

  3. delphi 怎么实现主窗口退出时,有一个提示框?

    无论点窗口上的[按钮]还是[右上角的叉],能出现一个提示窗口,“是”-退出窗口,“否”-重新登录(调出登录窗口),“取消”-返回.MessageBox能实现吗?还是要调用新窗口(我调用窗口,有些错误) ...

  4. Lodop扁宽横向241mm*93mm这种怪异的纸张如何设置

    Lodop中如果设置LODOP.SET_PRINT_PAGESIZE(2,'241mm','93mm','');,会发现实际的纸张和自己设置的不同,不只是打印机不识别,xps和pdf虚拟打印机也不能正 ...

  5. UVA 1602 Lattice Animals

    题目 输入n.w.h($1\leqslant n \leqslant 10, 1\leqslant w,h \leqslant n$),求能放在w*h网格里的不同的n连块的个数(注意,平移.旋转.翻转 ...

  6. mysql,mybatis模糊查询

    <if test="deviceType != null and deviceType != ''">and device_type like CONCAT('%', ...

  7. Apache与Nginx动静分离

    概述 Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术.动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项 针对PH ...

  8. BZOJ1565[NOI2009]植物大战僵尸——最大权闭合子图+拓扑排序

    题目描述 Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其中Plants防守,而Zombies进攻.该款游戏包含多 ...

  9. P2141 珠心算测验

    P2141 题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师采用一种快速 ...

  10. DRF 分页组件

    Django Rest Framework 分页组件 DRF的分页 为什么要使用分页 其实这个不说大家都知道,大家写项目的时候也是一定会用的, 我们数据库有几千万条数据,这些数据需要展示,我们不可能直 ...