机器学习,基于Skicit-Learn之第三章 -分类(一)

机器学习,基于Skicit-Learn之第三章 -分类(一)
文章仅限于梳理思路,作为复习使用

一、MINST
1、简介:是一组手写的数字图片,每张如片都用其代表的数字标记,这个数据集被广泛使用
2、获取数据集
3、用Matplotlib的imshow函数,可以显示图片
二、训练二元分类器
1、创建目标向量
2、选择分类器:SGD 
使用Scikit-Learn的SGDClassifier类,优点是:能够有效的处理非常大型的数据集。
3、用交叉验证进行性能测量

  1. 可以自己写一个
  2. 可以使用cross_val_score()函数评估分类模型,采用k-折交叉验证法
  3. 使用混淆矩阵评估分类器性能(更好)
    混淆矩阵:在分类模型下,预测结果与正确标记之间存在四种不同的组合
    在这里插入图片描述

使用class_val_predict()函数,它也是进行k-折交叉验证,只不过这个函数返回的不是评估分数,是每个折叠的预测,这意味着对于每个实例都可以得到干净的预测。
使用confusion_matrix()函数来获取混淆矩阵

4、根据混淆矩阵可以算准确率、精确率、召回率
准确率:准确率(Accuracy = (TP +TN)/(TP + FP + TN + FN)): 在所有样本中,预测为真的比例
精确率:精确率(Precision = TP /(TP + FP)):预测结果为正例样本中真实为正例的比例(查得准)
召回率(Recall = TP /(TP + FN)):真实为正例的样本中预测结果为正例的比例(查得全,对正样本的区分能力)

Scikit-Learn提供了计算多种分类器指标的函数,包括精度和召回率:
precision_score()
recall_score()

5、把精度和召回率组合成一个单一的指标,称为F1分数。F1分数是精度和召回率的谐波平均值,只有当召回率和精度都很高时,分类器才能得到较高的F1分数。
公式:
在这里插入图片描述
要计算F1分数,只需要调用f1_score()即可
6、精度/召回率权衡
SGDClassifier分类器,会基于决策函数计算出一个分值,如果该值大于阈值,则该实例为正类,否则为负类。但是阈值不同,精度和召回率会不同。因此,要改动阈值。
Scikit-Learn不允许直接设置阈值,但是可以访问用于预测的决策分数,不是调用分类器的predict()方法,而是调用decision_function()方法,这种方法返回每个实例的分数,然后就可以根据这些分数,使用任意阈值进行预测。
7、如何决定用什么阈值?
使用cross_val_predict()函数获取训练集中所有实例的分数,返回决策分数
有了决策分数。
再用precision_recall_curve()函数计算所有可能的阈值的精度和召回率。
然后使用matplotlib绘制精度和召回率相对于阈值的函数图
8、另一种找到好的精度/召回率权衡的方法是直接绘制精度和召回率的函数图

9、ROC曲线(受试者工作特征曲线):绘制真正类率(召回率的另一名称)和假正类率(FPR)
FPR:是被错误分为正类的负类实例比率,它等于1-真负类率(TNR)
真负类率(TNR):被正确的分为负类的负类实例比率,也称为特异度。
10、要绘制ROC曲线,需要使用roc_curve()函数计算多种阈值的TPR和FPR
然后使用Matplotlib绘制曲线
11、比较分类器的方法是测量曲线下面积(AUC):
完美的ROC AUC等于1,纯随机分类器的ROC AUC等于0.5.
Scikit-Learn提供计算ROC AUC的函数

12、训练一个RandomForestClassifier分类器比较它和SGDCLassifier分类器的ROC曲线和ROC AUC分数。

  1. RandomForestClassifier类用dict_proba方法,返回一个数组
    RandomForestClassifier的ROC曲线看起来比SGDClassifier好很多
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值