机器学习系统设计(一)

确定工作的优先级

以垃圾邮件分类器算法为例,要对垃圾邮件分类,我们首先要确定特征变量x,且其个数通常不超过100。例如:在实际开发过程中,我们通常选择训练集中出现频率为10000~50000的单词作为特征变量。

为了降低误差,我们通常的办法有:

  • 收集更多的数据;
  • 基于邮件的路由信息(标题信息)设计一系列复杂的特征;
  • 基于邮件的正文信息设计一系列复杂的特征,例如:discount与discounts是否为同一单词等;
  • 探测(刻意的)拼写错误设计一套复杂的算法。

尽管我们有上述方法来帮助我们降低误差,但我们只是随机的选择一种方法来尝试降低误差。因此,我们还必须学习误差分析来帮助我们如何更系统地选择相关方法来降低误差。

补充笔记
Prioritizing What to Work On

System Design Example:

Given a data set of emails, we could construct a vector for each email. Each entry in this vector represents a word. The vector normally contains 10,000 to 50,000 entries gathered by finding the most frequently used words in our data set. If a word is to be found in the email, we would assign its respective entry a 1, else if it is not found, that entry would be a 0. Once we have all our x vectors ready, we train our algorithm and finally, we could use it to classify if an email is a spam or not.

So how could you spend your time to improve the accuracy of this classifier?

  • Collect lots of data (for example "honeypot" project but doesn't always work)
  • Develop sophisticated features (for example: using email header data in spam emails)
  • Develop algorithms to process your input in different ways (recognizing misspellings in spam).

It is difficult to tell which of the options will be most helpful.

误差分析

在构建学习系统时,我们推荐如下步骤:

  1. 从一个简单的能快速实现的算法开始,实现该算法并使用交叉验证集测试该算法;
  2. 绘制学习曲线,决定优化方法;
  3. 进行误差分析:人工检查交叉验证集中算法做出的错误预测,找出这些错误样本中的某种特征。

以垃圾邮件分类器为例,观察垃圾邮件:

  • 是否可能按照某种类别分类,例如:广告类、钓鱼类等;
  • 是否存在某种特征,例如:邮件路由信息特殊、邮件内容存在刻意拼写错误等;
    ......

通过观察垃圾邮件,我们可以发现某种特征,进而帮助我们改进算法,从而降低误差。

但误差分析只能帮助我们找到算法可优化的地方,其并不提供具体优化的方法。因此,我们需要引入数值评估方法。

我们仍以垃圾邮件分类为例,现假设算法对邮件中存在“discount”这个单词即可判为垃圾邮件,那么邮件中存在“discounts”这个对于该算法而言,其判定为非垃圾邮件。因此,我们通过数值评估得出误差为5%。

现在,我们通过误差分析找到可优化的地方,并引入词干提取法对算法进行优化,通过数值评估得出误差为3%。

从上例中,我们可以看出当我们通过误差分析找到算法可优化的地方,我们可以立即采取优化措施,并通过数值评估立即观察到该优化措施的结果。因此,我们推荐在误差分析找到可优化的地方后,可立即采取相应的优化措施并使用数值评估观察优化结果。

注:我们推荐在交叉验证集上使用数值评估。

Question:
Why is the recommended approach to perform error analysis using the cross validation data used to compute JCV(θ) rather than the test data used to compute Jtest(θ)?

A. The cross validation data set is usually large.
B. This process will give a lower error on the test set.
C. If we develop new features by examining the test set, then we may end up choosing features that work well specifically for the test set, so Jtest(θ) is no longer a good estimate of how well we generalize to new examples.
D. Doing so is less likely to lead to choosing an excessive number of features.

结合之前所学的,我们不难选出C这个正确答案。

补充笔记
Error Analysis

The recommended approach to solving machine learning problems is to:

  • Start with a simple algorithm, implement it quickly, and test it early on your cross validation data.
  • Plot learning curves to decide if more data, more features, etc. are likely to help.
  • Manually examine the errors on examples in the cross validation set and try to spot a trend where most of the errors were made.

For example, assume that we have 500 emails and our algorithm misclassifies a 100 of them. We could manually analyze the 100 emails and categorize them based on what type of emails they are. We could then try to come up with new cues and features that would help us classify these 100 emails correctly. Hence, if most of our misclassified emails are those which try to steal passwords, then we could find some features that are particular to those emails and add them to our model. We could also see how classifying each word according to its root changes our error rate:

It is very important to get error results as a single, numerical value. Otherwise it is difficult to assess your algorithm's performance. For example if we use stemming, which is the process of treating the same word with different forms (fail/failing/failed) as one word (fail), and get a 3% error rate instead of 5%, then we should definitely add it to our model. However, if we try to distinguish between upper case and lower case letters and end up getting a 3.2% error rate instead of 3%, then we should avoid using this new feature. Hence, we should try new things, get a numerical value for our error rate, and based on our result decide whether we want to keep the new feature or not.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 不多不少到现在13个年头了,好快,真的细细数下来好快。你还记得我们上晚自习喜欢到操场上走走的习惯吗?还记得我第一次...
    愫su阅读 367评论 0 1
  • #秘密潜入敌人AI ##巡逻主要代码 using System.Collections; using System...
    Freeson阅读 373评论 0 0