首页 > 代码库 > 机器学习系统设计

机器学习系统设计

1.解决机器学习问题的方法

  • 收集大量数据 
  • 开发复杂的特征 (for example: using email header data in spam emails)
  • 开发算法去用不同的方式处理输入 (recognizing misspellings in spam).

  哪种方法有用视情况而定

2.误差分析

 解决机器学习问题的推荐方法:

  • 以一个很简单的算法开始,快速实现,早些测试.
  • 绘制学习曲线去决定是否更多数据,更多特征会有用.
  • 误差分析: 人为检验交叉验证集里的错误,试着观察出趋势.

  -----------------------------------------------------------------------

 将误差结果转换为一个数值,否则很难评估算法的表现。

 注意处理输入,比如一个单词的不同形式可以用词干软件来处理为一个词。

3.偏斜类的误差度量

 有时很难区分误差的减少是否是因为算法的提高。eg:在一个癌症预测中,有0.5%的人患有癌症,我们发现我们的学习算法有1%的误差.然而,如果我们仅仅把每一个人都假定为不患癌症,那么我们的误差会减少到0.5%即使我们没有提高算法.这通常发生在偏斜类中,即我们的类在整个数据集里很少见,也就是一个类的数量要比另一个多很多。

 我们可以使用 精确率precision/召回率recall:

  预测的: 1, 实际的: 1 --- True positive

  预测的: 0, 实际的: 0 --- True negative

  预测的: 0, 实际的, 1 --- False negative

  预测的: 1, 实际的: 0 --- False positive

 Precision: of all patients we predicted where y=1, what fraction actually has cancer?

 True Positives / Total number of predicted positives=True Positives / (True Positives+False positives)

 Recall: Of all the patients that actually have cancer, what fraction did we correctly detect as having cancer?

 True Positives / Total number of actual positives=True Positives / (True Positives+False negatives)

 我们想要两个比率都高,在开始的例子里,我们预测患病的人为0,那么召回率为0,可知虽然误差比率小,但它召回率很差。

 如果分母为0,那么该项是没有定义的。

4.精准率和召回率衡量

 想很确信的预测两个类的结果,可以增加阈值:  

  Predict 1 if: hθ(x)0.7

  Predict 0 if: hθ(x)<0.7

 这样当患病概率为70%时我们才说该病人患病,计算可知,这样会有高精准率,低召回率。

 想比较安全的预测两个类的结果,可以减少阈值:

  Predict 1 if: hθ(x)0.3

  Predict 0 if: hθ(x)<0.3

 这样会导致低精准率,高召回率。

 可知:

 阈值越大, precision越高,recall越小.

 阈值越小, recall越高,precision越小.

 为了将这两个度量整合为一个数,我们引入F值(F value):

  • 取平均数:(P+R)/2,表现不好,If we predict all y=0 then that will bring the average up despite having 0 recall. If we predict all examples as y=1, then the very high recall will bring up the average despite having 0 precision.
  • 更好的方法是计算 F Score (or F1 score):F Score=2*PR/(P+R),这样的话要想F值大,两个度量都得很大。

 在交叉验证集训练两个比率以至于不会偏向于我们的测试集。

5.机器学习的数据

  • 某些情况下,一个不好的算法如果有充足的数据可以比一个有较少的数据的好的算法表现更好。
  • 我们必须选择好的特征以此保证我们有充足的信息。一个有用的test: Given input x, would a human expert be able to confidently predict y?
  • Rationale for large data:如果我们有一个低偏差算法(拥有许多特征和隐藏单元的复杂函数),那么使用越多数据,我们就越不会过拟合(测试集上的算法也会越精确)。

 

机器学习系统设计