手寫數字可視化
- 手寫數字
- 流形學習
手寫數字
手寫數字無論是在數據可視化還是深度學習都是一個比較實用的案例。
數據在sklearn中,包含近2000份8 x 8的手寫數字縮略圖。
首先需要先下載數據,然后使用plt.imshow()
對一些圖形進行可視化:
打開cmd命令窗口,輸入pip install scikit-learn
(sklearn包被啟用了,要用scikit-learn包)
然后在jupyter notebook中輸入以下代碼
from sklearn.datasets import load_digits
import matplotlib.pyplot as pltdigits = load_digits(n_class=6)
fig, ax = plt.subplots(8, 8, figsize=(6, 6))
for i, axi in enumerate(ax.flat):axi.imshow(digits.images[i], cmap='binary')axi.set(xticks=[], yticks=[])plt.show()
輸出圖
總體
流形學習
由于每個數字都由64像素的色相構成,因此可以將每個數字看成是一個位于64維空間的點,即每個維度表示一個像素的亮度。但是想通過可視化來描述如此高維度的空間是非常困難的。
一種解決方案是通過降維技術,在盡量保留數據內部重要關聯性的同時降低數據的維度,例如流形學習。
下面展示如何用流形學習將這些數據投影到二維空間進行可視化:
from sklearn.datasets import load_digits
from sklearn.manifold import Isomap
iso = Isomap(n_components=2)
digits = load_digits(n_class=6)
projection = iso.fit_transform(digits.data)
plt.scatter(projection[:, 0], projection[:, 1], lw=0.1,
c=digits.target, cmap=plt.cm.get_cmap('cubehelix', 6))
plt.colorbar(ticks=range(6), label='digit value')
plt.clim(-0.5, 5.5)
輸出結果
總體
上面使用了離散型顏色條來顯示結果,調整ticks和clim參數來改善顏色條。這個結果向我們展示了一些數據集的有趣特性。
例如數字5與數字3在投影中有大面積重疊,說明一些手寫的5與3難以區分,因此自動分類算法也更容易搞混它們。其它的數字,像數字0與數字1,隔得特別遠,說明兩者不太可能出現混淆。