二分类器、混淆矩阵、精度、召回率、ROC曲线、PR曲线

手写数字识别,机器学习“分类”学习笔记—来自Geron的《机器学习实战》图片识别领域的“hello word”文章目录MNIST训练二元分类器性能测量使用交叉验证测量准确率混淆矩阵精度和召回率精度/召回率权衡ROC曲线MNIST获取MNIST代码,70000张手写数字的图片----28x28个像素0-255黑白像素点Scitkit-Learn 加载数据集通常为字典结构(这里需要下载数据集,时间比较长,data_home为保存路径,事先设定好路径之后就不会找不到数据存放在那了)from skle
摘要由CSDN通过智能技术生成

手写数字识别,机器学习“分类”学习笔记—来自Geron的《机器学习实战》

图片识别领域的“hello word”

MNIST

获取MNIST代码,70000张手写数字的图片----28x28个像素0-255黑白像素点


Scitkit-Learn 加载数据集通常为字典结构


(这里需要下载数据集,时间比较长,data_home为保存路径,事先设定好路径之后就不会找不到数据存放在那了)

from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784',version=1,data_home='./datasets',as_frame=False)
mnist.keys()
dict_keys(['data', 'target', 'frame', 'categories', 'feature_names', 'target_names', 'DESCR', 'details', 'url'])

注意:这里mnist = fetch_openml(‘mnist_784’,version=1,data_home=’./datasets’, as_frame=False )这里书上是没有as_frame=False的,当没有这句话时,后面是读不出来数据的


去查看了git-hub上的代码是这样说的
Warning: since Scikit-Learn 0.24, fetch_openml() returns a Pandas DataFrame by default. To avoid this and keep the same code as in the book, we use as_frame=False.

可见是版本更新之后出现的与数据格式的不同

X,y = mnist["data"],mnist["target"]
X.shape
(70000, 784)
y.shape
(70000,)

使用Matplotlib中的imgshow()将图片显示出来

import matplotlib as mpl
import matplotlib.pyplot as plt
some_digit = X[0]
some_digit_image = some_digit.reshape(28,28)

plt.imshow(some_digit_image,cmap="binary")
plt.axis("off")
plt.show()

y[0]

在这里插入图片描述

'5'

这里标签是字符,机器学习希望标签为数字

import numpy as np
y = y.astype(np.uint8)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = X[:60000],X[60000:],y[:60000],y[60000:]

训练二元分类器

从二分类问题开始,区分数字5与非5
用随机梯度下降分类器SGD,SGD优势在于能够有效处理非常大型的数据集

y_train_5=(y_train == 5)
t_test_5 = (y_test == 5)

from sklearn.linear_model import SGDClassifier
sgd_clf = SGDClassifier(random_state = 27) # 27 是随机数种子,这里自己定义就好
sgd_clf.fit(X_train,y_train_5)
SGDClassifier(random_state=27)
sgd_clf.predict([some_digit])#这里就是上面图片所示的数字5
array([ True])

性能测量

使用交叉验证测量准确率

用cross_val_score()函数来评估SGDClassifier模型,采用K折叠验证法(三个折叠)

from sklearn.model_selection import cross_val_score
cross_val_score(sgd_clf,X_train,y_train_5,cv=3,scoring="accuracy")
array([0.9436 , 0.95535, 0.9681 ])

折叠交叉的正确率超过93%,看起来很高的样子,但是如果把每一个测试集都语言成非5的话,正确率将达到90%,如下所示

from sklearn.base import BaseEstimator

class Never5Classifier(BaseEstimator):
    def fit(self,X,y=None):
        return self
    def predict(self,X):
        return np.zeros((len(X),1),dtype=bool)#预测全为0
    
neve
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROC曲线(Receiver Operating Characteristic Curve)和PR曲线Precision-Recall Curve)是在二分类问题中常用的评估模型性能的工具,它们有一些区别和特点。 1. 目标不同: - ROC曲线关注的是真正例(True Positive Rate,即召回)与假正例(False Positive Rate)之间的权衡。ROC曲线展示了在不同阈值下,分类的敏感性和特异性之间的关系。 - PR曲线则关注的是精确Precision)与召回(Recall)之间的权衡。PR曲线展示了在不同阈值下,分类的预测准确性和查全之间的关系。 2. 数据分布不平衡时的表现: - ROC曲线对于数据分布不平衡的情况下相对稳定,因为它使用了假正例作为横轴,而假正例不受真实负例数量的影响。 - PR曲线在数据分布不平衡时更能准确地反映分类的性能,因为它使用了精确作为纵轴,能够展示在正例中的正确预测比例。 3. 敏感性不同: - ROC曲线能够展示分类在整个概范围内的性能,对于不同的阈值都可以进行评估。 - PR曲线则更关注分类在高概(高置信度)区域的性能,对于低概的预测结果较为敏感。 总而言之,ROC曲线主要用于评估分类的整体性能,特别是在样本不平衡的情况下,而PR曲线则更适用于评估分类在正例预测方面的性能。根据具体问题和需求,选择合适的曲线进行模型性能评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值