《 Hands-On Machine Learning with Scikit-Learn and TensorFlow》笔记
MNIST
MNIST数据集介绍及载入
Training a Binary Classifier
使用sklearn包训练二分类器
Performance Measures
3.1 利用交叉验证(Cross-Validation)来验证模型
有用函数: sklearn包中的cross_val_score
3.2 混淆矩阵(Confusion Matrix)
使用函数 cross_val_predict和confusion_matrix计算混淆矩阵
3.3 准确率和召回率
准确率(Precision)
召回率(Recall)
F1分数(F1 score)
F1 score favors classifiers that have similar precision and recall.
3.4 Precision/Recall Tradeoff
分类器在做预测时根据预测的分数来决定时属于正类还是反类,我们需要设定一个分数阈值(threshold)来作为划分,低阈值的选取对应高的recall和低的precision,而高阈值的选取对应了高的precision和低的recall。
实践中我们可以使用sklearn中的decsion_function获得分数,并指定分类阈值。
还可以使用precision_recall_curve计算recall、precision曲线。
根据recall、precision曲线,我们就可以按照特定的场景需求来合理选择阈值。
3.5 The ROC Curve
和准确率/召回率曲线类似,其是衡量 true positive rate(TPR) 和false negative rate的关系.
该曲线包围的面积(area under the curve(AUC))越大,说明分类器越好.
3.5 总结
训练二分类器的一般流程如下:
1、选择合适的metrics作为评价指标
2、 使用交叉验证训练模型
3、取得precision/recall的平衡来满足需求
4、利用ROC curves和ROC AUC scores来比较不同模型的性能
Multiclass classification
一些算法可以直接进行多分类,如随机森林、朴素贝叶斯等,而另外一些算法只能进行二分类,如支持向量机、线性分类器等。
有很多策略可以将二分类算法推广到多分类任务中:
one-versus-all(OvA): 训练N个二分类器,每个二分类器负责预测一个label。
one-versus-one(OvO):训练N*(N-1)个二分类器,每个二分类器负责预测一对label。
对于SVM来说,使用OvO策略更好,对于绝大多数算法,更推荐使用OvA策略。
sklearn包针对多分类任务自动选择OvA策略(SVM例外)。
也可以使用OneVsOneClassifier或者OneVsRestClassifier类自定义策略。
对于随机森林等可以直接进行多分类,不需要使用OvO或者OvA策略。
Error Analysis
找到合适的模型之后,我们想要更进一步的提升,对错误的分析就很有必要。
分析混淆矩阵
对混淆矩阵进行一些可视化的操作之后,我们可以方便看出一些错误原因,并针对这些错误原因做进一步的优化。具体的分析方法根据实际情况而异。
Multilabel Classification
有时我们需要为一个实例输出多个标签,这就需要用到Multilabel Classification。
有多种方法可以验证多标签的分类器,一种方法是对于每个标签计算它的F1分数,然后取平均来评价。
以上这种方法是建立在每个标签重要性相同的前提下的,然而实际情况可能并非如此。可以改变average参数来设置各个标签的权重。具体参考sklearn的文档。
Multioutput Classiffication
举例
图片去噪问题,输入是一张含有噪声的图像,输出是去噪了的图像,这算是一个Multioutput Classification问题。
参考
1、Hands-On Machine Learning with Scikit-Learn and TensorFlow by Aurélien Géron (O’Reilly). Copyright 2017 Aurélien Géron, 978-1-491-96229-9