sklearn中digits手写字体数据集介绍

本文介绍手写数字识别数据集的加载方法及其主要属性,包括1797个样本的8*8像素图像及对应的标签。展示了如何使用Python和sklearn库加载数据,并通过matplotlib展示图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 导入

from sklearn import datasets
digits = datasets.load_digits()

2. 属性查看

  • digits: bunch类型
print digits.keys()

['images', 'data', 'target_names', 'DESCR', 'target']

3. 具体数据

  • 1797个样本,每个样本包括8*8像素的图像和一个[0, 9]整数的标签

3.1 images

  • ndarray类型,保存8*8的图像,里面的元素是float64类型,共有1797张图片
  • 用于显示图片
# 获取第一张图片
print digits.images[0]
plt.imshow(digits.image[0])

[[  0.   0.   5.  13.   9.   1.   0.   0.]
 [  0.   0.  13.  15.  10.  15.   5.   0.]
 [  0.   3.  15.   2.   0.  11.   8.   0.]
 [  0.   4.  12.   0.   0.   8.   8.   0.]
 [  0.   5.   8.   0.   0.   9.   8.   0.]
 [  0.   4.  11.   0.   1.  12.   7.   0.]
 [  0.   2.  14.   5.  10.  12.   0.   0.]
 [  0.   0.   6.  13.  10.   0.   0.   0.]]

3.2 data

  • ndarray类型,将images按行展开成一行,共有1797行
  • 输入数据
# 获取第一张图片的数据
print digits.data[0]

[  0.   0.   5.  13.   9.   1.   0.   0.   0.   0.  13.  15.  10.  15.   5.
   0.   0.   3.  15.   2.   0.  11.   8.   0.   0.   4.  12.   0.   0.   8.
   8.   0.   0.   5.   8.   0.   0.   9.   8.   0.   0.   4.  11.   0.   1.
  12.   7.   0.   0.   2.  14.   5.  10.  12.   0.   0.   0.   0.   6.  13.
  10.   0.   0.   0.]

3.3 target

  • ndarray类型,指明每张图片的标签,也就是每张图片代表的数字
  • 输出数据,标签
# 获取第一张图片的标签
print digits.target[0]

0

3.4 target_names

  • ndarray类型,数据集中所有标签值
print digits.target_names

[0 1 2 3 4 5 6 7 8 9]

3.5 DESCR

  • 数据集的描述,作者,数据来源等

把一张图片转化为像素矩阵:

from sklearn.datasets import load_digits
import matplotlib.pyplot as plt


digits = load_digits()
print(digits.data[1].reshape((8,8))) #方法1
print(digits.images[1])#方法2


显示10张图片:

fig, ax = plt.subplots(
        nrows=2,
        ncols=5,
        sharex=True,
        sharey=True, )

ax = ax.flatten()

for i in range(10):
    ax[i].imshow(digits.data[i].reshape((8,8)), cmap='Greys', interpolation='nearest')

plt.show()



### 使用 Sklearn 实现 Digits 数据集的多类别分类 为了使用 `sklearn` 中的 `LogisticRegression` 函数对 `digits` 数据集实现多类别分类,以下是完整的解决方案: #### 导入必要的库 首先需要导入所需的 Python 库以及加载数据集。 ```python from sklearn.datasets import load_digits # 加载手写数字数据集 from sklearn.model_selection import train_test_split # 划分训练集和测试集 from sklearn.linear_model import LogisticRegression # 引入逻辑回归模型 from sklearn.metrics import accuracy_score, confusion_matrix, classification_report # 性能评估工具 import matplotlib.pyplot as plt # 可视化工具 ``` #### 数据预处理 加载 `digits` 数据集,并将其划分为训练集和测试集。 ```python # 加载 digits 数据集 digits = load_digits() # 查看数据基本信息 print(f"特征数量: {digits.data.shape}") # 输出特征矩阵形状 print(f"目标标签种类: {len(set(digits.target))}") # 输出目标标签种类数目 # 将数据拆分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( digits.data, digits.target, test_size=0.2, random_state=42) # 输出划分后的数据大小 print(f"训练集大小: {X_train.shape}") print(f"测试集大小: {X_test.shape}") ``` 上述代码通过 `train_test_split` 方法将数据按比例分割成训练集和测试集[^1]。 #### 构建逻辑回归模型 创建一个多类别的逻辑回归模型实例,并对其进行拟合操作。 ```python # 创建逻辑回归模型对象 model = LogisticRegression(multi_class='multinomial', solver='lbfgs', max_iter=1000) # 训练模型 model.fit(X_train, y_train) ``` 这里选择了参数 `multi_class='multinomial'` 和 `solver='lbfgs'` 来支持多类别分类任务。同时设置最大迭代次数为 1000 次以确保收敛[^3]。 #### 预测与性能评估 利用训练好的模型对测试集进行预测,并计算其准确性以及其他指标。 ```python # 测试集上进行预测 y_pred = model.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print(f"模型在测试集上的准确率为: {accuracy:.4f}") # 显示混淆矩阵 conf_mat = confusion_matrix(y_test, y_pred) plt.figure(figsize=(8, 6)) plt.imshow(conf_mat, interpolation='nearest', cmap=plt.cm.Blues) plt.title('Confusion Matrix') plt.colorbar() tick_marks = range(len(set(digits.target))) plt.xticks(tick_marks, tick_marks) plt.yticks(tick_marks, tick_marks) plt.xlabel('Predicted Label') plt.ylabel('True Label') # 展示分类报告 class_rep = classification_report(y_test, y_pred) print(class_rep) ``` 以上部分展示了如何基于混淆矩阵可视化错误分布情况,并打印详细的分类报告来分析各个类别的表现[^4]。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值