当我们在进行机器学习时着重要考虑什么问题。以垃圾邮件分类为例子。假如你想建立一个垃圾邮件分类器,看这些垃圾邮件与非垃圾邮件的例子。左边这封邮件想向你推销东西。注意这封垃圾邮件有意的拼错一些单词,就像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. SpringBoot标签之@ConfigurationProperties、@PropertySource注解的使用

    当获取主配置文件中属性值时,只需@ConfigurationProperties(prefix = "person")注解来修饰某类,其作用是告诉springBoot,此类中的属性 ...

  2. Canvas & SVG

    Canvas & SVG https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-dev ...

  3. MySQL创建远程用户并授权

    今天需要在本地测试系统功能,因为本地没有数据库,就需要在程序里面连接远程数据库: 先用ssh登录远程服务器,用root连上数据库看看情况: mysql> select Host,User,Pas ...

  4. HTTP协议 - 使用php模拟get/post请求

    首先 有个疑问, 是不是只有浏览器才能发送http 请求? 答案肯定是错的,第一篇就说了,http是由请求行,请求头,请求主体三个部分组成,那么我们可不可以用代码来模拟一下get和post请求呢: 首 ...

  5. do not track

    privacy.trackingprotection.enabled

  6. maven项目 报错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

    ssm的项目如果在mapper.xml  mapper接口 配置没问题的情况下  项目依然报org.apache.ibatis.binding.BindingException: Invalid bo ...

  7. 部署 Django

    补充说明:关于项目部署,历来是开发和运维人员的痛点.造成部署困难的主要原因之一是大家的Linux环境不同,这包括发行版.解释器.插件.运行库.配置.版本级别等等太多太多的细节.因此,一个成功的部署案例 ...

  8. mfs 使用心得

    CentOS的安装方法: To install MooseFS from officially supported repository on EL7, follow the steps below: ...

  9. Flask 构建微电影视频网站(一)

    Flask构建电影视频网站 Python MTV模型 Flask微内核 Flask扩展插件配置及使用方法 根据业务开发网站前后台功能 Flask结合MySQL数据库 你将可以独立开发网站 独立部署运维 ...

  10. centos6.8下安装matlab2009(图片转帖)

    前言 如何优雅的在centos6.8上安装matlab2009. 流程 不过我个人安装过程完后启动matlab的时候又出现了新问题: error while loading shared librar ...