当我们在进行机器学习时着重要考虑什么问题。以垃圾邮件分类为例子。假如你想建立一个垃圾邮件分类器,看这些垃圾邮件与非垃圾邮件的例子。左边这封邮件想向你推销东西。注意这封垃圾邮件有意的拼错一些单词,就像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. Linux基础学习(11)--Shell编程

    第十一章——Shell编程 一.基础正则表达式 1.正则表达式与通配符(*,?,[ ]): 2.基础正则表达式: 二.字符截取命令 1.cut字段提取命令: 空格分割时,不知道空格有多少个,无法分割行 ...

  2. JAVA锁机制-可重入锁,可中断锁,公平锁,读写锁,自旋锁,

    如果需要查看具体的synchronized和lock的实现原理,请参考:解决多线程安全问题-无非两个方法synchronized和lock 具体原理(百度) 在并发编程中,经常遇到多个线程访问同一个 ...

  3. PLSQL 错误问题:Datebase character set (AL32UTF-8) and Client character set (ZHS16GBK) are different.

    (解决不了,网上用的是Orecal,我用的只是客户端.) 网上找到解决方法 打开注册表(ctr+R,输入regedit),根据报错提示找到注册表位置,但本机是win10 64位系统,根据以上路径找不到 ...

  4. How to remove popup on boot on Windows 2003

    Administrative Tools\Manage Your Server\Add or remove a role\Add or Remove Programs Local Computer P ...

  5. hibernate多对多映射文件的配置

    user.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate ...

  6. Spring boot多线程

    1.配置线程配置类 package test; import java.util.concurrent.Executor; import org.springframework.aop.interce ...

  7. HTML条件注释

    前面的话 IE条件注释是微软从IE5开始就提供的一种非标准逻辑语句,作用是可以灵活的为不同IE版本浏览器导入不同html元素.很显然这种方法的最大好处就在于属于微软官方给出的兼容解决办法而且还能通过W ...

  8. POJ 3621-Sightseeing Cows-最优比率环|SPFA+二分

    最优比率环问题.二分答案,对于每一个mid,把节点的happy值归类到边上. 对于每条边,用mid×weight减去happy值,如果不存在负环,说明还可以更大. /*---------------- ...

  9. Sorting It All Out POJ - 1094 拓扑排序

    题意:给N个字母,和M个偏序关系 求一个可确定的全序,可确定是指没有其他的可能例如A>B D>B 那么有ADB DAB两种,这就是不可确定的其中,M个偏序关系可以看做是一个一个按时间给出的 ...

  10. Codeforces980 D. Perfect Groups

    传送门:>Here< 题目大意:先抛出了一个问题——“已知一个序列,将此序列中的元素划分成几组(不需要连续)使得每一组中的任意两个数的乘积都是完全平方数.特殊的,一个数可以为一组.先要求最 ...