#Prioritizing what to work on:Spam classification example
实际工作工程中,我们应该优先处理哪些事情?
为了应用监督学习,首先要想的是如何来表示邮件的特征向量x:
- 在特征向量中放入0和1,对应文本中该单词是否出现。
如何在有限时间下让你的垃圾邮件分类器具有高精准度和低错误率?
- 收集大量数据
- “honeypot”项目通过构建虚假的邮箱地址,然后故意将这些地址暴露给垃圾邮件的发送者,以此来收集大量的垃圾邮件然后得到大量的垃圾邮件数据来训练分类算法
- 用更复杂的特征变量来描述邮件
- 关注邮件的主体部分/正文,并构建更复杂的特征
1、通过一个简单的算法来快速实现它,然后通过交叉验证来测试数据;
2、画出相应学习曲线以及检验误差来找出算法是否存在高偏差或者高方差或其他的问题,在作出这些分析之后再来决定是否使用更多的数据或者特征等等;
3、误差分析:看交叉验证的数据,看被算法错误分类的文件,有什么共同的特征和规律,思考应该设计怎样的新特征,或目前的系统有什么优点和缺点;
#Error analysis(误差分析)
手动地去检查算法所出现的失误的过程,能导向最有成效的道路:
- pharma:制药
- replica:假货
- fishing email:钓鱼邮件(诱导密码)
#numerical evaluation(数值估计的方法)
改进学习算法的时候,如果算法能够返回一个数值评价指标来估计算法执行的效果,将会很有帮助:
*在自然语言处理中,这种方法是通过一种stemming software(词干提取软件)实现的,可去搜索引擎上搜一下Porter Stemmer,这种软件在词干提取方面做得相当不错,会将所有discount、discounts等视作同一个单词。
- cross validation error(交叉验证错误率):通过数组方法来评估算法的效果将会非常有用,通过交叉验证在使用和不使用词干提取时各自的错误率来估计算法的效果。
*强烈建议,在交叉验证向量上来坐误差分析。
#Error metrics for skewed classes(不对称性分类的误差评估)
#skewed classes(偏斜率):一个类中的样本数与另一个类的数据相比多很多。
如果有一个偏斜类,用classification accuracy(分类精确度)并不能很好地衡量算法,因为你可能会获得一个很高的精确度,非常低的错误率,但是我们并不知道,我们是否真的提升了分类模型的质量:
当我们遇到这样一个偏斜类时,我们希望有一个不同的error metric(误差度量值)或者不同的evaluation meric(评估度量值),
其中一种评估度量值叫precision/recall(查准率/召回率):
- true positive(真阳性):预测和样本均为1;
- true negative(真阴性):预测和实际均为0;
- false positive(假阳性):预测为1但是实际为0;
- false negative(假阴性):预测0实际1。
- precision(查准率):对于所有预测的患有癌症的病人中有多大比率的病人是真正患有癌症的。【越高越好】
- recall(召回率):如果所有测试集里的病人确实得了癌症,有多大比例我们正确预测他们得了癌症。【越高越好】
*如果这个类出现得非常少,则总是习惯用y=1。
#Trading off precision and recall(精确度和召回率的权衡)
有没有办法自动选取临界值?
- F_1 score(F_1值)
#Data for machine learning(机器学习数据)
- perceptron(感知器)
- Winnow类似线性回归,但现在用得少了
- memory-based(基于内存的学习算法)
- naive Bayes(朴素贝叶斯算法)
Key test:
1、一个人类专家看到了特征值x能有信心预测出y值吗?因为这样证明y可以根据特征值x被准确的预测出来;
2、我们能否得到一组庞大的训练集,并且在这个训练集中训练一个有很多参数的学习算法。
PS.内容为学习吴恩达老师机器学习的笔记【https://study.163.com/course/introduction/1004570029.htm】