Stanford 机器学习笔记 Week6 Machine Learning System Design

Building a Spam Classifier

Prioritizing What to Work On

本节将会设计一个垃圾邮件分类器,具体方法是这样的:首先设定一些经常在垃圾邮件中出现的单词,比如

buy, discount, deal等等,假如有m个。然后对于一封邮件,用一个长度为m的0/1向量表示这些单词是否在

这封邮件中出现过。

一般来说,这些单词不是人工设定的,而是从训练集中选择出现频率最高的。提高准确性的方法有:
1. 收集更多数据。
2. 关注隐含信息,如发送邮件的服务器等。
3. 注意字符替换,比如w4tch , med1cine等。

而具体选择哪个方法是需要策略的,下面将会介绍。

Error Analysis

改善算法一般可以这样:

  1. 提出算法,并用cross validation集检验。
  2. 画出learning curve,看看增大数据集是否会有改善(是否过拟合/欠拟合)。
  3. 手动调查哪些数据会出现错误,并研究原因,看看能设置哪些新属性从而区分它们。

Handling Skewed Data

Error Metrics for Skewed Classes

有时不能用预测准确率来评估一个算法好坏。比如一个肿瘤良性/恶性分类器,数据集中只有0.5%的数据是

恶性的(数据非常skewed),那么举一个极端的例子,如果你对于所有数据都预测良性,你的准确率是

99.5%,因此这不能反映出算法的优劣。

在这种情况下,可以使用Precision/Recall模型:
Stanford 机器学习笔记 Week6 Machine Learning System Design_第1张图片

Precision = true positive / predicted positive = true positive / ( true positive + false positive)

Recall = true positive / actual positive = true positive / (true positive + false negative)

这两项都是越高越好,如果像上面一样对所有数据都预测为良性,那么这两项都会等于0。

注意要把出现频率极少的一项作为1。

accuracy = SUM(TruePositive,TrueNegative)/All (ALL为表格所有值之和)

Trading Off Precision and Recall

对于一个肿瘤分类算法,假设1表示良性,0表示恶性,正常的预测方法是hθ(x)< 0.5 预测为0,>0.5预测为

1。如果我们想要预测为0(恶性)的预测尽量准确,一种方法是修改分类的参数值0.5为更小的数。这样的效

果是预测为0的结果正确性更高,但同时也有更多确实为0(恶性)的患者被预测为1了。直接的效果就是

precision上升同时recall下降。实际上,在调节分类参数时precision和recall是此消彼长的。

假设测出了各个算法的P,R值,如何确定哪个最好呢?平均数肯定是不合理的,一种合理的方法是计算:

2*P*R/(P+R)

Using Large Data Sets

Data For Machine Learning

对于大多数学习算法来说,给足够多的数据,最终都会有较好的结果

“It’s not who has the best algorithm wins, it’s who has the most data.”

然而这需要满足一个条件,就是模型使用的属性包含了足够的信息,假如只给出房子的大小,而没有其他的

信息来预测房价,有再多的数据也不能保证准确性。检验模型是否有用的一个方法就是想想如果把模型中的

信息给一个人类专家,他可以准确预测吗?

因此一个好的算法一般是:

1由一个复杂的模型组成(linear/logistic regression中参数复杂或是神经网络中的网络结构复杂)

2用大量的数据来避免过拟合。

第一条保证low bias (Jtrain(θ) 非常小),第二条保证low varience(Jtrain(θ) 约等于 Jtest(θ)),因此这

种情况下 Jtest(θ)也会非常小。

你可能感兴趣的:(机器学习)