用Python編寫函數載入和預處理手寫數字數據集

一、數據集介紹

手寫數字數據集(MNIST)是一個非常有名的數據集,裡面包含了一組由0到9手寫數字的圖像數據集。這個數據集被用來測試數字分類演算法的效果。MNIST數據集可從Yann Lecun網站下載。

該數據集包含了訓練用的60000個樣本和測試用的10000個樣本,每個樣本是一個28*28的大小的灰度圖像,可將其看做矩陣或二維數組。

二、載入MNIST數據集

在Python中,可以使用如下代碼來將MNIST數據集載入到Python環境中:

from sklearn.datasets import fetch_openml

mnist = fetch_openml('mnist_784', version=1, as_frame=False)
X = mnist.data
y = mnist.target

這段代碼中,我們使用scikit-learn庫中的fetch_openml函數,從名稱為mnist_784的數據集中載入MNIST數據集,將數據作為NumPy數組的形式並將其存儲在變數X中。同時,我們還將對應的標籤存儲在變數y中。

需要注意的是,我們使用as_frame=False參數來確保將數據和標籤作為NumPy數組返回。

三、預處理MNIST數據集

1. 像素值歸一化

對於圖像分類任務,數據預處理通常是一個必要的環節,為了提高模型的性能,MNIST數據集也不例外。

對於像素值而言,很多演算法對像素值範圍更加敏感,而MNIST數據集中的像素值是介於0和255之間,因此我們需要將像素值歸一化到0到1之間。

以下代碼片段將像素值除以255來完成歸一化:

X = X/255.0

2. 單位化標籤

為了更好地使用數據標籤,應將每個標籤以單位向量形式表示。

具體而言,我們可以使用一個長度為10的向量來表示一個標籤,其中僅有對應的索引處為1,其餘位置均為0。

例如,標籤4可以被表示為[0,0,0,0,1,0,0,0,0,0]。

以下代碼片段將標籤轉換為單位向量的形式:

import numpy as np

y = y.astype(np.int)
n_classes = 10
y_one_hot = np.zeros((y.shape[0], n_classes))
y_one_hot[np.arange(y.shape[0]), y] = 1
y = y_one_hot

四、代碼示例

以下代碼是完整的載入和預處理MNIST手寫數字數據集的示例:

from sklearn.datasets import fetch_openml
import numpy as np

mnist = fetch_openml('mnist_784', version=1, as_frame=False)
X = mnist.data
X = X/255.0 # 歸一化
y = mnist.target.astype(np.int) # 類型轉換
n_classes = 10
y_one_hot = np.zeros((y.shape[0], n_classes))
y_one_hot[np.arange(y.shape[0]), y] = 1 # 單位化
y = y_one_hot

五、總結

在這篇文章中,我們使用Python編寫函數來載入和預處理手寫數字數據集。我們首先介紹了MNIST數據集的基本信息,然後詳細講解了如何使用scikit-learn庫中的fetch_openml函數來載入數據集,並對其進行一些基本的預處理,例如像素值歸一化和標籤的單位化向量表示。這些簡單的預處理步驟不僅可以提高演算法性能,也可以加速演算法的收斂速度。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279733.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-20 15:05
下一篇 2024-12-20 15:05

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • QML 動態載入實踐

    探討 QML 框架下動態載入實現的方法和技巧。 一、實現動態載入的方法 QML 支持從 JavaScript 中動態指定需要載入的 QML 組件,並放置到運行時指定的位置。這種技術…

    編程 2025-04-29
  • Python循環符合要求數字求和

    這篇文章將詳細介紹如何通過Python循環符合要求數字求和。如果你想用Python求和但又不想手動輸入數字,那麼本文將是一個不錯的選擇。 一、使用while循環實現求和 sum =…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 單片機列印函數

    單片機列印是指通過串口或並口將一些數據列印到終端設備上。在單片機應用中,列印非常重要。正確的列印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的列印數據可以幫助我們快速…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29

發表回復

登錄後才能評論