在设计一个机器学习系统时我们应该考虑什么
假设我们要设计一个垃圾邮件分类的机器学习系统,给定一定数量的训练集,我们需要为每一份邮件设置一个向量。这个向量中可能包括deal、buy、name等条目,每个向量可能有10000到50000个条目。如果邮件中出现了其中的条目,我们就可以把它当作垃圾邮件。我们用一定数量的训练集去训练我们的算法,使其可以对邮件进行分类。
为了提高我们的分类器的准确性,我们可以采取以下措施:
- 收集大量的数据
- 使用更为复杂的特征值,例如可以使用邮件的主题中的数据
- 开发算法以不同的方式处理输入,例如识别垃圾邮件中的拼写错误。
然而对我们来说,很难确定哪种方法是有效的。
误差分析
解决一个机器学习问题的推荐流程:
1.一开始先采用一个简单的机器学习算法,并很快的实现它,计算交叉验证误差;
2.画出学习曲线来看算法出了哪些问题,来决定是要收集更多的数据还是增加特征值等等;
3.误差分析:手动的检验交叉验证集,来看算法究竟在哪些地方出现问题。
我们最好把误差分析的结果设定为一个简单的实数来评估算法的表现,来便于比较。
偏斜类(Skewed Classes)的评估度量
现在我们有一个用于癌症预测的逻辑回归模型hθ(x)。(其中当癌症时,y=1,否则y=0)
假设我们通过误差分析发现预测的错误率为1%。若此时的测试集中有0.5%的病人患癌症,如果我们将模型改为无论x为多少,y恒为0,那么错误率只有0.5%,那么是否能说第二种模型的预测效果更好呢?显然不可以。这就是偏斜类。
为了解决偏斜类问题。我们引入查准率Precision和召回率Recall。
查准率和召回率越高越好。
查准率和召回率的衡量
查准率和召回率总是不能同时达到很高的值,这就需要我们在这两只之间进行衡量。
自动选择查准率和召回率的方法:
1.对于不同的临界值分别计算Precision和Recall。
2.计算,选择F1Score值大的。
机器学习中的数据究竟需要收集多少