一、數據集介紹
手寫數字數據集(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-hant/n/279733.html